2. Introduction (简介)
RFC 793 包含了对 TCP 设计目标的讨论, 并提供了其操作的示例, 包括连接建立 (Connection Establishment), 连接终止 (Connection Termination) 和数据包重传 (Packet Retransmission) 以修复丢失的示例.
本文档描述了现代 TCP 实现中预期的基本功能, 并取代了 RFC 793 中的协议规范. 它不复制或尝试更新 RFC 793 第 1 节和第 2 节中的介绍和哲学内容. 其他文档被引用以提供操作理论, 基本原理和设计决策的详细讨论的解释. 本文档仅关注协议的规范性行为.
"TCP 路线图" (TCP Roadmap) 提供了更广泛的 RFC 指南, 这些 RFC 定义了 TCP 并描述了各种重要算法. TCP 路线图包含关于强烈鼓励的增强功能的章节, 这些增强功能可以改进性能和 TCP 的其他方面, 超出本文档中指定的基本操作. 例如, 实现拥塞控制 (Congestion Control) 是 TCP 要求, 但它本身是一个复杂的主题, 本文档中没有详细描述, 因为有许多不影响基本互操作性的选项和可能性. 类似地, 当今大多数 TCP 实现包括高性能扩展, 但这些不是严格要求的, 也不在本文档中讨论. TCP 的多路径考虑也在单独的文档中指定.
与 RFC 793 的变更列表包含在第 5 节中.
2.1. Requirements Language (要求语言)
本文档中的关键词 "MUST" (必须), "MUST NOT" (禁止), "REQUIRED" (必需), "SHALL" (应), "SHALL NOT" (不应), "SHOULD" (应该), "SHOULD NOT" (不应该), "RECOMMENDED" (推荐), "NOT RECOMMENDED" (不推荐), "MAY" (可以) 和 "OPTIONAL" (可选) 应按照 BCP 14 [RFC2119] [RFC8174] 中的描述进行解释, 当且仅当它们以全大写形式出现时, 如此处所示.
文档中每次使用 RFC 2119 关键词都单独标记和引用在附录 B 中, 该附录总结了实现要求.
使用 "MUST" 的句子标记为 "MUST-X", 其中 X 是数字标识符, 使得在从附录 B 引用时可以轻松定位要求.
类似地, 使用 "SHOULD" 的句子标记为 "SHLD-X", "MAY" 标记为 "MAY-X", "RECOMMENDED" 标记为 "REC-X".
就此标记而言, "SHOULD NOT" 和 "MUST NOT" 的标记与 "SHOULD" 和 "MUST" 实例相同.
2.2. Key TCP Concepts (TCP 关键概念)
TCP 向应用程序提供可靠的 (Reliable), 有序的 (In-Order), 字节流服务 (Byte-Stream Service).
应用程序字节流通过 TCP 段 (TCP Segments) 在网络上传输, 每个 TCP 段作为互联网协议 (Internet Protocol, IP) 数据报发送.
TCP 可靠性包括检测数据包丢失 (通过序列号, Sequence Numbers) 和错误 (通过每段校验和, Per-Segment Checksums), 以及通过重传 (Retransmission) 进行纠正.
TCP 支持数据的单播传递 (Unicast Delivery). 有一些任播 (Anycast) 应用可以成功使用 TCP 而无需修改, 尽管由于较低层转发行为的变化存在一些不稳定的风险.
TCP 是面向连接的 (Connection Oriented), 尽管它本身不包含活性检测能力 (Liveness Detection Capability).
TCP 连接上支持双向数据流 (Bidirectionally), 尽管应用程序可以自由选择仅单向发送数据.
TCP 使用端口号 (Port Numbers) 来识别应用服务 (Application Services) 并在主机之间复用不同的流 (Multiplex Distinct Flows).
与其他传输协议相比, TCP 功能的更详细描述可以在 RFC 8095 第 3.1 节中找到. 有关开发 TCP 的动机及其在互联网协议栈中的作用的进一步描述可以在 RFC 793 第 2 节和 TCP 规范的早期版本中找到.