Appearance
题目
主机甲向主机乙发送一个(SYN=1, seq=11220)的 TCP 段,期望与主机乙建立 TCP 连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的 TCP 段可能是( )。
错因
A
SYN 和 ACK 都置 0——这意味着既不是 SYN 段也不是 ACK 段。但三次握手第二步必须是 SYN+ACK 段(SYN=1 表示乙也要建立连接、ACK=1 表示确认甲的 SYN)。错的根源:忘了第二步是 SYN 和 ACK 都要置 1。
B
SYN=1, ACK=1 的标志位对,但 ack=11220 错——应该是 11220+1 = 11221(SYN 占 1 序号,ACK 是"我下一个期待的序号")。错的根源:忘了 SYN 占 1 序号、应该 +1。
D
同 A 一样 SYN 和 ACK 都置 0,错。错的根源:误以为乙只发普通 ACK 段(不带 SYN),但三次握手第二步乙必须主动发 SYN(同时回 ACK)。
总解析
第一步:理清 TCP 三次握手
| 步骤 | 方向 | 标志位 | seq / ack |
|---|---|---|---|
| ① SYN | 甲 → 乙 | SYN=1, ACK=0 | seq = 甲的 ISN(11220) |
| ② SYN+ACK | 乙 → 甲 | SYN=1, ACK=1 | seq = 乙的 ISN(任选), ack = 11220+1 = 11221 |
| ③ ACK | 甲 → 乙 | SYN=0, ACK=1 | seq = 11220+1, ack = 乙的 ISN+1 |
第二步:分析第二步的字段
- SYN=1:乙也要建立连接(双向都要)
- ACK=1:乙确认收到甲的 SYN
- seq = 乙的 ISN:乙自己选的初始序号,可任意。题面给 11221 是命题方设计的"巧合"(数值与 ack 相同,便于辨识)
- ack = 甲的 SYN seq + 1 = 11220 + 1 = 11221:表示"我下一个期待你发的字节序号是 11221"
第三步:核对
| 选项 | SYN | ACK | seq | ack | 是否正确 |
|---|---|---|---|---|---|
| A | 0 | 0 | 11221 | 11221 | ❌ 标志位错 |
| B | 1 | 1 | 11220 | 11220 | ❌ ack 应是 11221 |
| C | 1 | 1 | 11221 | 11221 | ✅ |
| D | 0 | 0 | 11220 | 11220 | ❌ 标志位错 |
最终答案是 C(SYN=1, ACK=1, seq=11221, ack=11221)。
编者注(生僻术语):选项 C 中 seq 和 ack 都是 11221 是命题方刻意制造的巧合——
- 乙的 seq(11221):乙这端选的初始序号,可以是任意值,与甲的 ISN 无关;命题方挑了 11221 让数值好认
- 乙的 ack(11221):必须是 甲的 ISN + 1 = 11220 + 1 = 11221
两者数值相同纯属巧合。考题里如果换其他数字(如乙 ISN = 5000),seq 和 ack 就会不同(5000 vs 11221)。考研里看到 seq 和 ack 凑巧相等不要慌,按规则各自计算。