传输控制协议(TRANSMISSION CONTROL PROTOCOL)
DARPA INTERNET程序
协议规范
传输控制协议在包交换计算机通讯网络和这些网络的互联系统中作为一个高
可靠性的主机到主机协议使用。
本文档描述了传输控制协议执行的功能,实现的程序,和程序接口或者要求它
的服务的用户。
计算机通信系统在军事、政府和民用环境中起着越来越重要的作用。本文档主
要将注意力集中在军用计算机通讯要求,尤其是在不可靠通信中的坚固和在拥
塞情况下的可用,但是很多这样的问题在民用和政府用途环境中也会碰到。
随着战略上和战术上的计算机通讯网络的发展和应用,提供一种方法来连接
这些网络,以及提供可用的支持大量应用程序的标准进程间通信协议是必要的。
预料到该标准的需要,国防研究和工程副部长宣告了这里描述的TCP协议,来
作为DoD范围的互联协议标准的基础。
TCP是一个基于连接的、端到端的可靠协议,该协议设计以用来适应一个支持
多个网络应用程序的层间协议结构。TCP提供了在属于不同的但是是互联的
计算机通信网络的宿主主机中的进程对间的可靠进程间通讯。在TCP层之下,
很少考虑到通信协议的可靠性。TCP假定它可以从底层协议获得一个简单的、
潜在的不可靠数据报。原理上,TCP必须能够在一个从有线连接到包交换或者
回路交换网络的比较大范围的通讯系统上工作。TCP基于Cerf和Kahn在[1]中
第一次描述的概念。TCP适用于一个层间协议架构,该架构在一个基本的Internet
协议之上,Internet协议为TCP提供了一种发送和接收封装在internet数据报中
的可变长度分片的方法。internet数据报提供了在不同网络中寻址源和目的
TCPs的方法。Internet协议也处理为在多个网络和互联网关上取得传输和
投递所进行的TCP分片的分片和重组。internet协议也携带优先级、安全分类
和TCP分片的分隔,因此这些信息可用通过多个网络进行端到端传输。
本文档大部分是在宿主计算机中位于高层协议下的TCP实现上下文中写的。
有些计算机网络会通过承载有TCP和ip层以及网络特定软件前端计算机连接
到网络。TCP规范描述了到高层协议的接口,这些接口即使对于前端情况也是
可实现的,同时一个适合的主机到前台(host-to-front)端协议也被实现。
Protocol Layering
+---------------------+
| higher-level |
+---------------------+
| TCP |
+---------------------+
| internet protocol |
+---------------------+
|communication network|
+---------------------+
Figure 1
1.2范围(Scope)
TCP用来在多网络环境下提供一个可靠的进程到进程通讯服务。TCP用来作为
在多网络条件下的通用的主机到主机协议。
本文档提出了任何TCP实现所要求的行为的规范,包括同高层协议的交互以及同
其它TCPs的交互。文档的其它部分提高了一个协议接口和操作的简要视图。第二
部分概要描述了TCP设计的理论基础,第三部分提供了不同事件发生情况下(新
分片到达,用户调用,错误等)的TCP要求的行为和TCP分片的详细描述。
TCP接口一端是用户或者应用程序,另一端是底层协议如IP协议。
应用程序和TCP间的接口将详细阐述。该接口包含一套调用,类似于操作系统提供
给应用程序操作文件的接口。比如,有打开和关闭连接以及在已经建立的连接上发送
数据报的接口。同时希望TCP可以异步地同几个应用程序通信。虽然TCP的实现者
有一定的自由设计适合于特定操作系统环境的接口,对任何一个合法的实现来说,都
需要实现一个TCP/用户接口的最小接口集合。
除了认为存在一个机制可以互相异步地传递信息,TCP和底层协议的接口没有特别指
定。通常希望底层协议来指定该接口。TCP设计来在一个非常通用的互联网络上工作。
本文档假定的底层协议是Internet协议[2]。
如上所述,TCP的一个主要目的是在进程间提供可靠的,安全的逻辑回路或者连接服务。
为了在一个比较不可靠的相互通信上提供这个服务,系统要求提供如下功能:
基本的数据传输(Basic Data Transfer)
可靠性(Reliability)
流控(Flow Control)
多路(Multiplexing)
连接(Connections)
优先级和安全性(Precedence and Security)
TCP在这些领域的基本操作在下面的段落中描述。
基本数据传输:
TCP通过将一定量的字节打包成在internet系统上传输的分片,能够在用户之间在两个
方向上传输连续的字节流。通常情况下,TCPs决定什么时候阻塞以及前推数据。
有时候用户需要确保他们所提交给TCP的所有数据都被传输。基于这个目的,定义了
push功能。为了确认提交给TCP的数据报确实被传送了,发送用户指示数据必须被推
给接收用户。Push导致了TCPs立即前推和投递数据给接收者。确切的push点对接收用户
可能不可见,且push功能不提供一个记录边界标识。
可靠性(Reliability)
TCP必须从被internet通信系统破坏的,丢失的,复制的或者非正确顺序投递的数据中
恢复。这是通过给每个传输的字节流分片一个系列号实现的,且要求从接收TCP有肯定
的确认(ACK)。如果ACK在一个间隔内(timeout interval)没有收到,数据就重传。在
接收端,系列号用来正确对分片排序(分片可能次序颠倒)以及排除重复分片。通过给每
个传输分片增加一个校验和来处理损坏,在接收端进行检查,且丢弃损坏的分片。
流量控制(Flow Control)
TCP为接收者提供一个办法让其控制发送者发送的数据的数量。这是通过在每个ACK中
返回一个窗口(“window”)来指示超过最后成功接收的一个分片的可接受的系列号码的
范围。窗口指示了发送者在接收到进一步的允许前可以传输的字节的数量。
多路技术(Multiplexing)
为了允许在一个单独的主机里多个进程同时使用TCP通信机制,TCP提供了一套地址和
端口。从internet通信层同网络和宿主地址连接,这形成了一个socket。一对socket标识
了一个连接。也就是说,一个socket可能同时被使用在多个连接中。
绑定端口到进程被每个主机单独处理。但是,将常用的进程(如“logger”或者时间服务)
隶属于众所皆知的socket被证明是有用的。这些服务就可以通过已知的地址获取到。
建立和学习其它进程的端口地址可能包括更加动态的机制。
连接(Connections)
上面描述的可靠性和流量控制机制要求所有的TCPs为每个数据流发起和维护某些状态
信息。这些信息的结合体,包括sockets,系列号,和窗口大小,被称为一个连接。每个
连接被一套指定两端的sockets唯一指定。
当两个进程需要通信的时候,他们的TCPs必须首先建立一个连接(在每一端初始化状态
信息)。当通信完成的时候,连接终止或者关闭以释放资源用于其它用途。
由于连接必须在不可靠的主机和不可靠的internet通信系统上建立,一个带有基于时钟的
系列号的握手机制被用来避免连接的错误初始化。
优先级和安全(Precedence and Security)
TCP用户可以指示通信的安全性和优先级。当这些特性不需要的时候,规定采用缺省值。