layers as providing or consuming a service is a method of abstraction to
isolate upper layer protocols from the nitty gritty detail of transmitting
bits over, say, Ethernet and collision detection while the lower layers avoid
having to know the details of each and every application and its protocol.
abstraction also allows upper layers to provide services that the lower
layers cannot, or choose not, to provide. For example, IP is designed to not
be reliable and is a best effort delivery protocol. This means that all transport
layers must choose whether or not to provide reliability and to what degree.
UDP provides data integrity (via a checksum) but does not guarantee delivery;
TCP provides both data integrity and delivery guarantee (by retransmitting
until the receiver receives the packet).