Must TCP use IP?
Solution 1:
TCP and IP (v4 & v6) are definitely separable, and one does not imply the other, as proved by the example of TCP over IPX (RFC 1791).
However, TCP cannot be built over just any network protocol. Two reasons:
- There is no segment size field in the TCP header (only the Data Offset, which gives the size of the TCP header). Therefore TCP will work only with a lower layer protocol that includes enough information to calculate the size of the TCP segment (i.e., the payload size of the lower layer protocol). That assumption is true for IPv4 (RFC 791), IPv6 (RFC 2460) and IPX (RFC 1791). But not true in general, e.g., not for avian carriers (RFC 1149) (see note a).
- TCP is only designed to work over a connectionless network protocol. TCP effectively does not work over certain connection-oriented network protocols (e.g., the ATM constant bit-rate service), because the two fighting rate control functions lead to very poor or unpredictable performance. Another degenerate example is TCP over a TCP tunnel.
The TCP specification, RFC 793, is not a good source to decide this question, because it admits that it leaves its interface with the lower layer largely unspecified.
Note a) For TCP to reassemble datagrams printed on little sheets of paper (whether carried by pigeons or a more intelligent corvid network), the size of the payload would have to be written in a standard location. Alternatively, an adaptation layer could heuristically determine the segment size. The optical scanner used in the implementation of the host stack of the avian carriers spec (RFC 1149) included such an heuristic adaptation layer, but it remains undocumented.
Solution 2:
I haven't read the whole RFC but the language in section 1.4 seems to suggest that any "lower level" protocol can be used.
The interface between TCP and lower level protocol is essentially unspecified except that it is assumed there is a mechanism whereby the two levels can asynchronously pass information to each other. Typically, one expects the lower level protocol to specify this interface. TCP is designed to work in a very general environment of interconnected networks. The lower level protocol which is assumed throughout this document is the Internet Protocol.