传输控制协议(TRANSMISSIONCONTROLPROTOCOL)DARPAINTERNET程序协议规范1.介绍传输控制协议在包交换计算机通讯网络和这些网络的互联系统中作为一个高可靠性的主机到主机协议使用。本文档描述了传输控制协议执行的功能,实现的程序,和程序接口或者要求它的服务的用户。1.1动机(Motivation)计算机通信系统在军事、政府和民用环境中起着越来越重要的作用。本文档主要将注意力集中在军用计算机通讯要求,尤其是在不可靠通信中的坚固和在拥塞情况下的可用,但是很多这样的问题在民用和政府用途环境中也会碰到。随着战略上和战术上的计算机通讯网络的发展和应用,提供一种方法来连接这些网络,以及提供可用的支持大量应用程序的标准进程间通信协议是必要的。预料到该标准的需要,国防研究和工程副部长宣告了这里描述的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)端协议也被实现。ProtocolLayering+---------------------+|higher-level|+---------------------+|TCP|+---------------------+|internetprotocol|+---------------------+|communicationnetwork|+---------------------+Figure11.2范围(Scope)TCP用来在多网络环境下提供一个可靠的进程到进程通讯服务。TCP用来作为在多网络条件下的通用的主机到主机协议。1.3关于这个文档本文档提出了任何TCP实现所要求的行为的规范,包括同高层协议的交互以及同其它TCPs的交互。文档的其它部分提高了一个协议接口和操作的简要视图。第二部分概要描述了TCP设计的理论基础,第三部分提供了不同事件发生情况下(新分片到达,用户调用,错误等)的TCP要求的行为和TCP分片的详细描述。1.4接口TCP接口一端是用户或者应用程序,另一端是底层协议如IP协议。应用程序和TCP间的接口将详细阐述。该接口包含一套调用,类似于操作系统提供给应用程序操作文件的接口。比如,有打开和关闭连接以及在已经建立的连接上发送数据报的接口。同时希望TCP可以异步地同几个应用程序通信。虽然TCP的实现者有一定的自由设计适合于特定操作系统环境的接口,对任何一个合法的实现来说,都需要实现一个TCP/用户接口的最小接口集合。除了认为存在一个机制可以互相异步地传递信息,TCP和底层协议的接口没有特别指定。通常希望底层协议来指定该接口。TCP设计来在一个非常通用的互联网络上工作。本文档假定的底层协议是Internet协议[2]。1.5操作如上所述,TCP的一个主要目的是在进程间提供可靠的,安全的逻辑回路或者连接服务。为了在一个比较不可靠的相互通信上提供这个服务,系统要求提供如下功能:基本的数据传输(BasicDataTransfer)可靠性(Reliability)流控(FlowControl)多路(Multiplexing)连接(Connections)优先级和安全性(PrecedenceandSecurity)TCP在这些领域的基本操作在下面的段落中描述。基本数据传输:TCP通过将一定量的字节打包成在internet系统上传输的分片,能够在用户之间在两个方向上传输连续的字节流。通常情况下,TCPs决定什么时候阻塞以及前推数据。有时候用户需要确保他们所提交给TCP的所有数据都被传输。基于这个目的,定义了push功能。为了确认提交给TCP的数据报确实被传送了,发送用户指示数据必须被推给接收用户。Push导致了TCPs立即前推和投递数据给接收者。确切的push点对接收用户可能不可见,且push功能不提供一个记录边界标识。可靠性(Reliability)TCP必须从被internet通信系统破坏的,丢失的,复制的或者非正确顺序投递的数据中恢复。这是通过给每个传输的字节流分片一个系列号实现的,且要求从接收TCP有肯定的确认(ACK)。如果ACK在一个间隔内(timeoutinterval)没有收到,数据就重传。在接收端,系列号用来正确对分片排序(分片可能次序颠倒)以及排除重复分片。通过给每个传输分片增加一个校验和来处理损坏,在接收端进行检查,且丢弃损坏的分片。流量控制(FlowControl)TCP为接收者提供一个办法让其控制发送者发送的数据的数量。这是通过在每个ACK中返回一个窗口(“window”)来指示超过最后成功接收的一个分片的可接受的系列号码的范围。窗口指示了发送者在接收到进一步的允许前可以传输的字节的数量。多路技术(Multiplexing)为了允许在一个单独的主机里多个进程同时使用TCP通信机制,TCP提供了一套地址和端口。从internet通信层同网络和宿主地址连接,这形成了一个socket。一对socket标识了一个连接。也就是说,一个socket可能同时被使用在多个连接中。绑定端口到进程被每个主机单独处理。但是,将常用的进程(如“logger”或者时间服务)隶属于众所皆知的socket被证明是有用的。这些服务就可以通过已知的地址获取到。建立和学习其它进程的端口地址可能包括更加动态的机制。连接(Connections)上面描述的可靠性和流量控制机制要求所有的TCPs为每个数据流发起和维护某些状态信息。这些信息的结合体,包括sockets,系列号,和窗口大小,被称为一个连接。每个连接被一套指定两端的sockets唯一指定。当两个进程需要通信的时候,他们的TCPs必须首先建立一个连接(在每一端初始化状态信息)。当通信完成的时候,连接终止或者关闭以释放资源用于其它用途。由于连接必须在不可靠的主机和不可靠的internet通信系统上建立,一个带有基于时钟的系列号的握手机制被用来避免连接的错误初始化。优先级和安全(PrecedenceandSecurity)TCP用户可以指示通信的安全性和优先级。当这些特性不需要的时候,规定采用缺省值。2.体系(PHILOSOPHY)2.1Internetwork系统的元素internetwork环境由连接到依次通过网关互联的网络的主机组成。这里的网络有可能是局域网络(比如ETHERNET)或者大网络(比如ARPANET),但是任何一种情况都是基于包交换技术。产生和消费消息的活动代理是进程。在网络,网关和主机上不同层次的协议支持一个通信系统,该系统提供了进程端口之间在逻辑连接上的双向数据流。术语包(packet)用在这里表示一个主机和它的网络之间的一次事务的数据。我们通常不用关心一个网络内交换的数据块的格式。主机是附着在一个网络上的计算机,从通信网络的观点来看,是包的源和目的地。进程在主机里被视为活动的元素(根据相对普遍的定义,进程是在执行的程序)。终端和文件或者其它I/O设备都被视为通过进程的使用彼此通信的东东。因此,所有的通信被视为进程间通信。既然一个进程可能需要在它自己和其它进程间区分通信流,我们想像每个进程可以有几个端口,通过这些端口,进程同其它进程的端口进行通信。2.2操作模型进程通过调用TCP传输数据,调用时传递数据的缓冲。TCP将这些缓冲的数据打包成分片,然后调用internet模块来传输每个分片到目的TCP。接收TCP将一个分片中的数据放置到接收用户缓冲,然后通知接收用户。TCPs在分片里面包含了控制信息来确保可靠有序的数据传输。Internet通信模型是由一个同每个TCP有联系的internet协议模块提供了到局域网络的接口,这个internet模块组装TCP分片到internet数据报,然后为这些数据报选路到一个目的internet模块或者中继网关。为了在局域网络上传输数据报,它被包含在一个局域网络桢中。包交换可以执行进一步的包装,分片或者其它操作以投递局域网包到目的internet模块。在一个网络间的网关上,从它的局域网包上来的internet数据报是未经包装的(unwrapped),这些数据报被检查以确定数据报下一个要经过的网络。然后Internet数据报被包装成适合于下一个网络的局域包,然后被选路到下一个网关或者最后的目的地。允许网关将一个internet数据报分解成更小的internet数据报分片,如果这在下一个网络中传输是必要的话。要这样做,网关要产生一套internet数据报,每个携带一个分片。分片在接下去的网关中可能会进一步分解成更小的分片。Internet分片设计成目的internet模块可以组装分片成一个internet数据报的格式。目的internet模块从数据报解开分片后(如果需要,经过重组数据报)传给目的TCP。这个简单的操作被多个细节注释。一个重要的特性是服务类型。这给网关(或internet模块)提供了指导它选择在下一个网络上传输的服务参数的信息。包含在服务类型信息里面的是数据报的优先级信息。数据报也可以携带安全信息来允许主机和操作在不同安全级别环境上的网关来基于安全考虑正确隔离数据报。2.3主机环境TCP被当作操作系统中的一个模块。用户就像他们访问文件系统那样访问TCP。TCP可以调用其它操作系统接口,比如,管理数据结构的接口。假设真正的对网络的接口由设备驱动模块控制。TCP不直接调用网络设备驱动,而是调用internet数据报协议模块,在internet数据报协议模块中调用设备驱动。TCP机制并不排除在一个前端(台)处理器(front-endprocessor)上的TCP实现。但是,在这样一个实现中,一个主机到前台(host-to-front-end)的协议必须提供功能来支持在本文档中描述的TCP用户接口的类型。2.4接口TCP/用户接口提供了用户可以调用的TCP的接口,这些接口用来打开或者关闭一个连接,发送或者接收数据,或者获取一个连接的状态信息。这些接口同操作系统中其它用户的接口相似,比如,打开,读取或者关闭一个文件的接口。TCP/internet接口提供了在internet系统中发送和接收寻址到主机上的TCP模块的数据报。这些接口中可以传递地址(address),服务类型(typeofservice),优先级(precedence),安全(security)和其它控制信息。2.5同其它协议的关系下图展示了TCP在协议层次结构中的地位:+------++-----++-----++-----+|Telnet||FTP||Voice|...||ApplicationLevel+------++-----++-----++-----+||||+-----++-----++-----+|TCP||RTP|...||