1. 简介 (Introduction)
传输控制协议 (Transmission Control Protocol, TCP) 旨在用作分组交换计算机通信网络中主机之间, 以及此类网络互联系统中的高可靠性主机到主机协议.
本文档描述了传输控制协议所执行的功能, 实现它的程序, 以及它与需要其服务的程序或用户的接口.
1.1. 动机 (Motivation)
计算机通信系统在军事、政府和民用环境中正发挥着越来越重要的作用. 本文档主要关注军事计算机通信需求, 尤其是在通信不可靠情况下的健壮性以及在拥塞情况下的可用性, 但这些问题在民用和政府领域同样存在.
随着战略和战术计算机通信网络的开发与部署, 提供互联手段以及支持广泛应用的标准进程间通信协议至关重要. 为预见此类标准的需求, 国防部副部长 (研究与工程) 已宣布本文所述的传输控制协议 (TCP) 为国防部范围内进程间通信协议标准化的基础.
TCP 的关键特性 (Key Features of TCP)
TCP 是一种面向连接的、端到端的可靠协议, 设计用于融入支持多网络应用的分层协议体系. TCP 为连接到不同但互联的计算机通信网络的主机计算机中的进程对之间提供可靠的进程间通信.
TCP 对 TCP 层以下通信协议的可靠性假设极少. TCP 假定它可以从低层协议获得简单的、可能不可靠的数据报服务. 原则上, TCP 应能在从硬连线连接到分组交换或电路交换网络的广泛通信系统之上运行.
理论基础 (Theoretical Foundation)
TCP 基于 Cerf 和 Kahn 在 [1] 中首次描述的概念. TCP 融入了分层协议架构, 位于基本互联网协议 [2] 之上, 该协议为 TCP 提供了一种在互联网数据报"信封"中发送和接收可变长度信息段的方式. 互联网数据报提供了在不同网络中寻址源和目标 TCP 的手段. 互联网协议还处理通过多个网络和互联网关传输和交付所需的 TCP 段的任何分片或重组. 互联网协议还携带 TCP 段的优先级、安全分类和分区信息, 因此这些信息可以跨多个网络端到端传递.
协议分层 (Protocol Layering)
+---------------------+
| higher-level | ← 应用层协议 (HTTP, FTP, SMTP 等)
+---------------------+
| TCP | ← 传输层 (本协议)
+---------------------+
| Internet Protocol | ← 网络层 (RFC 791)
+---------------------+
|communication network| ← 链路/物理层
+---------------------+
本文档大部分内容是在 TCP 实现与主机计算机中的高层协议共存的背景下编写的. 某些计算机系统将通过前端计算机连接到网络, 前端计算机包含 TCP 和互联网协议层以及特定于网络的软件. TCP 规范描述了与高层协议的接口, 只要实现了合适的主机到前端协议, 该接口对于前端情况也是可实现的.
1.2. 范围 (Scope)
TCP 旨在在多网络环境中提供可靠的进程到进程通信服务. TCP 旨在成为多个网络中通用的主机到主机协议.
1.3. 关于本文档 (About This Document)
本文档代表了对任何 TCP 实现所需行为的规范, 包括其与高层协议的交互以及与其他 TCP 的交互. 本节其余部分提供了协议接口和操作的简要概述.
文档结构 (Document Structure)
- 第 2 节: 总结 TCP 设计的哲学基础
- 第 3 节: 详细描述:
- 各种事件发生时 (新段到达、用户调用、错误等) TCP 所需的操作
- TCP 段格式的详细信息
1.4. 接口 (Interfaces)
TCP 一侧与用户或应用进程接口, 另一侧与低层协议 (如互联网协议) 接口.
TCP/用户接口 (TCP/User Interface)
应用进程与 TCP 之间的接口有合理详细的说明. 该接口由一组调用组成, 类似于操作系统为应用进程提供的用于操作文件的调用.
主要接口调用 (Main Interface Calls):
- OPEN: 打开连接
- CLOSE: 关闭连接
- SEND: 在已建立的连接上发送数据
- RECEIVE: 在已建立的连接上接收数据
TCP 也可以与应用程序异步通信. 尽管允许 TCP 实现者在设计适合特定操作系统环境的接口方面有相当大的自由度, 但对于任何有效的实现, TCP/用户接口都需要最低限度的功能.
TCP/低层协议接口 (TCP/Lower Level Protocol Interface)
TCP 与低层协议之间的接口基本上未作规定, 只是假定存在一种机制, 使两个层次可以异步地相互传递信息. 通常, 低层协议会指定此接口.
TCP 设计用于在互联网络的非常通用的环境中工作. 本文档中假定的低层协议是互联网协议 [2].
1.5. 操作 (Operation)
如上所述, TCP 的主要目的是在进程对之间提供可靠的、可保护的逻辑电路或连接服务. 要在不太可靠的互联网通信系统之上提供此服务, 需要以下方面的功能:
核心功能概述 (Core Functions Overview)
1. 基本数据传输 (Basic Data Transfer)
TCP 能够通过将一定数量的字节打包成段以通过互联网系统传输, 在其用户之间的每个方向上传输连续的字节流. 通常, TCP 会根据自身方便决定何时阻塞和转发数据.
推送功能 (Push Function): 有时用户需要确保他们提交给 TCP 的所有数据都已被传输. 为此定义了推送功能. 为确保提交给 TCP 的数据实际上被传输, 发送用户指示应将其推送到接收用户. 推送使 TCP 立即将数据转发并交付到该点的接收方. 接收用户可能看不到确切的推送点, 推送功能不提供记录边界标记.
2. 可靠性 (Reliability)
TCP 必须从互联网通信系统损坏、丢失、重复或乱序交付的数据中恢复. 这通过为每个传输的字节分配序列号, 并要求接收 TCP 发出肯定确认 (ACK) 来实现. 如果在超时间隔内未收到 ACK, 则重新传输数据. 在接收方, 序列号用于正确排序可能乱序接收的段, 并消除重复. 通过向每个传输的段添加校验和, 在接收方检查并丢弃损坏的段来处理损坏.
可靠性机制 (Reliability Mechanisms):
- 超时与重传 (Timeout and Retransmission): 如果在超时间隔内未收到 ACK, 则重新传输数据
- 排序 (Sequencing): 在接收方, 序列号用于正确排序乱序接收的段
- 重复消除 (Duplicate Elimination): 消除重复段
- 校验和 (Checksum): 通过向每个传输段添加校验和, 在接收方检查并丢弃损坏的段
只要 TCP 继续正常运行且互联网系统不完全分区, 任何传输错误都不会影响数据的正确交付. TCP 从互联网通信系统错误中恢复.
3. 流量控制 (Flow Control)
TCP 为接收方提供了一种控制发送方发送数据量的手段. 这通过在每个 ACK 中返回一个"窗口"来实现, 该窗口指示最后成功接收的段之外可接受序列号的范围. 窗口指示发送方在收到进一步许可之前可以传输的允许字节数.
滑动窗口 (Sliding Window): 窗口指示发送方在收到进一步许可之前可以传输的允许字节数.
4. 多路复用 (Multiplexing)
为了允许单个主机内的许多进程同时使用 TCP 通信设施, TCP 在每个主机内提供一组地址或端口. 与来自互联网通信层的网络和主机地址连接, 形成一个套接字 (socket). 一对套接字唯一标识每个连接. 也就是说, 一个套接字可以同时用于多个连接.
端口绑定 (Port Binding):
- 端口与进程的绑定由每个主机独立处理
- 常用进程 (例如"记录器"或分时服务) 附加到公开已知的固定套接字
- 这些服务可以通过已知地址访问
- 建立和了解其他进程的端口地址可能涉及更动态的机制
5. 连接 (Connections)
上述可靠性和流量控制机制要求 TCP 为每个数据流初始化和维护某些状态信息. 这些信息的组合, 包括套接字、序列号和窗口大小, 称为连接. 每个连接由标识其两端的一对套接字唯一指定.
连接生命周期 (Connection Lifecycle):
- 建立 (Establishment): 当两个进程希望通信时, 它们的 TCP 必须首先建立连接 (在每一侧初始化状态信息)
- 使用 (Usage): 数据传输阶段
- 终止 (Termination): 通信完成后, 连接被终止或关闭以释放资源供其他用途使用
三次握手 (Three-Way Handshake): 由于连接必须在不可靠的主机之间以及通过不可靠的互联网通信系统建立, 因此使用基于时钟的序列号的握手机制来避免错误的连接初始化.
6. 优先级与安全 (Precedence and Security)
TCP 的用户可以指示其通信的安全性和优先级. 当不需要这些功能时, 提供了使用默认值的规定.
实现注意事项 (Implementation Considerations)
最低功能要求 (Minimum Functionality Requirements)
任何有效的 TCP 实现必须提供:
- 连接管理 (建立、维护、终止)
- 可靠数据传输 (确认、重传、排序)
- 流量控制 (滑动窗口)
- 多路复用 (端口管理)
- 错误检测 (校验和)
灵活性 (Flexibility)
虽然本规范定义了 TCP 行为, 但实现者在以下方面有相当大的自由度:
- 内部数据结构设计
- 与操作系统的集成方式
- 性能优化策略
- 用户接口的具体形式
与其他协议的关系 (Relation to Other Protocols)
应用层 (Application Layer): HTTP, FTP, SMTP, Telnet 等
↓
传输层 (Transport Layer): TCP (本协议) | UDP (RFC 768)
↓
网络层 (Network Layer): IP (RFC 791)
↓
链路层 (Link Layer): Ethernet, Wi-Fi 等
TCP 位于协议栈的传输层, 向应用层提供可靠的端到端通信服务, 并依赖网络层的 IP 协议进行路由和寻址.
下一节: 2. 设计哲学 - 深入探讨 TCP 的设计哲学与理论基础