2. 引言
RFC 793 包含对 TCP 设计目标的讨论, 并提供了 TCP 运行示例, 包括连接建立, 连接终止以及通过数据包重传来修复丢失的示例.
本文档描述现代 TCP 实现预期具备的基本功能, 并取代 RFC 793 中的协议规范. 它不复制也不试图更新 RFC 793 第 1 节和第 2 节中的引言和理念内容. 本文档引用其他文档来提供运行理论, 理由以及设计决策的详细讨论. 本文档只聚焦于协议的规范性行为.
"TCP Roadmap" [49] 为定义 TCP 并描述各种重要算法的 RFC 提供了更广泛的指南. TCP Roadmap 包含若干章节, 介绍在本文档规定的基本运行之外, 强烈鼓励采用的增强功能, 这些功能可改进 TCP 的性能和其他方面. 例如, 实现拥塞控制 (例如, [8]) 是 TCP 的一项要求, 但它本身是一个复杂主题, 且本文档不作详细描述, 因为存在许多不会影响基本互操作性的选项和可能性. 类似地, 今天大多数 TCP 实现都包含 [47] 中的高性能扩展, 但这些扩展在本文档中并非严格要求, 也不作讨论. TCP 的多路径考虑事项也在 [59] 中单独规定.
相对于 RFC 793 的变更列表包含在第 5 节中.
2.1. 要求语言
当且仅当本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" 和 "OPTIONAL" 以此处所示的全大写形式出现时, 它们应按 BCP 14 [3] [12] 中的描述进行解释.
本文档中每次使用 RFC 2119 关键词的位置都单独加有标签, 并在附录 B 中被引用, 附录 B 汇总了实现要求.
使用 "MUST" 的句子被标记为 "MUST-X", 其中 X 是一个数字标识符, 使该要求在从附录 B 引用时易于定位.
类似地, 使用 "SHOULD" 的句子标记为 "SHLD-X", 使用 "MAY" 的句子标记为 "MAY-X", 使用 "RECOMMENDED" 的句子标记为 "REC-X".
出于这种标记目的, "SHOULD NOT" 和 "MUST NOT" 与 "SHOULD" 和 "MUST" 实例使用相同方式标记.
2.2. 关键 TCP 概念
TCP 为应用程序提供可靠的, 按序的字节流服务.
应用程序字节流通过 TCP 段在网络上传送, 每个 TCP 段都作为互联网协议 (Internet Protocol, IP) 数据报发送.
TCP 可靠性包括检测数据包丢失 (通过序列号) 和错误 (通过逐段校验和), 以及通过重传进行纠正.
TCP 支持数据的单播交付. 有些任播应用程序可以在不修改 TCP 的情况下成功使用 TCP, 尽管由于较低层转发行为的变化, 这存在一定的不稳定风险 [46].
TCP 是面向连接的, 但它本身不包含活性检测能力.
TCP 连接支持双向数据流, 但应用程序也可以自行选择只单向发送数据.
TCP 使用端口号标识应用服务, 并在主机之间复用不同的流.
关于 TCP 特性相对于其他传输协议的更详细描述, 可参见 [52] 的第 3.1 节. 关于开发 TCP 的动机及其在互联网协议栈中的作用, 可参见 [16] 的第 2 节以及 TCP 规范的早期版本.