Appearance
题目
主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了两个连续的 TCP 段,分别包含 300 字节和 500 字节的有效载荷,第一个段的序列号为 200,主机乙正确接收到两个段后,发送给主机甲的确认序列号是( )。
错因
A
把"段 1 的下一个字节序号"算成 ack——只确认到段 1 末尾 ,漏算段 2。但题面明确说"乙正确接收到两个段后",应累计确认到段 2 末尾。错的根源:忽略段 2 已被收到,只算段 1。
B
可能算成 或类似拼凑,完全没用累计 = 起始序号 + 总长度 的公式。错的根源:算式凑不出有意义的值。
C
可能算成 (两段载荷之和)——但这是总字节数,不是确认序号。确认序号 = 第一个段的序号 + 总字节数 = 200 + 800 = 1000。错的根源:把"字节数"误当成"确认号"。
总解析
第一步:列出每段的序号范围
| 段 | 序号 | 载荷字节数 | 序号范围 |
|---|---|---|---|
| 1 | 200 | 300 | [200, 499] |
| 2 | 500 | 500 | [500, 999] |
段 2 的序号 = 段 1 起始序号 + 段 1 长度 = 200 + 300 = 500。段 2 覆盖 [500, 999]。
第二步:算确认序号
TCP 确认序号 = "已连续收到的最大字节序号 + 1" = "下一个期待的字节"。
乙正确收到两段,连续覆盖 [200, 999]:
或等价:
第三步:核对
| 选项 | 含义 | 错处 |
|---|---|---|
| A | 500 | 只确认段 1(漏段 2) |
| B | 700 | 凑数 |
| C | 800 | 总字节数(不是确认号) |
| D | 1000 | 正确(200 + 300 + 500) |
最终答案是 D(1000)。
编者注(生僻术语):TCP 确认号语义"下一个期待的字节序号"——这是 TCP 累计确认机制的核心:
注意"连续"——如果中间有缺失,累计确认只能停在缺失处之前(参考 cn-2011-40 题)。本题"两段都正确收到、连续无间断",所以累计确认能直接走到段 2 末尾。