考研学习
解题方法计算机网络

计算机网络第 5 章:传输层

408 计算机网络「传输层」复习:核心知识点、真题题型、通用解法与易错点。

Last updated on

本章依据本站 408 真题 → 计算机网络 → 第 5 章传输层 整理,并对照 408模拟选择题 → 计算机网络 → 第 5 章传输层 补充题型。本站这一章目前真题部分分成 UDP 和 TCP,其中 UDP 真题 3 道,而 TCP 题目从基础选择题一直延伸到 2012、2016、2023 等综合大题;命题重心非常明显地落在 TCP。(Any Docs)

内容不按年份罗列,而是将真题归纳为“掌握一道 → 迁移一类”的题型体系。

一、先建立整章框架

第 5 章实际上可以压缩成 8 个核心问题:

  1. 传输层到底负责什么?

    • 进程到进程的通信
    • 端口号
    • 复用与分用
  2. UDP 怎么工作?

    • 无连接
    • 首部只有 8B
    • UDP 长度
    • UDP 校验和
    • 伪首部
  3. TCP 首部怎么看?

    • seq
    • ack
    • SYN / ACK / FIN / RST
    • window
    • MSS
  4. TCP 序号与确认号怎么算?

    • 第一个字节序号
    • 累计确认
    • SYN、FIN 占序号
  5. TCP 怎么保证可靠?

    • ACK
    • 超时重传
    • 累计确认
    • 快速重传
  6. TCP 流量控制怎么算?

    • 接收窗口 rwnd
    • 发送窗口
    • 已发送但未确认数据
    • 零窗口
  7. TCP 拥塞控制怎么算?

    • cwnd
    • ssthresh
    • 慢开始
    • 拥塞避免
    • 超时
    • 3 个重复 ACK
  8. TCP 怎么建立和释放?

    • 三次握手
    • 四次挥手
    • FIN_WAIT
    • TIME_WAIT

真正的大题就是把第 4~8 点混起来考。


二、传输层基础:端口、复用和分用

这部分单独成为大题的概率不高,但特别喜欢藏在选择题里。

1. 网络层和传输层究竟有什么区别?

网络层解决:

主机 A → 主机 B

传输层解决:

主机 A 中的某进程 → 主机 B 中的某进程

所以仅知道 IP 地址还不够。

例如相应的电脑同时运行:

  • 浏览器
  • QQ
  • 微信
  • 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 在接收端执行分用时,依据首部中的哪个字段?

答案:

目的端口号。

(docs.any1.tech)

原因很简单。

例如收到:

源端口 = 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。

总数据:

第一个字节:

因此:

答案:

(docs.any1.tech)


十二、真题: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 开始的数据。”

所以:

(docs.any1.tech)


十三、累计确认是一定要真正理解的

假设:

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

所以正确选项对应:

(docs.any1.tech)


十九、真题:2019 年第三次握手

甲、乙初始序号分别:

问第三次握手确认号。

第三次握手确认服务器 SYN,因此:

所以:

(docs.any1.tech)


二十、题型七:根据 SYN 与 FIN 计算发送了多少数据

真题:2020 年 408

题目:

甲建立连接时 SYN 的 seq=1000;断开时 FIN 的 seq=5001。没有重传。问甲发送了多少应用层数据?

SYN 使用 1000。

因此第一个数据字节:

FIN 使用:

说明最后一个数据字节是:

因此:

或者更简单:

所以:

(docs.any1.tech)


二十一、这一类的万能公式

初始 SYN 序号是:

后来的 FIN 序号是:

若期间没有额外消耗序号的情况:


二十二、题型八:TCP 流量控制——接收窗口

TCP 流量控制的核心目的:

不要把接收方撑爆。

接收方不断告诉发送方:

即:

接收缓存还剩多少可用空间。

而发送方还受到网络拥塞控制的:

限制。

所以实际发送窗口:

这是全章最重要的公式之一。


二十三、真题:2010 年——发送窗口还剩多少

条件:

  • MSS=1000B
  • cwnd=4000B
  • 已连续发送两个最大段
  • 第一个段得到确认
  • 接收方最新通告:

现在两个段中还有:

没有确认。

发送窗口最多允许未确认数据:

其中已有:

在途。

所以还能发送:

即:

(docs.any1.tech)


二十四、这类题真正的万能公式

如果:

  • 拥塞窗口
  • 接收窗口
  • 当前已经发送但未确认的数据

则:

还能继续发:

大量 TCP 窗口题本质都是这个。


二十五、真题:2021 年——发送序号范围

题目中乙发回:

所以接收窗口:

而甲此前已经发出了:

因此剩余可发送:

(docs.any1.tech)

序号范围通用公式

若:

则接收窗口范围:


二十六、题型九:接收缓存不断被填满

真题:2015 年 408

条件:

  • MSS=1KB
  • 接收缓存 16KB
  • 接收方收到数据后不取走
  • 初始按慢开始发送
  • 问 4 RTT 后发送窗口

每轮发送:

第1轮:1 KB
第2轮:2 KB
第3轮:4 KB
第4轮:8 KB

累计收到:

缓存只剩:

此时虽然:

但是:

因此:

答案:

(docs.any1.tech)

这道题特别重要,因为它揭示:

拥塞窗口很大,并不代表真的能发那么多。


二十七、零窗口与持续计时器

如果:

发送方会暂停正常数据发送。

但如果后来接收方恢复空间、发送“窗口更新”,结果这个更新报文丢了怎么办?

双方可能永久等待。

因此 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 后:

(docs.any1.tech)


三十三、这种题最推荐画表

永远画:

RTTcwnd
01
12
24
38
49
510

比仅靠脑内推演更稳妥。


三十四、真题:2022 年——超时后恢复到原窗口

条件:

时超时,

问重新增长至:

最少几个 RTT?

超时:

慢开始:

需要:

然后拥塞避免:

需要:

总共:

所以:

(docs.any1.tech)


三十五、真题:2020 年——问“最长时间”

这道题非常有代表性。

题目:

cwnd 从 8KB 增长到 32KB,RTT=2ms,在不出现拥塞情况下最长需要多久?

为什么强调“最长”?

如果慢开始:

太快。

要最长,就考虑全部处于:

拥塞避免。

需要增加:

MSS=1KB,因此:

于是:

答案:

(docs.any1.tech)

命题陷阱

看到:

最短

和:

最长

一定要立刻思考:

  • 慢开始?
  • 拥塞避免?

这正是命题人的考查点。


三十六、题型十一:cwnd 与 rwnd 联合限制

真题:2014 年

条件:

  • MSS=1KB
  • 超时时 cwnd=8KB
  • 接收窗口始终为 10KB
  • 之后不再超时
  • 问 10 RTT 后发送窗口

超时后:

之后约为:

2
4
5
6
7
8
9
10
11
12 KB

最终:

但:

所以实际发送窗口:

答案:

(docs.any1.tech)

这就是为什么解答拥塞控制题时不能看到 cwnd 就停笔。

最后必须问自己:

有没有给 rwnd?


三十七、题型十二:窗口增长时间

真题:2017 年

条件:

  • MSS=1KB
  • RTT=5ms
  • 初始 cwnd=1KB
  • 接收缓存足够
  • 问发送窗口达到 32KB 至少多久?

慢开始:

需要:

所以:

答案:

(docs.any1.tech)


三十八、题型十三:TCP 快速重传

这是另一个高频概念。

正常情况下,丢包后可以等:

重传计时器超时。

但太慢。

TCP 可以通过重复 ACK提前判断丢失。

经典规则:


三十九、真题:2019 年快重传

题目大意:

客户端第一次收到 ack=100 后发送 seq=100 的报文,但该段丢失;之后 seq=200、300、400 等段继续到达服务器。问支持快速重传时什么时候重传 seq=100。

因为服务器始终缺:

所以后面的失序段到达时不断返回:

第一次原始 ACK 不属于重复 ACK。

随后三个:

重复 ACK 1
重复 ACK 2
重复 ACK 3

第三个重复 ACK 到达时立即快速重传。

题图对应:

(docs.any1.tech)


四十、为什么失序报文会产生重复 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=x

A:


第二次挥手

B:

ACK=1
ack=x+1

B:

A 收到后:


第三次挥手

B 数据发送完:

FIN=1
seq=y

B:


第四次挥手

A:

ACK=1
ack=y+1

然后:

B 收到:

A 等:

以后才:


四十三、真题:2021 年状态转换

题目:

客户端首先发送 FIN;后来收到服务器 FIN,再发送 ACK。此时客户端进入什么状态?

答案:

(docs.any1.tech)

看到:

主动关闭方 + 收到对方 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 最小首部:

所以:

答案:

(docs.any1.tech)

通用公式:


四十八、题型十七:TCP/IP 十六进制首部综合解析

这是第 5 章非常容易把人拉开差距的一类。

2012 年 408 综合题

网站给出了 5 个 IP 分组前 40B 的十六进制值,要求判断:

  1. 哪些是 H 发出的;
  2. 哪几个构成 TCP 三次握手;
  3. 哪些以太网帧需要填充;
  4. S 收到了多少 TCP 应用数据;
  5. 经过多少路由器。

这是一个典型的:

数据链路层 + 网络层 + 传输层综合题。

(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
  • 服务器收到数据以后不取走
  • 每收到一个段立即确认

问题包括:

  1. 第二次握手 SYN/ACK 和确认号;
  2. 第 8 个 ACK 后 rwnd、cwnd、发送窗口;
  3. 窗口变 0 时下一个序号、平均速率;
  4. 断开连接服务器最早何时释放。

这是非常标准的全章综合题。(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

然后一次问:

  1. 哪个是 SYN;
  2. 哪个是 SYN+ACK;
  3. 数据长度;
  4. ACK 应是多少;
  5. rwnd 是多少;
  6. 经过几个路由器;
  7. 以太网是否需要填充。

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)

On this page

一、先建立整章框架二、传输层基础:端口、复用和分用1. 网络层和传输层究竟有什么区别?2. TCP/UDP 端口号易错点三、题型一:UDP 基本性质UDP 的完整特点四、题型二:UDP 复用与分用真题:2018 年 408五、题型三:UDP 首部解析UDP 首部只有 8B模拟题:王道·卷五 Q38通用解法六、题型四:UDP 校验和——重点小计算真题:2024 年 408关键规则:回卷进位七、UDP 校验和万能步骤第一步第二步第三步第四步八、伪首部:特别容易被骗九、正式进入本章核心:TCP十、题型五:TCP 序号和确认号——本章最高频基础题核心公式十一、真题:2009 年序号题十二、真题:2011 年——中间报文段丢失十三、累计确认是一定要真正理解的十四、双向 TCP 时 seq 和 ack 分开算真题:2013 年 408十五、一个特别重要的思想:两个方向两套序号十六、SYN 和 FIN 的“特殊 +1”十七、题型六:TCP 三次握手第一次第二次第三次十八、真题:2011 年三次握手十九、真题:2019 年第三次握手二十、题型七:根据 SYN 与 FIN 计算发送了多少数据真题:2020 年 408二十一、这一类的万能公式二十二、题型八:TCP 流量控制——接收窗口二十三、真题:2010 年——发送窗口还剩多少二十四、这类题真正的万能公式二十五、真题:2021 年——发送序号范围序号范围通用公式二十六、题型九:接收缓存不断被填满真题:2015 年 408二十七、零窗口与持续计时器二十八、题型十:TCP 拥塞控制——本章计算题最核心二十九、慢开始三十、拥塞避免三十一、发生超时三十二、真题:2009 年拥塞控制三十三、这种题最推荐画表三十四、真题:2022 年——超时后恢复到原窗口三十五、真题:2020 年——问“最长时间”命题陷阱三十六、题型十一:cwnd 与 rwnd 联合限制真题:2014 年三十七、题型十二:窗口增长时间真题:2017 年三十八、题型十三:TCP 快速重传三十九、真题:2019 年快重传四十、为什么失序报文会产生重复 ACK?四十一、确认 ACK 自己丢了怎么办?四十二、题型十四:TCP 四次挥手第一次挥手第二次挥手第三次挥手第四次挥手四十三、真题:2021 年状态转换四十四、为什么一定要 TIME_WAIT?原因 1:确保最后 ACK 能重传原因 2:让旧报文消失四十五、题型十五:连接释放时间计算真题:2022 年 408四十六、释放连接时间题万能图四十七、题型十六:TCP 首部与有效载荷效率真题:2021 年四十八、题型十七:TCP/IP 十六进制首部综合解析2012 年 408 综合题四十九、这种十六进制综合题怎么做?第一步:先看 IPv4 首部第二步:找源 IP 和目的 IP五十、利用 TCP 标志判断三次握手五十一、利用 IP 长度判断以太网是否填充五十二、根据 ACK 反推 TCP 收了多少数据五十三、利用 TTL 算路由器个数五十四、本章最高价值题型:整章 TCP 综合大题五十五、2016 年 408 综合题五十六、2016 第(1)问五十七、2016 第(2)问五十八、为什么这里不是 16KB?五十九、2016 第(3)问:序号六十、2016 第(3)问:平均速率六十一、2016 第(4)问:服务器释放时间六十二、2023 年 408:非常值得反复做六十三、FTP 先记住控制连接数据连接六十四、2023:文件第一个字节序号六十五、发送完文件后 FIN 的序号六十六、2023:根据 ACK 反推 cwnd六十七、2023:数据发送轮次六十八、平均速率六十九、2024 年真题:连接建立 + 传数据 + TIME_WAIT七十、建立连接七十一、发送数据七十二、释放连接七十三、TCP 时间题的万能方法阶段 A:建立阶段 B:传输数据阶段 C:释放七十四、最重要的综合题解题模板第 1 行:序号第 2 行:窗口第 3 行:拥塞控制第 4 行:数据量第 5 行:时间轴七十五、几个特别容易错的点1. ACK 是“下一个希望收到”2. TCP 序号按字节3. SYN 占 14. FIN 也占 15. 普通 ACK 不额外消耗序号6. 收到失序数据不能跨缺口累计确认7. cwnd 不是最终发送窗口8. “每 RTT 翻倍”和“每 ACK +1 MSS”并不矛盾9. 超时以后不是从 ssthresh 开始10. TIME_WAIT 是主动关闭方七十六、从真题看,第 5 章优先级怎么排?S 级:必须完全掌握① seq / ack② cwnd / ssthresh③ TCP 三次握手、四次挥手④ rwnd + cwnd 联合七十七、A级⑤ 快速重传 / 累计确认⑥ TCP 时间与吞吐量七十八、B级⑦ UDP⑧ TCP 首部字段、端口、计时器七十九、值得关注的几个新变式预测 1:丢一个中间段 + rwnd + 快重传八十、预测 2:零窗口 + 持续计时器八十一、预测 3:抓包综合八十二、预测 4:时间轴综合题继续加强八十三、最后给出一张“第 5 章考场公式表”UDP 首部UDP 数据长度TCP 最小首部ACKSYNFIN接收窗口实际发送窗口还能发送的数据慢开始拥塞避免超时快速重传单向传播时延TIME_WAIT以太网最小数据字段八十四、第 5 章真正应该达到什么程度?