RFC793

来源:互联网 发布:兰新高铁 知乎 编辑:程序博客网 时间:2024/06/03 16:34

前言

    本文档描述的是DoD标准传输控制协议(TCP)ARPA TCP规范有9个早期版本,本标准基于它们,并且当前的内容很大程度上提取自它们。有很多贡献者投入本协议概念和内容的制定。本次修订澄清一些细节,去除信尾缓存区大小调整,并重新描述作为推功能的信封机制。

Jon Postel

编者

传输控制协议

DARPA 互联网程序协议规范

1、介绍

    传输控制协议(TCP)是为以包交换为基础的计算机通信网络和类似的互联网络之间的主机提供高可靠的端到端通信的网络协议。

    本文档描述了传输控制协议将执行的功能,实现程序和为要求其服务的程序或用户提供的接口。

1.1、动机

    计算机通信系统在军事,政府,民用环境中扮演的角色日益重要。本文档主要关注军事领域计算机通信的要求,特别是在不可靠通信环境下的健壮性和拥塞环境下的可使用性,这些问题同样存在于民用和政府部门。

作为战略和战术发展部署的计算机通信网络有必要提供互联的方式,以便提供标准的进程间通信,从而支持更广范围的应用。在预计到对这种标准的需求后,美国研究工程国防部声明了传输控制协议(TCP),用来描述这方面的内容,并作为DoD-wide进程通信协议标准的基础。

TCP是一个基于连接,端到端可靠的协议,用于适应支持复杂网络应用的协议分层结构。TCP为处于截然不同但互联的计算机通信网络中的计算机主机内的进程对之间提供可靠的进程间通信。对于TCP层下的通信协议的可靠性作出非常少的假设。TCP假设它能从底层协议获取一个简单地,潜在的非可靠数据报服务。原则上,TCP应该能够处理通信系统的广泛领域,其范围从有线连接到分组交换或线路交换网络。

TCP基于首先由CerfKahn提出的在[1]中描述的概念。TCP适合分层协议结构,正好处于基本网际协议[2]之上,它为TCP提供某种方式来传输和接收封装在互联网数据报"信封"中的可变长数据报段。互联网数据报提供手段用于寻址不同网络中的源和目的TCP。网际协议处理TCP数据报的分割与重组已实现数据报通过不同网络和网关来传输和递送。网际协议还携带优先级信息,安全性验证和TCP数据报分段的区分,因此该信息就能在多个网络中进行端对端的通信。

                               

协议分层

                        +---------------------------+

                        |      上层协议                |

                        +---------------------------+

                        |        TCP                     |

                        +--------------------------+

                        |       网际协议              |

                        +---------------------------+

                        |       通讯网络              |

                        +---------------------------+

                                         图1

    本文档大部分描写的是关于TCP实现的内容,这些实现和其他高层协议一起共驻计算机主机内存。某些计算机系统通过掩盖TCP协议和网际协议层或特定网络软件的前端计算机连接到网络。TCP规范描述了一个连接上级协议层的接口,此接口是可实现的,即使是在前端情况下,只要实现一个适当的主机与前端协议。

1.2、范围

TCP被设计用来为复杂网络环境提供可靠的进程间通信服务,同时也是一个端对端的通信协议。

1.3、关于文档

本文档重新描述任何TCP实现所要求的行为规范,包括其与上层协议的交互行为和其与其他TCP终端的交互行为两个方面。本节其它部分提供对该协议的接口和操作的一个简短的见解。第二节总结了TCP设计的基本哲学思想。第3节提供当各种事件发生时(新分段到达,用户调用,错误等)TCP所要求行为的详细描述和TCP数据报分段的具体格式。

1.4、接口

TCP接口一方面针对用户或应用程序进程,另一方面针对下层协议,如网际协议。

应用进程和TCP之间的接口描述的详略得当。该接口包括一系列调用,和操作系统为应用进程进行文件操作提供的调用类似。例如,打开关闭连接,在已有连接上接收发送数据都需要很多调用。它还假设TCP能够和应用程序异步通信。尽管允许TCP实现者有相当的自由度来设计接口,使其适合特定的操作系统环境,但要为TCP或用户接口提供一个最小的任何有效实现。

TCP和下层协议除了假定两者之间通过某个机制能够异步传输数据,其他没有特殊要求。通常,人们希望下层协议能够规定该接口。TCP被设计用于广泛的互联网络环境中。本文通篇假设下层协议是网际协议[2]

1.5、操作

如上所述,TCP协议的主要用途是为进程对提供可靠的,安全的逻辑线路或连接服务。为在缺少可靠性的网络通讯系统之上提供这种服务,需提供如下方面的功能:

   基本的数据传输

   可靠性

   流控制

   多路复用

   连接

   优先级和安全机制

在下面的段落中将描述TCP在每个领域中的基本操作。

基本数据传输:

TCP通过将一定数量的字节打包到数据报中实现在网络系统里向不同方向传输连续字节流。通常,TCP终端根据自己的便利决定在什么时候阻塞和传递数据。

有时候用户需要确定他们提交给TCP的数据是否都已经传输完毕。为此定义了一个推送操作。为了保证提交给TCP的数据实际已传输完毕,发送者通过推送来向接收者表名数据已传输完毕。推送操作会引起TCP终端向接收方的位置快速地传送和转发数据。确切的推送点对于接收者可能是透明的,同样,推送功能不支持记录边界标记。

可靠性:

TCP必须能够将通过网络通讯系统传输的数据从受损,丢失,重复,或无序状态中恢复过来。这可以通过为每个传输的字节指定一个序列号,然后要求TCP接收方传递一个正的ACK(确认码)。如果ACK码在指定超时范围内没接收到,则重传该数据。对于接收者,这个序列号被用来正确排序可能无序到达的数据报分段并消除重复。数据损坏可以通过为每个传输的分段添加一个校验和,在接收端检验它并丢弃损坏的分段来处理。

只要TCP终端继续正常运行,网络系统没有完全分开,那就没有传输错误可以影响到数据的正确传输。TCP可以从网络通讯系统错误中恢复。

流量控制:

TCP为接收者提供某种方式来控制发送者发送数据的数量。这通过在每个ACK中返回窗口来指示超过最后成功收到的分段的可接受序列号的范围来完成。该窗口指示所允许对方在收到进一步许可前可以传输的字节数。

多路复用:

为了允许单一主机上多个进程同时使用TCP通信设备,TCP为每个主机提供一系列地址或端口。将来自网络通信层的网络和主机地址串联起来就组成了套接字。一个socket对唯一确定每个连接。也就是说,一个socket可能同时在多个连接中使用。

绑定到进程的端口由每个主机独自处理。然而,将一些常用的进程(如,”日志”或时间共享服务)绑定到对应的约定俗成的套接字上是很有用的。这些服务能够通过已经知道的地址来访问。建立和学习其它进程对应的地址和端口将涉及更动态的机制。

连接:

上述可靠性和流量控制机制需要TCP终端为每个数据流初始化并维护一些状态信息。这些信息的组合,包括套接字,序列号和窗口大小被称为一个连接。每个连接由标识两端的套接字接口对唯一指定。

当两个进程想通信,它们的TCP终端必须先建立一个连接(初始化每边的状态信息)。当它们的通信结束之后,连接也被终止或关闭以为其他用户释放资源。

因连接必须建立在不可靠的主机和不可靠的网络通信系统上,一个带有基于时钟序列号的握手机制被用来避免连接的错误初始化。

优先级和安全机制:

TCP用户可能会指明通信的安全机制和优先级。如果不需要这些特性就会使用默认值。

2、哲学

2.1、互联网络系统元素

互联网环境由通过网关互相连接的网络主机组成。这里假设这些网络可能是局域网(如,以太网)或大型网络(如,ARPA),但很多情况下都建立在分组交换技术上。进程是消息生产者和消费者的活跃代理。网络中不同层次的协议,网关和支持进程间通讯系统的主机在进程端口间提供基于逻辑连接的双向数据流。

术语数据包通常是指在网络和主机间传输的数据。我们通常不用关心在网络中交换的数据段格式。

主机是附加到一个网络中的计算机,从通讯网络的角度看,它们数据包的源和目的端。进程被看作主机中的活动元素(与将进程视为正在执行的程序这一非常通用的定义是一致的)。甚至终端和文件或其他I/O设备都被看作是通过进程来彼此通信的。因此,所有的通信都被看成是进程间通信。

由于进程需要区分自己和其他进程的通信数据流,我们假设每个进程都有一些端口,进程可以通过这些端口和其他进程的端口通信。

2.2、操作模型

进程通过调用TCP实现并传递相应的缓存区数据作为参数来实现数据传输。TCP将缓冲池中的数据打包成分段,并调用网络其他模块将每个分段传输到目的TCP。接收方TCP将数据从分段中检出到用户缓冲区并通知接收方用户。TCP终端将控制信息放到分段中,这些信息常用来确保可靠的,有序的数据传输。

网络通信模型是指与每个为本地网络提供接口的TCP相关联的网络协议模块。这个网络模块将TCP分段打包到网络数据报中并将这些数据报路由到目的网络模块或中间网关。为了将数据报通过本地网络传输,通常将它嵌入到本地网络包中。

包交换可能执行进一步的打包,分片或其他操作来实现将本地包递交到目的网络模块。

在网络中的网关处,网络数据报将从本地包解开并检查以判断该数据报通过哪个网络来再次传输。该数据报然后被重新包裹到本地包中以适应下个网络并路由到下个网关,或到达最终目标端。

允许网关将数据报分割为更小的数据报分片,如果在传输到下个网络中需要的话。为了达到这,网关生产一系列网络数据报:每个携带一个分片。在后序网关中,分片可以被进一步分解为更小的分片。数据报分段格式被设计,以便目标端网络模块能够将分片重组为网络数据报。

目标端网络模块从数据报中展开分段(在重组为数据报后,若有必要)并将分段传递给目标端TCP

这个简单的操作模型掩盖了很多细节。一个重要的特征是服务类型。这为路由或网络模块提供信息,以指导它选择将在传到下个网络中使用的服务参数。包含在服务信息中的类型信息是数据报的优先级。数据报还可以携带安全信息以允许于多级安全环境中的主机和网关为安全考虑而适当地隔离数据报。

2.3、主机环境

TCP被看做是操作系统的一个模块。用户使用TCP就跟使用文件系统差不多。TCP可以调用其他操作系统功能,比如,管理数据结构。连接网络的实际接口是被设备驱动模块控制着。TCP不直接调用设备驱动,而是调用网络数据包协议,该协议会转而调用设备驱动。

TCP机制不排除在前端处理器中的TCP实现。然而,在这类实现中,主机到前端的协议必须提供某种功能以支持在本文中描述的TCP用户类型接口。

2.4、接口

TCP/用户接口提供用户在TCP上产生的调用,如打开或关闭连接,发送或接收连接,获取连接状态等。这些调用和用户程序在操作系统上的其他调用类似,比如,打开,读取和关闭文件的调用。

TCP/用户接口提供调用来发送和接收在网络系统中的任何地方的主机中可以被寻址到的TCP模块的数据报。这些调用需要传递地址,服务类型,优先级,安全性和其他控制信息等参数。

2.5、和其他协议的联系

 下图描绘TCP在协议体系里的位置:

                                

  +--------------------------+ +------------------------+ +----------------+     +------+                    

  |远程终端协议(Telnet) | |文件传输协议(FTP) | |  语音Voice |  ...... |     |   应用程序层

  +---------------------------+ +------------------------+ +---------------+     +------+                    

             |             |                  |                 |                    

      +----------------------------------+   +-------------------------+        +------+                    

       传输控制协议TCP       |    | 实时传输协议RTP |  ....... |     |    主机层     

      +-----------------------------------+   +-------------------------+     +-------+                    

               |                              |                 |                        

            +---------------------------------------------------------------------------+                    

            |         网际协议Internet Protocol & ICMP       |      网关层                   

            +---------------------------------------------------------------------------+                    

                                       |                                     

                 +--------------------------------------------------------------+                      

                 |     本地网络协议Local Network Protocol    |         网络层

                 +--------------------------------------------------------------+                      

协议关系

                              

                                    图2

期望TCP将能够更有效的支持上层协议。它应该能够容易地连接上层协议,如ARPANET Telnet 或AUTODIN II THP 到TCP

2.6、可靠通信

TCP连接上传输的数据流被可靠且有序地递交到目标端。通过使用传输序列号和确认码来使传输可靠。概念上,数据的每个字节被分配一个序列号。分段中数据首字节的序列号和该分段一起传输并被称作分段序列号。分段还携带一个确认码,该码是从相反方向传输的下个期望数据字节的序列号。当TCP传输一个包含数据的分段时,它会把分段的拷贝放到重传队列中并启动一个计时器;当收到该数据的确认码,分段便从队列中删除。如果在计时器超时前没收到确认码,则分段会被重传。

TCP确认码不保证数据已传送到最终用户,仅仅是TCP接收端有责任这样做。

为管理TCP终端传输的数据流,流量控制机制被使用。接收方TCP向发送方TCP报告一个窗口。该窗口规定接收方TCP当前准备接收的字节数,从确认号开始。

2.7、连接建立和清理

为识别TCP可能处理的独立数据流,TCP提供相应的端口标识符。由于端口标识符是每个TCP都可以独立选择的,所以它们可能不唯一。为了为每个TCP提供唯一的地址,我们将标识TCP的网络地址和端口标识符组合来创建一个套接字,这个套接字在整个网络连接中将是唯一的。

连接将由套接字对最终指定。本地套接字可能参与到不同外界套接字的很多连接中。一个连接能被用来在双向传输数据,也就是说,它是”全双功”。

备注:其他章节暂未翻译,可参考其他RFC793中文版.

原创粉丝点击