RFC793
RFC:793
传输控制协议
1981 年 9 月
传输控制协议
DARPA 互联网程序
协议规范
1981 年 9 月
委托方
(美国)国防部高级研究计划署(DARPA)
信息处理技术办公室
1400 Wilson Boulevard
Arlington, Virginia 22209
开发方
信息科学研究院
南加州大学
4676 Admiralty Way
Marina del Rey, California 90291
标准
1
RFC793
传输控制协议
目录
1981 年 9 月
序言 .........................................................................3
1 简介 .......................................................................4
1.1 动机 .................................................................4
1.2 范围 .................................................................5
1.3 关于本文 .............................................................5
1.4 接口 .................................................................5
1.5 操作 .................................................................6
2 哲理 .......................................................................7
2.1 因特网工程系统元素 ...................................................7
2.2 运行模型 .............................................................8
2.3 主机环境 .............................................................8
2.4 接口 .................................................................8
2.5 与其它协议的关系 .....................................................9
2.6 可靠通迅 .............................................................9
2.7 连接建立和清除 ......................................................10
2.8 数据通迅 ............................................................11
2.9 优先级和安全性 ......................................................11
2.10 精力充沛规则 .......................................................12
3 功能性规范 ................................................................12
3.1 头部格式 ............................................................12
3.2 术语 ................................................................16
3.3 序列号 ..............................................................19
3.4 建立连接 ............................................................23
3.5 关闭连接 ............................................................28
3.6 优先级和安全性 ......................................................30
3.7 数据通迅 ............................................................31
3.8 接口 ................................................................33
3.9 事件处理 ............................................................38
术语表 ......................................................................54
参考资料 ....................................................................59
标准
2
RFC793
传输控制协议
序言
1981 年 9 月
本文描述 DoD 标准传输控制协议(TCP)。ARPA TCP 规范有 9 个早期版本,该版本基于
它们,且当前的正文有大量来自它们。有许多人对该工作作出贡献,包括概念方面和正文方
面。本版阐明几个细节并删除信尾缓存大小调整,并重新描述信函机制为上推功能。
Jon Postel
编辑
标准
3
RFC793
传输控制协议
1981 年 9 月
RFC:793
代替:RFC 761
IEN:129、124、112、81、55、44、40、27、21、5
传输控制协议
DARPA 互联网程序
协议规范
1 简介
传输控制协议(TCP)打算用作在分组交换计算机通迅网络和这类网络的内部连接系统
的主机间高可靠主机对主机协议。
本文描述传输控制协议将执行的功能,实现的程序,及提供给要求其服务的程序或用户
的接口。
1.1 动机
计算机通迅系统在军队、政府和民用环境中扮演越来越重要的角色。本文主要集中注意
在军队计算机通迅的要求,特别是存在通迅不可靠时的精力充沛及存在拥塞时的可用性,然
而许多这些问题同样可在民用和政府部门发现。
当战略和战术计算机通迅网络被开发和部署时,其本质是提供内部连接的手段并提供可
支持广泛应用的内部通迅协议。在预计到对这种标准的需求后,(美国)国防部研究和工程
署代理副秘书长声称这里描述的传输控制协议(TCP)是 DoD 范围进程间通迅协议标准的基
础。
TCP 是基于连接的,端到端可靠协议,设计来适合支持多网络应用的协议分层结构。TCP
在附加到截然不同但互相连接的计算机通迅网络的主机计算机内的进程对间提供可靠进程
间通迅。对 TCP 层其下的通迅协议的可靠性作出了非常少的假设。TCP 假设它可以从下层协
议获取简单的、潜在不可靠的数据报服务。原则上,TCP 应该能够运作通迅系统的广泛领域,
其范围从固定有线连接到分组交换或线路交换网络。
TCP 基于首先由 Cerf 和 Kahn 在[1]中所描述的概念。TCP 适合分层协议结构,正好在基
本网际协议[2]之上,它为 TCP 提供某种方式来发送和接收封装在互联网数据报“信封”内
的可变长信息分段。互联网数据报提供手段来寻址不同网络中的源和目标 TCP。网际协议还
处理要求完成通过多个网络和互联网关传输和递交的 TCP 分段的任何分片或重组。网际协议
还挟带优先级信息,安全性证书和 TCP 分段的区分,因此该信息可以跨多个网络进行端到端
标准
4
RFC793
传输控制协议
1981 年 9 月
通迅。
协议分层
+---------------------+
| 上层 |
+---------------------+
| TCP |
+---------------------+
| 网际协议 |
+---------------------+
| 通迅网络 |
+---------------------+
图 1
本文大部分是描写 TCP 实现的内容,它将与上层协议共同驻住在主机计算机中。某些计
算机系统将通过掩盖 TCP 和网际协议层及网络特定软件的前端计算机连接到网络。TCP 规范
描述对上层协议的接口,它似乎是可实现的,即使在前端情况下,只要实现一个适当的主机
与前端协议。
1.2 范围
TCP 打算提供在多网络环境中的可靠进程对进程通迅服务。TCP 打算成为多个网络中的
通用主机对主机协议。
1.3 关于本文
本文描述任何 TCP 实现所要求的行为规范,在其与上层协议的交互行为及在其与其它
TCP 终端的交互行为两个方面。本节的其它部分提供该协议的接口和操作的非常简短的见
解。第 2 节总结 TCP 设置的哲理基础。第 3 节提供当各种事件发生时(新分段到达、用户呼
叫、错误、等等)TCP 所要求的行为的详细描述和 TCP 分段的详细格式。
1.4 接口
TCP 接口一方面对用户或应用进程且另一方面对下层协议,如网际协议。
应用进程与 TCP 间的接口被合理仔细地描绘。该接口由呼叫集组成,便像操作系统为操
控文件而提供给应用进程的呼叫。例如,有打开和关闭连接及在已建立连接上发送和接收数
据的呼叫。还期望 TCP 可以与应用程序异步通迅。尽管允许 TCP 实现者有相当的自由度来设
计接口,使其适合特定操作系统环境,对 TCP/用户接口的任何有效实现要求提供最小功能
集。
TCP 和下层协议间的接口根本没有规定,除了假设存在某种机制使 2 层间相互可以异步
标准
5
RFC793
传输控制协议
1981 年 9 月
传递信息。通常,人们希望下层协议规定该接口。TCP 被设计来工作在非常普通的互连网络
环境中。本文通篇假设下层协议是网际协议[2]。
1.5 操作
如上所述,TCP 的主要用途是在进程对间提供可靠、安全的逻辑线路或连接服务。为在
缺少可靠性的互联网通迅系统上提供这种服务要求如下方面的机构:
基本数据传输
可靠性
流量控制
多路复用
连接
优先级和安全性
TCP 在每个这些领域中的基本操作在下面的段落中描述。
基本数据传输:
可靠性:
流量控制:
TCP 能够在其用户间的每个方向上传输连接的字节流,通过分组
一些数量的字节到通过互联网系统传输的分段中。通常,TCP 终
端判断在它们自己方便时成块和转发数据。
某些时候用户需要确保他们提交给 TCP 的全部数据都已经传完
了。因该用途,上推功能被定义。假设提交给 TCP 的数据实际上
按发送方用户指示的方式传输,它应该被上推给接收方用户。上
推引起 TCP 终端向接收方的位置迅速地传发和递交数据。确切的
上推点可能对接收方用户不可见且上推功能不支持记录边界标
记。
TCP 必须从互联网通迅系统的损坏、丢失、重复或无序的数据中
恢复过来。这可通过给每个要传输的字节分配序列号来达到,且
要求 TCP 接收方的肯定确认(ACK)。若 ACK 在超时间隔内没有收
到,则重传该数据。在接收方,该序列号用于正确排序可能无序
到达的分段并消除重复。损坏可通过给每个传输分段增加一个校
验和,在接收方检查它并丢弃已损坏分段来处理。
只要 TCP 终端继续正确运行且互联网系统不有完全分隔开,
则没有传输错误会影响正确递交数据。TCP 可从互联网通迅系统
错误中恢复。
TCP 为接收方提供手段来管理由发送方发送的大量数据。这可通
过在每个 ACK 中返回“窗口”来指示超过最后成功收到分段的可
接受序列号的范围来完成。该窗口指出所允许发送方在收到进一
步许可前可以传输的字节数。
标准
6
RFC793
传输控制协议
1981 年 9 月
多路复用:
连接:
为允许单个主机内的多个进程同时使用 TCP 通迅工具,TCP 在每
个主机中提供一组地址或端口集。与网络连接和来自互联网通迅
层的主机地址,这形成一个套接口。一个套接口对唯一标识每个
连接。即,一个套接口可以在多个连接中同时使用。
绑定到进程的端口由每个主机独自处理。然而,附加经常使用的
进程(如,“登录器”或时间共享服务)到对公众所知的固定套
接口将很有用。这时这些服务可以通过该已知地址被访问。建立
和学习其它进程的端口地址将引入更动态的机制。
上述可靠性和流量控制机制要求 TCP 终端为每个数据流初始化并
维护某些状态信息。这些信息的组合,包括套接口、序列号和窗
口大小被称为连接。每个连接由标识两端的套接口对唯一指定。
当 2 个进程希望通迅时,它们的 TCP 终端必须首先建立一个连接
(在每端初始化这些状态信息)。当它们的能迅完成时,该连接
终止或关闭,并释放这些资源给其它连接使用。
因连接必须在不可靠主机间通过不可靠互联网通迅系统被建立,
使用基于时钟的序列号握手机制来避免连接的不正确初始化。
优先级和安全性: TCP 用户可以指出它们通迅的安全性和优先级。规定当这些特性
不需要时使用缺省值。
2 哲理
2.1 互联网工程系统元素
互联网工程环境由连接到网络的主机组成,这些网络又返过来通过网关互联。这里假设
这些网络可以是本地网(如,以太网)或大型网络(如,ARPA 网),但在许多情况下是基于
分组交换技术。产生和消费消息的活动代理是进程。在这些网络中的各种层次协议、网关和
支持进程间通迅系统的主机在进程端口间提供在逻辑连接上的双向数据流。
术语分组在这里通常用于指主机与其网络间的某个事务的数据。在网络内交换的数据块
的格式通常将不我们所要关心的。
主机是附到网络上的计算机,且以通迅网络的观点,是分组的源端和目标端。进程被视
作主机计算机内的活动元素(与将进程视为正在执行的程序这一非常通用的定义是一致的)。
即使终端和文件或其它 I/O 设备都被视作可通过使用进程来相互间通迅。因此,全部通迅被
视作进程间通迅。
因某个进程可能需要从几个通迅流中区别其自己和其它进程(或多个进程),我们认为
每个进程可以有一些端口,通过它们与其它进程的端口通迅。
标准
7
RFC793
传输控制协议
1981 年 9 月
2.2 运行模型
进程通过调用 TCP 并传递数据缓冲区作为参数来传输数据。TCP 将数据从这些缓冲区中
打包为分段并调用互联网模块来传递每个分段到目标端 TCP。接收方 TCP 从分段中将数据放
入接收方用户的缓冲区中并提醒该接收方用户。TCP 终端包括控制这些分段中的信息,它们
被用于确保可靠有序的数据传输。
互联网通迅模型是使用某个互联网协议模块关联到每个 TCP 上以提供接口给本地网络。
该互联网模型打包 TCP 分段为互联网数据报并路由这些数据报到目标端互联网模块或中间
网关。为通过本地网络传输该数据报,它被嵌入到本地网络分组中。
这些分组交换可能进一步执行打包、分片或其它操作以完成递交该本地分组到目标端互
联网模块。
在网络间的网关处,互联网数据报是从其本地分组中“被展开的”且检查以判断该互联
网数据报应用通过哪个网络来再次传输。该互联网数据报这时“被包装”到适合下个网络的
本地分组中且路由到下个网关,或到达最终目标端。
允许某个网关将一个互联网数据报分解为多个更小的互联网分片,若这是通过下个网络
传输的要求。为这样做,该网关产生一组互联网数据报;每个挟带一个分片。分片在后序网
关中可以被进一步分解为更小的分片。设计互联网数据报分片格式以便目标端互联网模块可
以重组分片为互联网数据报。
目标端互联网模块从数据报中(在重组为数据报后,若有必要)展开分段并传递它给目
标端 TCP。
该简单运行模型通过许多细节来掩饰。一个非常重要的特性是服务类型。这提供信息给
网关(或互联网模块)以指导它选择将在传到下个网络中所使用的服务参数。所包括的服务
类型信息是数据报的优先级。数据报还可以挟带安全信息以允许运行于多级安全环境中的主
机和网关为安全考虑而适当地隔离数据报。
2.3 主机环境
TCP 被假设为是操作系统中的一个模块。用户访问 TCP 更像他们将访问文件系统。TCP
可以调用其它操作系统功能,例如,以管理数据结构。网络的实际接口被假设为由设备驱动
模块所控制。TCP 不直接调用网络设备驱动,但代之以调用互联网数据报协议模块,并可能
由它代替调用该设备驱动。
TCP 机制并不排除在前端处理器中的 TCP 实现。然而,在这类实现中,某个主机到前端
协议必须提供某种功能以支持在本文中描述的 TCP 用户类型接口。
2.4 接口
TCP/用户接口提供用户在 TCP 上所使用的调用来 OPEN 或 CLOSE 某个连接,SEND 或
标准
8