Appearance
附录 B:TCP 需求汇总
本节内容改编自 RFC 1122。
以下列表未包含 PLPMTUD 相关需求,但正文推荐实现 PLPMTUD。
展开完整 TCP 需求矩阵
表中 X 表示该行需求所属的级别;ReqID 与正文中出现的 MUST-X、SHLD-X、MAY-X、REC-X 标签一一对应。ALP 表示 Application-Layer Program(应用层程序)。
| 特性 | ReqID | MUST | SHOULD | MAY | SHOULD NOT | MUST NOT |
|---|---|---|---|---|---|---|
PUSH 标志 | ||||||
| 聚合或排队未推送的数据 | MAY-16 | X | ||||
发送方合并连续的 PSH 位 | SHLD-27 | X | ||||
SEND 调用可以指定 PUSH | MAY-15 | X | ||||
| 无法指定时:发送方无限期缓存数据 | MUST-60 | X | ||||
无法指定时:在最后一个报文段中设置 PSH | MUST-61 | X | ||||
通知接收方 ALP 已收到 PSH | MAY-17 | X | ||||
| 尽可能发送最大长度的报文段 | SHLD-28 | X | ||||
| 窗口 | ||||||
| 将窗口作为无符号数处理 | MUST-1 | X | ||||
| 将窗口作为 32 位数处理 | REC-1 | X | ||||
| 从右侧缩小窗口 | SHLD-14 | X | ||||
| 在窗口缩小时发送新数据 | SHLD-15 | X | ||||
| 重传窗口内未确认的旧数据 | SHLD-16 | X | ||||
| 不因数据落在右边界之外而使连接超时 | SHLD-17 | X | ||||
| 稳健处理窗口缩小 | MUST-34 | X | ||||
| 允许接收方窗口无限期保持关闭 | MAY-8 | X | ||||
| 采用标准探测逻辑 | MUST-35 | X | ||||
| 发送方探测零窗口 | MUST-36 | X | ||||
| 首次探测在 RTO 之后发送 | SHLD-29 | X | ||||
| 探测间隔采用指数退避 | SHLD-30 | X | ||||
| 允许窗口无限期保持为零 | MUST-37 | X | ||||
重传 SND.UNA+SND.WND 之外的旧数据 | MAY-7 | X | ||||
零窗口时仍处理 RST 和 URG | MUST-66 | X | ||||
| 紧急数据 | ||||||
| 支持紧急指针 | MUST-30 | X | ||||
| 紧急指针指向第一个非紧急八位组 | MUST-62 | X | ||||
| 支持任意长度的紧急数据序列 | MUST-31 | X | ||||
| 异步通知 ALP 有紧急数据 | MUST-32 | X | ||||
| ALP 可以获知是否有紧急数据排队及其数量 | MUST-33 | X | ||||
| ALP 使用紧急机制 | SHLD-13 | X | ||||
| TCP 选项 | ||||||
| 支持必需选项集 | MUST-4 | X | ||||
| 在任意报文段中接收 TCP 选项 | MUST-5 | X | ||||
| 忽略不支持的选项 | MUST-6 | X | ||||
| 除 EOL/NOP 外的所有选项均带长度字段 | MUST-68 | X | ||||
| 能够处理非法选项长度 | MUST-7 | X | ||||
| 无论是否按字边界对齐都能处理选项 | MUST-64 | X | ||||
| 实现 MSS 选项的发送和接收 | MUST-14 | X | ||||
| IPv4 下 MSS 非 536 时发送 MSS 选项 | SHLD-5 | X | ||||
| IPv6 下 MSS 非 1220 时发送 MSS 选项 | SHLD-5 | X | ||||
| 始终发送 MSS 选项 | MAY-3 | X | ||||
| IPv4 默认发送 MSS 为 536 | MUST-15 | X | ||||
| IPv6 默认发送 MSS 为 1220 | MUST-15 | X | ||||
| 计算有效发送报文段大小 | MUST-16 | X | ||||
| MSS 考虑 MTU 的变化 | SHLD-6 | X | ||||
非 SYN 报文段中不发送 MSS | MUST-65 | X | ||||
根据 MMS_R 确定 MSS 值 | MUST-67 | X | ||||
| 用零填充首部 | MUST-69 | X | ||||
| TCP 校验和 | ||||||
| 发送方计算校验和 | MUST-2 | X | ||||
| 接收方检查校验和 | MUST-3 | X | ||||
| ISN 选择 | ||||||
| ISN 生成器包含时钟驱动分量 | MUST-8 | X | ||||
| 用 PRF 分量保护 ISN 生成器 | SHLD-1 | X | ||||
| PRF 可从主机外部计算 | MUST-9 | X | ||||
| 打开连接 | ||||||
| 支持同时打开尝试 | MUST-10 | X | ||||
在 SYN-RECEIVED 状态下记住前一状态 | MUST-11 | X | ||||
被动 OPEN 调用影响其他连接 | MUST-41 | X | ||||
允许同一端口同时存在多个 LISTEN | MUST-42 | X | ||||
必要时在发送 SYN 前向 IP 层请求源地址 | MUST-44 | X | ||||
| 其他情况下使用连接的本地地址 | MUST-45 | X | ||||
向广播/组播 IP 地址发起 OPEN | MUST-46 | X | ||||
| 静默丢弃发往广播/组播地址的报文段 | MUST-57 | X | ||||
| 关闭连接 | ||||||
RST 可以包含数据 | SHLD-2 | X | ||||
| 通知应用程序连接已中止 | MUST-12 | X | ||||
| 支持半双工关闭连接 | MAY-1 | X | ||||
发送 RST 以表明数据丢失 | SHLD-3 | X | ||||
在 TIME-WAIT 状态保持 2 个 MSL 秒 | MUST-13 | X | ||||
接受来自 TIME-WAIT 的 SYN | MAY-2 | X | ||||
利用时间戳缩短 TIME-WAIT | SHLD-4 | X | ||||
| 重传 | ||||||
| 实现指数退避、慢启动和拥塞避免 | MUST-19 | X | ||||
| 重传时使用相同的 IP Identification | MAY-4 | X | ||||
| 使用 Karn 算法 | MUST-18 | X | ||||
| 生成 ACK | ||||||
| 尽可能聚合 ACK | MUST-58 | X | ||||
| 将乱序报文段排队 | SHLD-31 | X | ||||
| 发送 ACK 前先处理所有已排队的报文段 | MUST-59 | X | ||||
| 为乱序报文段发送 ACK | MAY-13 | X | ||||
| 延迟 ACK | SHLD-18 | X | ||||
| 延迟小于 0.5 秒 | MUST-40 | X | ||||
| 至少每两个全长报文段或 2*RMSS 个八位组确认一次 | SHLD-19 | X | ||||
| 接收方 SWS 避免算法 | MUST-39 | X | ||||
| 发送数据 | ||||||
| TTL 可配置 | MUST-49 | X | ||||
| 发送方 SWS 避免算法 | MUST-38 | X | ||||
| Nagle 算法 | SHLD-7 | X | ||||
| 应用程序可以禁用 Nagle 算法 | MUST-17 | X | ||||
| 连接失败 | ||||||
R1 次重传时向 IP 层给出负面建议 | MUST-20 | X | ||||
R2 次重传时关闭连接 | MUST-20 | X | ||||
ALP 可以设置 R2 | MUST-21 | X | ||||
重传次数满足 R1 <= retxs < R2 时通知 ALP | SHLD-9 | X | ||||
R1 的建议值 | SHLD-10 | X | ||||
R2 的建议值 | SHLD-11 | X | ||||
SYN 使用相同机制 | MUST-22 | X | ||||
SYN 的 R2 至少为 3 分钟 | MUST-23 | X | ||||
| 发送保活分组 | ||||||
| 发送保活分组 | MAY-5 | X | ||||
| 应用程序可以请求保活 | MUST-24 | X | ||||
| 默认关闭 | MUST-25 | X | ||||
| 仅在空闲达到设定间隔后发送 | MUST-26 | X | ||||
| 间隔可配置 | MUST-27 | X | ||||
| 默认间隔至少 2 小时 | MUST-28 | X | ||||
| 能容忍 ACK 丢失 | MUST-29 | X | ||||
| 发送不携带数据的保活分组 | SHLD-12 | X | ||||
| 可配置为发送垃圾数据八位组 | MAY-6 | X | ||||
| IP 选项 | ||||||
| 忽略 TCP 无法识别的选项 | MUST-50 | X | ||||
| 支持时间戳 | MAY-10 | X | ||||
| 支持 Record Route | MAY-11 | X | ||||
| 源路由 | ||||||
| ALP 可以指定源路由 | MUST-51 | X | ||||
| 覆盖数据报中已有的源路由 | MUST-52 | X | ||||
| 根据源路由构建返回路由 | MUST-53 | X | ||||
| 后收到的源路由覆盖先前的值 | SHLD-24 | X | ||||
| 从 IP 接收 ICMP 消息 | ||||||
| 接收来自 IP 层的 ICMP 消息 | MUST-54 | X | ||||
| 收到 Destination Unreachable(0、1、5)时通知 ALP | SHLD-25 | X | ||||
| 收到 Destination Unreachable(0、1、5)时中止连接 | MUST-56 | X | ||||
| 收到 Destination Unreachable(2–4)时中止连接 | SHLD-26 | X | ||||
| 静默丢弃 Source Quench 消息 | MUST-55 | X | ||||
| 收到 Time Exceeded 时中止连接 | MUST-56 | X | ||||
| 收到 Parameter Problem 时中止连接 | MUST-56 | X | ||||
| 地址验证 | ||||||
拒绝发往无效 IP 地址的 OPEN | MUST-46 | X | ||||
拒绝来自无效 IP 地址的 SYN | MUST-63 | X | ||||
静默丢弃发往广播/组播地址的 SYN | MUST-57 | X | ||||
| TCP/ALP 接口服务 | ||||||
| 提供错误报告机制 | MUST-47 | X | ||||
| ALP 可以禁用错误报告例程 | SHLD-20 | X | ||||
| ALP 可以指定发送时的 Diffserv 字段 | MUST-48 | X | ||||
| 不加修改地传递给 IP 层 | SHLD-22 | X | ||||
| ALP 可以在连接期间改变 Diffserv 字段 | SHLD-21 | X | ||||
| ALP 在连接期间通常改变 Diffserv 字段 | SHLD-23 | X | ||||
| 将收到的 Diffserv 字段传递给 ALP | MAY-9 | X | ||||
FLUSH 调用 | MAY-14 | X | ||||
OPEN 提供可选的本地 IP 地址参数 | MUST-43 | X | ||||
| RFC 5961 支持 | ||||||
| 实现数据注入保护 | MAY-12 | X | ||||
| 显式拥塞通知 | ||||||
| 支持 ECN | SHLD-8 | X | ||||
| 替代拥塞控制 | ||||||
| 实现符合规范的替代算法 | MAY-18 | X |
表 8:TCP 需求汇总。
脚注:ALP 表示 Application-Layer Program(应用层程序)。