<p><pre><code>    data and transport layers are almost always intermingled
</code></pre>
In what sense other than NATing, which has been a stop-gap measure to deal with IPv4 address shortage? TCP&#x2F;UDP sit on top of the network layer, not the data (link) layer. And the two main requirements that TCP&#x2F;UDP make of the network layer is (1) that all network layer connected devices (interfaces) have a unique address and (2) you can send packets between any two network connected devices (interfaces) in a best-effort way.<p>What the transport layer adds on top of that is<p>- multiplexing of network layer addresses (TCP and UDP use port numbers for this) so multiple processes can share a single network layer connection and<p>- error detection&#x2F;correction (TCP only) to transform the unreliable (best effort) service the network layer offers into a reliable service.<p>- Streaming (TCP only): the sender&#x27;s data stream that a TCP client creates is split into packets and later reassembled.<p>I think it&#x27;s a beautiful separation of concerns.