Difference between revisions of "Transmission Control Protocol"

From Computer History Wiki
Jump to: navigation, search
(Early documents discussing the Transmission Control *Program*.)
(Add 'Development history')
Line 1: Line 1:
The '''Transmission Control Protocol‏‎''' (usually '''TCP''') is the [[reliable byte stream]] [[protocol]] of the [[TCP/IP]] [[protocol suite]]. It provides [[connection]]s, identified by a pair of [[Internet Protocol]] host [[address]]es and a 16-bit [[networking port|port]] number on each end, between pairs of [[host]]s.
+
The '''Transmission Control Protocol‏‎''' (usually '''TCP''') is the [[reliable byte stream]] [[protocol]] of the [[TCP/IP]] [[protocol suite]]. It provides bi-directional [[connection]]s, identified by a pair of [[Internet Protocol]] (IP) host [[address]]es, along with a 16-bit [[networking port|port]] number, at each end, between pairs of [[host]]s.
  
 
It runs on top of the Internet Protocol - the [[internetworking layer]] in TCP/IP. That layer is unreliable - [[packet]]s 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.
 
It runs on top of the Internet Protocol - the [[internetworking layer]] in TCP/IP. That layer is unreliable - [[packet]]s 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.
Line 6: Line 6:
  
 
A number of major [[application]] protocols (including [[Hypertext Transfer Protocol|HTTP]], [[email]], etc) are built on top of TCP.
 
A number of major [[application]] protocols (including [[Hypertext Transfer Protocol|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.
 +
 +
Early versions were:
 +
 +
{| class="wikitable" style="text-align: center;"
 +
! Version !! Document !! Date !! Comment
 +
|-
 +
| 1 || Specification of Internet Transmission Control Program<br>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 || &nbsp; || &nbsp; || Not really a different protocol; apparently the existing header formats were retained, and various fields 'assigned' to TCP or IP (i.e. [[router]]s 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!
 +
 +
{{semi-stub}}
  
 
==See also==
 
==See also==
  
* [[TCP and Internet Meetings]]
 
 
* [[TCP and IP bake offs]]
 
* [[TCP and IP bake offs]]
  
Line 15: Line 47:
  
 
* [https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf A Protocol for Packet Network Intercommunication]
 
* [https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf A Protocol for Packet Network Intercommunication]
* [https://datatracker.ietf.org/doc/html/rfc675 RFC 675 - Specification of Internet Transmission Control Program]
+
* [https://datatracker.ietf.org/doc/html/rfc675 RFC-675 - Specification of Internet Transmission Control Program]
 
+
* [https://www.rfc-editor.org/ien/ien5.pdf IEN-5 - TCP Version 2 Specification]
{{semi-stub}}
+
* [https://www.rfc-editor.org/ien/ien21.pdf IEN-21 - TCP 3 Specification]
 +
* [https://www.rfc-editor.org/ien/ien44.pdf IEN-44 - Latest Header Formats]
 +
* [https://www.rfc-editor.org/ien/ien18.pdf IEN-18 - TCP Revisions]
 +
* [https://www.rfc-editor.org/ien/ien26.pdf IEN-26 - A Proposed New Internet Header Format]
 +
* [https://www.rfc-editor.org/ien/ien27.pdf IEN-27 - A Proposal for TCP Version 3.1 Header Format]
 +
* [https://www.rfc-editor.org/ien/ien41.pdf IEN-41 - Internetwork Protocol Specification - Version 4]
  
 
[[Category: TCP/IP Protocols]]
 
[[Category: TCP/IP Protocols]]

Revision as of 15:46, 24 January 2025

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.

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     Not really a different protocol; apparently the existing 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