Skip to content

2020年 408 计算机网络 第 39 题

计算机网络2020年选择题2分

题目

若主机甲与主机乙建立 TCP 连接时发送的 SYN 段中的序号为 1000,在断开连接时,甲发送给乙的 FIN 段中的序号为 5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为:

错因

A

把 SYN 和 FIN 都不算占序号,把端点都包含进数据范围:,然后做调整凑到 4002。错的根源:SYN 和 FIN 各占 1 序号是 TCP 的硬规则,无论怎么算都不能两端都不扣。

B

把 SYN 不占序号、FIN 占 1 序号——即第一字节序号 = 1000、最后字节序号 = 5000,。错的根源:把 SYN 当成了"起始字节"。TCP 规定 SYN 段的 seq 字段是 ISN(初始序号),SYN 本身消耗 1 个序号,所以第一字节数据的序号是 ISN+1,不是 ISN。

D

按"FIN 占 2 序号"或"SYN + FIN 之间相差 N+2"等非标准约定凑出 3999——比正确的 4000 少 1。错的根源:把 FIN 也当成"占 2 序号"或者把整个序号空间多扣了一个。TCP 协议规范里 SYN 和 FIN 各占且仅占 1 序号,多扣或少扣都会差一位。

总解析

第一步:明确 TCP 序号约定

段类型是否占用序号空间该段 seq 字段含义
SYN✅ 占 1 序号ISN(初始序号)
数据段✅ 占 N 序号(N = 字节数)该段第一字节的序号
FIN✅ 占 1 序号上一个数据字节序号 + 1
ACK(不带数据)❌ 不占序号下一个待发字节序号(用于通知对端"我下个会发什么")

第二步:列时序方程

设甲发送的应用数据共 字节。

阶段序号占用
SYN1000
数据1001 ~
FIN

题面 FIN seq = 5001,得:

第三步:核对

按 TCP 标准约定推导得 ,命中选项 C

最终答案是 C(4000)

编者注(生僻术语):TCP 协议规范(RFC 793 / 9293)明确规定 SYN 和 FIN 各占 1 个序号——这两个控制位本身不带应用数据,但占用序号空间是为了让对方能用统一的"累计 ACK"机制确认。本题陷阱就在 SYN 占 1 这条:很多人把 SYN seq 1000 当成"第一个数据字节序号 = 1000",于是漏算 1。记住"SYN 是消耗序号的虚拟字节"是关键。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数