计算机网络第 5 章:传输层
408 计算机网络「传输层」复习:核心知识点、真题题型、通用解法与易错点。
Last updated on
本章依据本站 408 真题 → 计算机网络 → 第 5 章传输层 整理,并对照 408模拟选择题 → 计算机网络 → 第 5 章传输层 补充题型。本站这一章目前真题部分分成 UDP 和 TCP,其中 UDP 真题 3 道,而 TCP 题目从基础选择题一直延伸到 2012、2016、2023 等综合大题;命题重心非常明显地落在 TCP。(Any Docs)
内容不按年份罗列,而是将真题归纳为“掌握一道 → 迁移一类”的题型体系。
一、先建立整章框架
第 5 章实际上可以压缩成 8 个核心问题:
-
传输层到底负责什么?
- 进程到进程的通信
- 端口号
- 复用与分用
-
UDP 怎么工作?
- 无连接
- 首部只有 8B
- UDP 长度
- UDP 校验和
- 伪首部
-
TCP 首部怎么看?
- seq
- ack
- SYN / ACK / FIN / RST
- window
- MSS
-
TCP 序号与确认号怎么算?
- 第一个字节序号
- 累计确认
- SYN、FIN 占序号
-
TCP 怎么保证可靠?
- ACK
- 超时重传
- 累计确认
- 快速重传
-
TCP 流量控制怎么算?
- 接收窗口 rwnd
- 发送窗口
- 已发送但未确认数据
- 零窗口
-
TCP 拥塞控制怎么算?
- cwnd
- ssthresh
- 慢开始
- 拥塞避免
- 超时
- 3 个重复 ACK
-
TCP 怎么建立和释放?
- 三次握手
- 四次挥手
- FIN_WAIT
- TIME_WAIT
真正的大题就是把第 4~8 点混起来考。
二、传输层基础:端口、复用和分用
这部分单独成为大题的概率不高,但特别喜欢藏在选择题里。
1. 网络层和传输层究竟有什么区别?
网络层解决:
主机 A → 主机 B
传输层解决:
主机 A 中的某进程 → 主机 B 中的某进程
所以仅知道 IP 地址还不够。
例如相应的电脑同时运行:
- 浏览器
- 微信
- Steam
IP 数据报已经送到相应的电脑以后,操作系统还必须判断:
这份数据应该交给哪个进程?
靠的就是端口号。
2. TCP/UDP 端口号
端口字段 16 位,因此:
共:
个可能的端口号。
但是一个 TCP 连接绝不是只由端口号确定。
TCP 连接由四元组唯一标识:
因此服务器完全可以:
在 TCP 80 端口同时维护几千、几万个 TCP 连接。
因为客户端 IP 或客户端端口不同,四元组就不同。
本站模拟题的“王道·卷七-Q39”专门考了这一点:题目问“一台主机最多只能存在 65536 个 TCP 连接吗?”答案是否定的;同一个服务器端口可以参与很多不同 TCP 连接。(Any Docs)
易错点
不要混淆:
三、题型一:UDP 基本性质
这是传输层最简单的一类。
网站真题代表题:
2014 年 408:判断 UDP 是否具有“无连接、复用/分用、通过差错校验保证可靠传输”这些性质。
正确的是:
- 无连接:√
- 复用/分用:√
- 可靠传输:×
所以选 I、II。(docs.any1.tech)
UDP 的完整特点
UDP 是:
- 无连接
- 尽最大努力交付
- 面向报文
- 不可靠
- 没有流量控制
- 没有拥塞控制
- 首部小
- 时延小
一定要注意:
有差错检测 ≠ 可靠传输。
UDP 有校验和,只能判断:
“数据可能坏了。”
但是 UDP 自己不会:
- 确认
- 重传
- 排序
- 去重
所以不能因此说 UDP 是可靠的。
四、题型二:UDP 复用与分用
真题:2018 年 408
题目:
UDP 在接收端执行分用时,依据首部中的哪个字段?
答案:
目的端口号。
原因很简单。
例如收到:
源端口 = 55000
目的端口 = 53操作系统关心的是:
“应该交给本机哪个应用?”
所以看:
而不是源端口。
五、题型三:UDP 首部解析
UDP 首部是这一章非常适合出小计算题的地方。
UDP 首部只有 8B
共 4 个字段:
| 字段 | 长度 |
|---|---|
| 源端口 | 2B |
| 目的端口 | 2B |
| UDP 长度 | 2B |
| 校验和 | 2B |
因此:
注意 UDP 的“长度”字段表示:
不是数据长度。
模拟题:王道·卷五 Q38
题目给 UDP 首部:
CB84 000D 001C 001C问源端口、目的端口、数据长度以及方向。
按字段拆:
CB84 | 000D | 001C | 001C
源端口 目的端口 长度 校验和其中:
这 28B 包括 UDP 首部。
所以数据长度:
而:
目的端口是熟知端口,源端口则是高位临时端口,因此很像:
客户端 → 服务器。
这类题网站给出的正确组合是“目的端口为 13、客户端向服务器发送”。(Any Docs)
通用解法
看到 UDP 十六进制首部,直接:
2B 2B 2B 2B
源端口 | 目的端口 | 长度 | 校验和不要自己凭感觉找字段。
六、题型四:UDP 校验和——重点小计算
这是近年非常值得注意的题型,因为 2024 年 408 真题直接算过一次。
真题:2024 年 408
题目给出 UDP 校验和计算中的两个 16 位数:
1011100110110110
0110010111000101求最终校验和。(docs.any1.tech)
UDP 使用的是:
16 位反码加法。
第一步正常加:
得到:
注意有第 17 位进位。
关键规则:回卷进位
不能把进位直接丢掉。
应该:
得到:
最后按位取反:
因此选 C。(docs.any1.tech)
七、UDP 校验和万能步骤
以后看到任何 UDP/TCP 校验和:
第一步
16 位一组。
第二步
全部做反码加法。
第三步
有最高位进位:
第四步
最后结果整体取反。
即:
八、伪首部:特别容易被骗
模拟题连续考了这个知识点。
伪首部并不是真正的 UDP/TCP 首部。
它只是为了计算校验和临时构造的。
通常包括:
- 源 IP
- 目的 IP
- 协议号
- TCP/UDP 长度等
然后:
一起参与校验和。
但:
相应的模拟题“王道·卷六-Q38”和“竟成·模拟一-40”都考到:TCP 和 UDP 都会利用伪首部,而伪首部既不会作为真正数据向下发送,也不会向应用层提交。(Any Docs)
九、正式进入本章核心:TCP
这一章真正拉开分数差距的是 TCP。
建议始终记住 TCP 的一句话:
TCP 是面向字节流的协议。
这句话直接决定了后面的 seq 和 ack。
TCP 不是:
“第 1 个报文段、第 2 个报文段……”
而是:
“字节 100~399、400~899……”
所以 TCP 的序号本质上是:
十、题型五:TCP 序号和确认号——本章最高频基础题
这是必须做到“几秒钟出答案”的题型。
核心公式
若某 TCP 段:
- seq =
- 携带 字节数据
并且这些数据连续正确收到,那么接收方返回:
因为 ACK 表示:
下一次希望收到的字节序号。
十一、真题:2009 年序号题
题目:
甲向乙发送连续两个 TCP 段,数据长度分别为 300B、500B,第一个段 seq=200。乙全部正确收到,问 ACK。
总数据:
第一个字节:
因此:
答案:
十二、真题:2011 年——中间报文段丢失
这道题非常重要。
题目:
连续三个 TCP 段的数据长度分别为 300B、400B、500B,第 3 段 seq=900;乙只正确收到第 1、3 段,问乙发送的确认号。
先反推第 1 段序号。
第 3 段之前:
所以:
得:
因此:
- 第 1 段:200~499
- 第 2 段:500~899
- 第 3 段:900~1399
第 2 段丢了。
虽然第 3 段已经收到,但是 TCP 使用累计确认。
接收端仍然说:
“当前仍在等待序号 500 开始的数据。”
所以:
十三、累计确认是一定要真正理解的
假设:
100~199 收到
200~299 丢失
300~399 收到
400~499 收到那么 ACK 仍然是:
绝不是:
或者:
因为 ACK 的含义是:
小于 ACK 的所有字节均已连续正确接收。
因此:
实际上是在表达:
十四、双向 TCP 时 seq 和 ack 分开算
真题:2013 年 408
乙发给甲:
- seq=1913
- ack=2046
- 数据=100B
甲马上回一个 TCP 段,问甲的 seq 和 ack。(docs.any1.tech)
先看乙的数据。
乙发送:
共 100B。
所以甲期待:
同时乙发来的:
表示乙已经收到甲到 2045 的数据。
因此甲下一段可以从:
开始。
答案:
十五、一个特别重要的思想:两个方向两套序号
TCP 是全双工的。
所以:
甲 → 乙有自己的一套序号。
乙 → 甲还有另一套。
因此永远分别算:
和
不要把双方序号串起来。
十六、SYN 和 FIN 的“特殊 +1”
这是全章最容易丢的 1 分。
TCP 中:
即使它们没有携带应用数据。
而纯 ACK:
十七、题型六:TCP 三次握手
设客户端初始序号:
服务器初始序号:
第一次
客户端:
SYN=1
seq=x第二次
服务器:
SYN=1
ACK=1
seq=y
ack=x+1第三次
客户端:
ACK=1
seq=x+1
ack=y+1这三个式子直接背下来都不过分。
十八、真题:2011 年三次握手
题目:
甲发送
(SYN=1, seq=11220),乙接受连接。乙返回的报文可能是什么?
由于 SYN 占 1 个序号:
乙应该设置:
SYN=1
ACK=1所以正确选项对应:
十九、真题:2019 年第三次握手
甲、乙初始序号分别:
问第三次握手确认号。
第三次握手确认服务器 SYN,因此:
所以:
二十、题型七:根据 SYN 与 FIN 计算发送了多少数据
真题:2020 年 408
题目:
甲建立连接时 SYN 的 seq=1000;断开时 FIN 的 seq=5001。没有重传。问甲发送了多少应用层数据?
SYN 使用 1000。
因此第一个数据字节:
FIN 使用:
说明最后一个数据字节是:
因此:
或者更简单:
所以:
二十一、这一类的万能公式
初始 SYN 序号是:
后来的 FIN 序号是:
若期间没有额外消耗序号的情况:
二十二、题型八:TCP 流量控制——接收窗口
TCP 流量控制的核心目的:
不要把接收方撑爆。
接收方不断告诉发送方:
即:
接收缓存还剩多少可用空间。
而发送方还受到网络拥塞控制的:
限制。
所以实际发送窗口:
这是全章最重要的公式之一。
二十三、真题:2010 年——发送窗口还剩多少
条件:
- MSS=1000B
- cwnd=4000B
- 已连续发送两个最大段
- 第一个段得到确认
- 接收方最新通告:
现在两个段中还有:
没有确认。
发送窗口最多允许未确认数据:
其中已有:
在途。
所以还能发送:
即:
二十四、这类题真正的万能公式
如果:
- 拥塞窗口
- 接收窗口
- 当前已经发送但未确认的数据
则:
还能继续发:
大量 TCP 窗口题本质都是这个。
二十五、真题:2021 年——发送序号范围
题目中乙发回:
所以接收窗口:
而甲此前已经发出了:
因此剩余可发送:
序号范围通用公式
若:
则接收窗口范围:
二十六、题型九:接收缓存不断被填满
真题:2015 年 408
条件:
- MSS=1KB
- 接收缓存 16KB
- 接收方收到数据后不取走
- 初始按慢开始发送
- 问 4 RTT 后发送窗口
每轮发送:
第1轮:1 KB
第2轮:2 KB
第3轮:4 KB
第4轮:8 KB累计收到:
缓存只剩:
此时虽然:
但是:
因此:
答案:
这道题特别重要,因为它揭示:
拥塞窗口很大,并不代表真的能发那么多。
二十七、零窗口与持续计时器
如果:
发送方会暂停正常数据发送。
但如果后来接收方恢复空间、发送“窗口更新”,结果这个更新报文丢了怎么办?
双方可能永久等待。
因此 TCP 有:
持续计时器 / persist timer
发送方周期性发送窗口探测。
本站模拟题“王道·卷一-Q39”把 TCP 的几个经典计时器放在一起考:
- 重传计时器
- 持续计时器
- 保活计时器
- 时间等待计时器
四个都有。(Any Docs)
这是很适合未来再考的一块。
二十八、题型十:TCP 拥塞控制——本章计算题最核心
先只记两个变量:
二十九、慢开始
虽然叫“慢开始”,其实增长非常快。
若初始:
那么每经过一个 RTT:
即:
更底层的说法是:
每收到一个新的 ACK,cwnd 增加约 1 MSS。
所以一个窗口里的 ACK 全回来以后,总效果近似翻倍。
三十、拥塞避免
达到:
以后进入拥塞避免。
此时不再翻倍。
每 RTT 大约:
因此增长:
8 → 9 → 10 → 11 → 12而不是:
8 → 16 → 32三十一、发生超时
408 经典模型下:
然后:
重新慢开始。
这个是历年最常见的考法。
三十二、真题:2009 年拥塞控制
条件:
- MSS=1KB
- cwnd=16KB 时发生超时
- 后面连续成功
- 问第 4 个 RTT 后 cwnd
发生超时:
之后:
RTT 0:1
RTT 1:2
RTT 2:4
RTT 3:8到门限。
下一 RTT 进入拥塞避免:
所以第 4 RTT 后:
三十三、这种题最推荐画表
永远画:
| RTT | cwnd |
|---|---|
| 0 | 1 |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 9 |
| 5 | 10 |
比仅靠脑内推演更稳妥。
三十四、真题:2022 年——超时后恢复到原窗口
条件:
时超时,
问重新增长至:
最少几个 RTT?
超时:
慢开始:
需要:
然后拥塞避免:
需要:
总共:
所以:
三十五、真题:2020 年——问“最长时间”
这道题非常有代表性。
题目:
cwnd 从 8KB 增长到 32KB,RTT=2ms,在不出现拥塞情况下最长需要多久?
为什么强调“最长”?
如果慢开始:
太快。
要最长,就考虑全部处于:
拥塞避免。
需要增加:
MSS=1KB,因此:
于是:
答案:
命题陷阱
看到:
最短
和:
最长
一定要立刻思考:
- 慢开始?
- 拥塞避免?
这正是命题人的考查点。
三十六、题型十一:cwnd 与 rwnd 联合限制
真题:2014 年
条件:
- MSS=1KB
- 超时时 cwnd=8KB
- 接收窗口始终为 10KB
- 之后不再超时
- 问 10 RTT 后发送窗口
超时后:
之后约为:
2
4
5
6
7
8
9
10
11
12 KB最终:
但:
所以实际发送窗口:
答案:
这就是为什么解答拥塞控制题时不能看到 cwnd 就停笔。
最后必须问自己:
有没有给 rwnd?
三十七、题型十二:窗口增长时间
真题:2017 年
条件:
- MSS=1KB
- RTT=5ms
- 初始 cwnd=1KB
- 接收缓存足够
- 问发送窗口达到 32KB 至少多久?
慢开始:
需要:
所以:
答案:
三十八、题型十三:TCP 快速重传
这是另一个高频概念。
正常情况下,丢包后可以等:
重传计时器超时。
但太慢。
TCP 可以通过重复 ACK提前判断丢失。
经典规则:
三十九、真题:2019 年快重传
题目大意:
客户端第一次收到 ack=100 后发送 seq=100 的报文,但该段丢失;之后 seq=200、300、400 等段继续到达服务器。问支持快速重传时什么时候重传 seq=100。
因为服务器始终缺:
所以后面的失序段到达时不断返回:
第一次原始 ACK 不属于重复 ACK。
随后三个:
重复 ACK 1
重复 ACK 2
重复 ACK 3第三个重复 ACK 到达时立即快速重传。
题图对应:
四十、为什么失序报文会产生重复 ACK?
例如:
100~199 丢失
200~299 到达接收方仍说:
然后:
300~399 到达仍:
再来一个:
发送方看到:
怎么连续这么多人都说还缺 100?
于是推断:
100 那个段大概率丢了。
这就是快速重传。
模拟题“竟成·模拟一-39”也专门考了:失序报文段会促使接收方产生重复确认,从而触发快重传。(Any Docs)
四十一、确认 ACK 自己丢了怎么办?
这是可靠传输的一个典型理解题。
模拟题“王道·卷五-Q39”问:
某 ACK 丢失后,对应的数据一定重传吗?
答案:
不一定。
因为 TCP 使用累计确认。
假设:
ACK=1000 丢失之后来了:
ACK=2000那么:
实际上已经顺带确认了前面的数据。
因此通常不需重传。
但如果丢的是:
最后一个数据段对应的 ACK
后面没有更大的 ACK 覆盖它,就可能最终因超时导致重传。(Any Docs)
四十二、题型十四:TCP 四次挥手
这是另一个必须彻底掌握的部分。
假设 A 主动关闭。
第一次挥手
A:
FIN=1
seq=xA:
第二次挥手
B:
ACK=1
ack=x+1B:
A 收到后:
第三次挥手
B 数据发送完:
FIN=1
seq=yB:
第四次挥手
A:
ACK=1
ack=y+1然后:
B 收到:
A 等:
以后才:
四十三、真题:2021 年状态转换
题目:
客户端首先发送 FIN;后来收到服务器 FIN,再发送 ACK。此时客户端进入什么状态?
答案:
看到:
主动关闭方 + 收到对方 FIN + 发最后 ACK
条件反射:
四十四、为什么一定要 TIME_WAIT?
至少记两点。
原因 1:确保最后 ACK 能重传
如果最后 ACK 丢了:
服务器:
“怎么没收到 ACK?”
服务器会重发 FIN。
主动关闭方如果还在 TIME_WAIT,就可以重新回 ACK。
原因 2:让旧报文消失
等待:
使旧 TCP 报文段基本退出网络,防止污染下一条具有相同四元组的连接。
模拟题“王道·卷六-Q39”就直接考了:
防止旧 TCP 报文段干扰后续连接的是哪个状态?
答案:
(Any Docs)
四十五、题型十五:连接释放时间计算
这几年特别值得重视。
真题:2022 年 408
条件:
客户端 C 主动断开。
问 C 和 S 最早何时进入 CLOSED。(docs.any1.tech)
单向传播:
客户端发 FIN。
服务器 25ms 后收到。
最短情况下服务器立即:
ACK + FIN再 25ms 到客户端。
所以客户端在:
进入 TIME_WAIT。
然后等:
于是:
所以客户端:
客户端最后 ACK 再传播:
所以服务器:
进入 CLOSED:
答案:
四十六、释放连接时间题万能图
最推荐自行绘制:
C S
FIN -------------------->
RTT/2
<---------------- ACK+FIN
RTT/2
ACK -------------------->
RTT/2于是主动关闭方进入 TIME_WAIT 的时刻:
服务器 CLOSED:
主动关闭方 CLOSED:
这是在:
对方收到 FIN 后立即 FIN
的最短条件下。
四十七、题型十六:TCP 首部与有效载荷效率
真题:2021 年
题目:
12B 应用层数据分别用 UDP 和 TCP 发送,求最大有效载荷传输效率。
UDP 首部:
所以:
TCP 最小首部:
所以:
答案:
通用公式:
四十八、题型十七:TCP/IP 十六进制首部综合解析
这是第 5 章非常容易把人拉开差距的一类。
2012 年 408 综合题
网站给出了 5 个 IP 分组前 40B 的十六进制值,要求判断:
- 哪些是 H 发出的;
- 哪几个构成 TCP 三次握手;
- 哪些以太网帧需要填充;
- S 收到了多少 TCP 应用数据;
- 经过多少路由器。
这是一个典型的:
数据链路层 + 网络层 + 传输层综合题。
(Any Docs)
四十九、这种十六进制综合题怎么做?
第一步:先看 IPv4 首部
第一个字节:
45其中:
- 4 → IPv4
- 5 → IHL=5
所以 IPv4 首部:
那么:
第 21 字节开始就是 TCP 首部。
第二步:找源 IP 和目的 IP
IPv4 首部:
- 第 13~16B:源 IP
- 第 17~20B:目的 IP
题中:
c0 a8 00 08转十进制:
是 H。
因此根据源地址可以判断:
哪些包是 H 发的。
原题得到:
由 H 发送。(Any Docs)
五十、利用 TCP 标志判断三次握手
原题:
- 包 1:SYN
- 包 2:SYN+ACK
- 包 3:ACK
于是:
构成三次握手。(Any Docs)
五十一、利用 IP 长度判断以太网是否填充
以太网最小帧:
其中首尾固定开销:
因此数据部分最少:
如果 IP 数据报:
以太网就需要 PAD。
原题分组 3、5 的 IP 总长度:
所以:
需要填充。
答案:
(Any Docs)
这就是第 3 章和第 5 章真正结合的地方。
五十二、根据 ACK 反推 TCP 收了多少数据
原题某段:
服务器返回:
差:
所以收到:
(Any Docs)
也可以利用:
即:
一题两解。
这正是 408 喜欢的地方。
五十三、利用 TTL 算路由器个数
发送时:
到达时:
每经过一个路由器:
所以:
经过:
个路由器。(Any Docs)
五十四、本章最高价值题型:整章 TCP 综合大题
真正需要重点练的是:
- 2016
- 2023
- 2024
这几道题。
因为它们不再说明:
“这是拥塞控制题。”
而是把:
- 三次握手
- seq
- ack
- cwnd
- rwnd
- RTT
- 缓存
- 吞吐量
- 四次挥手
- TIME_WAIT
全部揉在一起。
五十五、2016 年 408 综合题
题目核心条件:
- H3 向服务器 S 持续发送 TCP 数据
- S 接收缓存 20KB
- MSS=1KB
- RTT=200ms
- H3 初始序号=100
- ssthresh=32KB
- 服务器收到数据以后不取走
- 每收到一个段立即确认
问题包括:
- 第二次握手 SYN/ACK 和确认号;
- 第 8 个 ACK 后 rwnd、cwnd、发送窗口;
- 窗口变 0 时下一个序号、平均速率;
- 断开连接服务器最早何时释放。
这是非常标准的全章综合题。(Any Docs)
五十六、2016 第(1)问
客户端初始:
所以服务器第二次握手:
SYN=1
ACK=1确认:
即:
五十七、2016 第(2)问
收到 8 个 1KB 段。
服务器缓存:
已经占:
剩余:
初始:
慢开始期间每收到一个新 ACK:
收到第 8 个确认后:
于是:
答案:
(Any Docs)
五十八、为什么这里不是 16KB?
这是非常容易错的地方。
“每 RTT 翻倍”只是慢开始的宏观描述。
严格来说是:
每收到一个新的 ACK,cwnd 增加一个 MSS。
题目问的是:
“第 8 个 ACK 到来的瞬间。”
因此应该按 ACK 一个一个增加。
这类瞬时问题和“经过若干 RTT”问题的计算方法一定要区分。
五十九、2016 第(3)问:序号
SYN 用:
所以第一个数据字节:
服务器总缓存:
填满以后,下一个数据字节:
所以:
六十、2016 第(3)问:平均速率
慢开始过程中累计数据大致:
1 RTT:1KB
2 RTT:3KB
3 RTT:7KB
4 RTT:15KB
5 RTT:20KB第 5 RTT 收到零窗口。
时间:
传输:
平均:
即:
(Any Docs)
六十一、2016 第(4)问:服务器释放时间
H3 是主动关闭方。
时间线:
H3 ---- FIN ----> S
RTT/2
H3 <--- FIN+ACK-- S
RTT/2
H3 ---- ACK ----> S
RTT/2所以服务器从 t 到收到最终 ACK:
代入:
所以:
(Any Docs)
六十二、2023 年 408:非常值得反复做
题目:
H 登录 FTP 服务器后上传 18000B 文件。数据连接初始 seq=100,MSS=1000B,初始 ssthresh=4MSS,RTT=10ms;无丢包、无乱序。问 FTP 连接性质、文件首字节序号、挥手确认号、特定 ACK 到来时 cwnd、总时间和平均速率。
(Any Docs)
这道题实际上同时考:
应用层 FTP + TCP。
六十三、FTP 先记住
FTP 使用:
控制连接
整个会话维持。
数据连接
传一个文件建立一个。
登录时建立:
(Any Docs)
这也是第 5 章与第 6 章典型结合点。
六十四、2023:文件第一个字节序号
初始 SYN:
SYN 占一个:
就是文件第一个字节。
六十五、发送完文件后 FIN 的序号
文件:
因此发送完数据后的下一序号:
FIN 使用:
FIN 又占 1。
于是服务器对 FIN:
答案:
(Any Docs)
六十六、2023:根据 ACK 反推 cwnd
收到:
表示已经确认:
共:
即两个数据段。
初始:
收到第一个 ACK:
收到第二个:
因此:
到:
表示累计确认 7 个数据段。
初始阈值:
前 3 个新 ACK 后 cwnd 达:
之后进入拥塞避免。
再经过这一窗口的若干确认,总体增加约:
因此:
这是网站给出的真题答案。(Any Docs)
六十七、2023:数据发送轮次
18KB 文件:
各轮发送数量:
累计:
需要 5 个数据 RTT。
而建立 TCP 数据连接还需要:
所以:
答案:
(Any Docs)
六十八、平均速率
应用数据:
时间:
所以:
换成 bit/s:
即:
(Any Docs)
六十九、2024 年真题:连接建立 + 传数据 + TIME_WAIT
这是非常好的“时间轴终极题”。
题目:
- H 发送 3000B
- MSS=1000B
- RTT=10ms
- MSL=30s
- 初始 cwnd 按 1 MSS
- H 主动关闭
- 问从请求建立连接到 H CLOSED 最短多久
(Any Docs)
七十、建立连接
H 发 SYN。
经过:
H 收到 SYN+ACK。
第三次握手 ACK 可以顺便携带第一个数据段。
所以这里不要额外白白加 1 RTT。
这是时间计算题非常重要的技巧。
七十一、发送数据
3000B:
第一轮发:
第二轮发:
所以到:
全部确认完。
七十二、释放连接
H 发 FIN。
最短情况下再用:
H 收到服务器 FIN,发送最后 ACK,并进入:
所以:
进入 TIME_WAIT。
然后:
最终:
(Any Docs)
七十三、TCP 时间题的万能方法
以后不要试图背“某类题等于几 RTT”。
统一画时间轴。
分成:
阶段 A:建立
一般:
之后客户端即可发送第三次 ACK,并可能同时带数据。
阶段 B:传输数据
计算每轮窗口:
然后逐 RTT 累计:
直到传完。
阶段 C:释放
主动关闭方:
到进入 TIME_WAIT,最短通常约:
然后:
七十四、最重要的综合题解题模板
以后只要看到 TCP 大题,建议在草稿上固定写 5 行。
第 1 行:序号
写:
第 2 行:窗口
写:
第 3 行:拥塞控制
画:
cwnd:
1 → 2 → 4 → ...
ssthresh
↓
+1 MSS/RTT第 4 行:数据量
每 RTT 写:
本轮发几个 MSS
累计发几个 MSS第 5 行:时间轴
握手 | 数据 | 挥手 | TIME_WAIT基本就不会乱。
七十五、几个特别容易错的点
1. ACK 是“下一个希望收到”
不是:
最后一个收到的序号。
而是:
2. TCP 序号按字节
不是报文段编号。
3. SYN 占 1
下一数据:
4. FIN 也占 1
FIN:
对方:
5. 普通 ACK 不额外消耗序号
这个和 SYN/FIN 不一样。
6. 收到失序数据不能跨缺口累计确认
缺:
后面即使收到 900:
仍然可能是:
7. cwnd 不是最终发送窗口
必须检查:
最终:
8. “每 RTT 翻倍”和“每 ACK +1 MSS”并不矛盾
慢开始底层:
宏观:
题目问“第几个 ACK”就逐 ACK 算。
题目问“经过几个 RTT”可以按翻倍算。
9. 超时以后不是从 ssthresh 开始
经典 408 模型:
但:
10. TIME_WAIT 是主动关闭方
不要看到服务器就自动认为服务器 TIME_WAIT。
谁:
最后发送针对对方 FIN 的 ACK
谁通常是主动关闭方并进入 TIME_WAIT。
七十六、从真题看,第 5 章优先级怎么排?
结合站内收录的历年题目,建议复习优先级这样排。
S 级:必须完全掌握
① seq / ack
涉及:
- 2009
- 2011
- 2013
- 2016
- 2020
- 2021
- 2023
等大量题目。(Any Docs)
② cwnd / ssthresh
涉及:
- 2009
- 2014
- 2015
- 2017
- 2020
- 2022
- 2023
是本章绝对核心。(Any Docs)
③ TCP 三次握手、四次挥手
涉及:
- 2011
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
不仅选择题考,而且经常成为综合题的一部分。(Any Docs)
④ rwnd + cwnd 联合
尤其:
- 2010
- 2014
- 2015
- 2016
- 2021
非常适合算窗口。(Any Docs)
七十七、A级
⑤ 快速重传 / 累计确认
典型:
- 2011
- 2019
- 模拟可靠传输题
⑥ TCP 时间与吞吐量
近些年的综合性明显很强:
- 2016
- 2022
- 2023
- 2024
这是复习后期最值得专门训练的一类。(Any Docs)
七十八、B级
⑦ UDP
知识点少,但是很适合稳定送分。
尤其:
- UDP 首部
- 分用
- 校验和
- 伪首部
2024 已经直接考了反码校验和,所以不能因为 UDP 简单就不复习。(docs.any1.tech)
⑧ TCP 首部字段、端口、计时器
通常属于选择题知识点。
例如模拟题已经覆盖:
- RST
- 数据偏移
- 四元组
- 持续计时器
- TIME_WAIT
- ACK 有效条件
(Any Docs)
七十九、值得关注的几个新变式
根据现有真题风格,第 5 章以后如果要增加区分度,很容易这样变。
预测 1:丢一个中间段 + rwnd + 快重传
例如:
MSS=1000B
发送:
seq=1000
seq=2000(丢)
seq=3000
seq=4000
seq=5000问:
- 接收端分别返回什么 ACK?
- 第几个 ACK 后触发快重传?
- 此时已发送未确认数据多少?
- 发送窗口还能发多少?
这其实把:
累计确认 + 快重传 + 流量控制
一次考完。
八十、预测 2:零窗口 + 持续计时器
例如:
rwnd 从 2000B 变成 0,后来接收缓存腾出空间,但窗口更新 ACK 丢失,问 TCP 如何避免双方永久阻塞。
答案应抓:
模拟题已经铺垫了这个知识点,因此很适合未来转成情境题。(Any Docs)
八十一、预测 3:抓包综合
给:
IP总长度
TTL
TCP seq
TCP ack
flags
window然后一次问:
- 哪个是 SYN;
- 哪个是 SYN+ACK;
- 数据长度;
- ACK 应是多少;
- rwnd 是多少;
- 经过几个路由器;
- 以太网是否需要填充。
2012 真题已经证明这种跨层考法完全符合 408 风格。(Any Docs)
八十二、预测 4:时间轴综合题继续加强
给出:
- 文件大小
- MSS
- 初始 cwnd
- ssthresh
- rwnd
- RTT
- MSL
- 一次丢包
问:
从 SYN 发出到 CLOSED 一共多少时间?
即可要依次做:
2023、2024 已经非常接近这个命题方向。(Any Docs)
八十三、最后给出一张“第 5 章考场公式表”
UDP 首部
UDP 数据长度
TCP 最小首部
ACK
若 SYN/FIN:
SYN
FIN
接收窗口
实际发送窗口
还能发送的数据
慢开始
拥塞避免
超时
快速重传
单向传播时延
TIME_WAIT
以太网最小数据字段
如果:
则需要填充。
八十四、第 5 章真正应该达到什么程度?
这一章不要满足于“知道 TCP 三次握手”。
真正应该做到的是,看到类似:
初始 seq=100,MSS=1KB,ssthresh=8KB,rwnd=10KB,RTT=20ms,发送 25KB 数据,第 7KB 处发生丢包,最后主动关闭,MSL=30s……
可以自己画出:
连接建立
↓
初始 seq
↓
每轮发送几个 MSS
↓
cwnd 怎么变
↓
rwnd 有没有限制
↓
哪个 ACK 返回
↓
什么时候重传
↓
文件什么时候发送完成
↓
FIN 的 seq
↓
对方 ack
↓
TIME_WAIT
↓
CLOSED一旦能把这条链完整跑通,第 5 章绝大多数选择题和综合题其实都变成同一套模型。
从站内收录的真题来看,尤其应该反复练 2012 抓包综合、2016 TCP 窗口综合、2023 FTP+TCP 综合、2024 建连—传输—释放时间综合;它们基本覆盖了本章从“会做单点题”到“能做整章综合题”的完整能力层级。(Any Docs)