Transmission Control Protocol
The Transmission Control Protocol (usually TCP) is the reliable byte stream protocol of the TCP/IP protocol suite. It provides bi-directional connections, identified by a pair of Internet Protocol (IP) host addresses, along with a 16-bit port number, at each end, between pairs of hosts.
It runs on top of the Internet Protocol - the internetworking layer in TCP/IP. That layer is unreliable - packets carried by it may be delayed, damaged, duplicated, re-ordered, or lost. TCP therefore has to use a number of mechanisms to built a reliable stream out of the unreliable substrate.
To do that, it uses checksums (to prevent and detect damaged data), sequence numbers (each byte sent over the channel is individually numbered), acknowledgements, timeouts (to look for missing acknowledgements), and re-transmissions (of data which was damaged, or never acknowledged, and thus was somehow lost).
A number of major application protocols (including HTTP, email, etc) are built on top of TCP.
Development history
The early development of TCP is poorly covered in recent histories; fortunately, between the specifications for early versions (available in the Internet Experiment Note (IEN) series), and the excellent meeting minutes of the TCP and Internet Meetings taken by Jon Postel (also available there), much of it can be re-created.
In the beginning, there was only TCP - IP did not yet exist as a distinct protocol. The functionality that would later be provided by IP was included in the early versions of TCP. (Note also that prior to the TCP and IP bake offs, most testing was done from an implementation to itself, so early implementations might in fact have been subtly different from each other.)
Early versions were:
Version | Document | Date | Comment |
---|---|---|---|
1 | Specification of Internet Transmission Control Program re-printed as RFC-675 |
December, 1974 | |
2 | IEN-5 | March, 1977 | The last version before the split into TCP and IP started |
2.5 | Mentioned in IEN-67, -68 | Late 1977 | Not really a different protocol; apparently the existing TCP-2 header formats were retained, and various fields 'assigned' to TCP or IP (i.e. routers only looked at these latter ones) |
3 | IEN-21 | January, 1978 | The full split, and variable length addresses adopted |
4 | IEN-44 and others | June, 1978 | Go back to shortish, fixed length addresses |
In addition to these, the IEN trail contains a number of other things that were just proposals (true 'Requests for Comments'), which were never implemented by everyone/anyone:
- IEN-18, "TCP Revisions"
- IEN-26, "A Proposed New Internet Header Format"
- IEN-27, "A Proposal for TCP Version 3.1 Header Format"
- IEN-41, "Internetwork Protocol Specification - Version 4" (not the real IPv4)
Don't be confused by these historical artifacts!
See also
External links
- A Protocol for Packet Network Intercommunication
- RFC-675 - Specification of Internet Transmission Control Program
- IEN-5 - TCP Version 2 Specification
- IEN-21 - TCP 3 Specification
- IEN-44 - Latest Header Formats
- IEN-18 - TCP Revisions
- IEN-26 - A Proposed New Internet Header Format
- IEN-27 - A Proposal for TCP Version 3.1 Header Format
- IEN-41 - Internetwork Protocol Specification - Version 4