第 5 章 传输层
本章地位:传输层是 408 计算机网络部分分值最重、大题最密集的一章:三次握手 / 四次挥手的序号推演、滑动窗口的吞吐率与信道利用率计算、拥塞窗口增长表推演(慢启动 / 拥塞避免 / 快重传 / 快恢复),都是反复出现的真题原型。复习抓三条线——概念线(端到端、复用分用、端口号、UDP 与 TCP 对比)、连接管理线(握手挥手每一步的 SYN / ACK / FIN 置位与 seq、ack 取值,为什么不是两次握手、TIME_WAIT 等 2MSL 的两个理由)、计算线(发送窗口 \(=\min(\text{rwnd},\text{cwnd})\),窗口与 RTT 求吞吐率 / 利用率,按事件序列逐轮推 cwnd 表)。所有例题都按「列公式 → 代数值 → 验算」完整走一遍。
| 考点 | 常考题型 | 热度 | 本章位置 |
|---|---|---|---|
| 端到端通信、复用与分用、端口号分类与常用端口 | 选择 | ★★★★ | 5.1 |
| UDP 特点、首部与伪首部校验 | 选择 | ★★★★ | 5.2 |
| TCP 首部字段(序号 / 确认号 / 六个控制位 / 窗口) | 选择 | ★★★★★ | 5.3.1 / 5.3.2 |
| 三次握手、四次挥手、TIME_WAIT 2MSL | 选择 / 综合 | ★★★★★ | 5.3.3 / 5.3.4 |
| 累计确认、超时重传与快重传、SACK | 选择 | ★★★★ | 5.4.1 |
| 滑动窗口、发送窗口 = min(rwnd, cwnd)、吞吐率与利用率计算 | 计算 / 大题 | ★★★★★ | 5.4.2 |
| 流量控制:零窗口、坚持定时器 | 选择 / 计算 | ★★★ | 5.5 |
| 拥塞控制四算法与 cwnd 增长表推演 | 大题 / 选择 | ★★★★★ | 5.6 |
5.1 传输层的功能与端口
5.1.1 端到端通信:从「主机到主机」到「进程到进程」
② 复用与分用是传输层独有的功能表述,数据链路层、网络层不讲这对概念;
③ 传输层差错检测针对整个报文段(首部+数据),IP 首部校验和只查首部——细节常做辨析选项。
5.1.2 复用与分用
一句话:发送方多进程「共用」传输层发送叫复用,接收方传输层按端口「分发」数据叫分用。
5.1.3 端口号分类与常用端口 · 套接字
- 熟知端口(well-known,0~1023):分配给 TCP/IP 最重要的一些应用程序,固定使用;
- 登记端口 / 注册端口(1024~49151):供没有熟知端口的应用程序登记使用,如 MySQL 3306;
- 短暂端口 / 动态端口(49152~65535):仅在客户进程运行时临时分配,通信结束即收回,是「客户的端口」。
| 应用 | 端口号 | 应用 | 端口号 |
|---|---|---|---|
| FTP 数据连接 / 控制 | 20 / 21 | DNS | 53 |
| SSH | 22 | TFTP | 69 |
| Telnet | 23 | HTTP | 80 |
| SMTP | 25 | POP3 | 110 |
| SNMP | 161 | HTTPS | 443 |
(1) 下列端口号中,属于「短暂端口」范围的是( )
A. 80 B. 1024 C. 40000 D. 65535
(2) 主机甲(IP 为 X)上的浏览器访问服务器乙(IP 为 Y)的 80 端口,甲的临时端口为 51000。该 TCP 连接的套接字对是什么?同一台服务器能否同时服务成千上万个这样的连接?
查看解答
(1) C。短暂端口范围是 49152~65535,40000 属于登记端口(1024~49151),80 属于熟知端口。注意边界:1024 是登记端口的第一号,65535 是短暂端口的最后一号。
(2) 套接字对为 (X:51000, Y:80)(源 IP、源端口、目的 IP、目的端口)。能——每个客户端连接的目的端口虽都是 80,但源 IP 或源端口不同,四元组就不同,服务器为每个四元组维持一条独立的连接,这正是服务器端能并发服务万千客户端的原理。
5.2 UDP 协议
5.2.1 UDP 的特点与首部格式
- 无连接:发送前无需建立连接,发送结束后也不释放,开销小、时延低;
- 尽最大努力交付:不保证可靠交付,主机不维持复杂的连接状态表;
- 面向报文:应用层交多长的报文,UDP 就照样发送多长的报文段,一次交付一个完整报文,既不合并也不拆分(对比:IP 层可能因 MTU 分片);报文太长时 IP 层分片效率低,太短时首部相对开销大——应用程序要自己选好报文大小;
- 无拥塞控制:网络拥塞也不会降低发送速率,适合实时应用(IP 电话、视频会议)容忍丢包但不接受时延抖动;
- 支持一对一、一对多、多对一、多对多的交互通信(TCP 只能一对一);
- 首部开销小,只有 8 B(TCP 首部最少 20 B)。
5.2.2 伪首部与校验和计算
② 计算范围 = 伪首部(12 B)+ UDP 用户数据报(首部 8 B + 数据);伪首部包含源 IP、目的 IP、全 0、协议号 17、UDP 长度;
③ 接收方把伪首部再加上重算一遍,结果为全 1(取反后全 0)才收下,否则悄悄丢弃(UDP 差错处理就这一招:丢弃,或丢弃并告诉应用层,没有重传)。
某应用层进程把一个 \(1000\,\text{B}\) 的报文交付给 UDP 发送(IP 首部 20 B,忽略以太网封装)。求:(1) UDP 用户数据报的总长度与其首部中「长度」字段的值;(2) 校验和计算覆盖的字节数;(3) 若报文改为 \(1001\,\text{B}\),校验和计算与(2)有何不同?
查看解答
(1) UDP 数据报 = 首部 8 B + 数据 1000 B \(=1008\) B;「长度」字段填 1008(指 UDP 首部+数据的总长,不是数据长度,也不是 IP 数据报长度)。
(2) 覆盖 = 伪首部 12 + UDP 数据报 1008 \(=1020\) B。
(3) 1001 B 为奇数,计算校验和时要在数据末尾补一个全 0 字节凑成偶数字节,覆盖 \(12+8+1001+1=1022\) B;但「长度」字段和实际传输长度仍按 1001 B 计,填充字节不传输。
套路总结:长度字段 = 8+数据;校验覆盖 = 12+8+数据(奇数补 0 只影响计算)。
判断正误:(1) UDP 提供复用分用与差错检测功能;(2) UDP 校验和出错时由接收端请求重传;(3) UDP 适合传送电话会议的音视频数据;(4) 应用层交给 UDP 一个 10000 B 的长报文,UDP 会把它拆成多个报文段提高效率。
查看答案
(1) 对。(2) 错,UDP 无重传机制,校验错就丢弃(可选地上报应用层)。(3) 对,实时应用宁可丢包也不要重传带来的时延。(4) 错,UDP 面向报文,原样发送整个报文,不拆分(拆分是应用层或 IP 分片的事)。
5.3 TCP 报文段与连接管理 高频大题
5.3.1 TCP 的特点与报文段首部
- 面向连接:必须先三次握手建立连接,传输数据,最后挥手释放;
- 每条 TCP 连接只能点对点(一对一),不支持一对多、多播、广播;
- 可靠交付:无差错、不丢失、不重复、按序到达(手段见 5.4);
- 全双工:两端都设有发送缓存和接收缓存,双向可同时传输;
- 面向字节流:TCP 把应用层交下来的数据看成一连串无结构的字节流,自行划分报文段(受 MSS、窗口控制),应用进程写入的字节与对方读出的字节完全一样但边界不保证一致。
② 数据偏移的单位是 4 B,不是 1 B,也不是 8 B;
③ URG 与紧急指针配合让紧急数据「插队」发送,但紧急数据仍在报文段中,不会单独成段;PSH 是让接收方尽快上交应用进程;
④ TCP 校验和同样要加伪首部(协议号为 6),UDP / TCP 都检查「整个报文段+伪首部」。
5.3.2 序号与确认号:面向字节流
- 设上一段末字节序号为 \(n\),则下一段 seq \(=n+1\),对方确认 ack \(=n+1\);
- SYN 和 FIN 各消耗一个序号(即使不携带数据),纯 ACK 报文段不消耗序号;携带数据的 SYN 段消耗「1+数据字节数」;
- MSS(最大报文段长度)指报文段中数据部分的最大长度,不含首部;以太网典型 MSS = 1460 B(MTU 1500 − IP 头 20 − TCP 头 20)。
主机甲向主机乙发送 TCP 报文段:第一个报文段携带 100 B 数据,seq = 101;第二个报文段携带 200 B 数据。乙正确收到这两个报文段后发回确认,确认号是多少?若第二个报文段丢失、第一个正确到达,乙的确认号又是多少?
查看解答
第一段数据字节序号 101~200,第二段 seq = 201,字节 201~400。
两段都收到:乙期望下一个字节是 401,ack = 401(累计确认:401 之前的都收到了)。
第二段丢失:乙只收到 101~200,仍只能确认 ack = 201——虽然后面的没到,但累计确认只能确认连续收到的部分。
套路总结:ack = 已连续收到的最后字节序号 + 1 = 下一段的 seq。
5.3.3 三次握手建立连接
5.3.4 四次挥手释放连接 · TIME_WAIT
② 让本连接持续时间内产生的所有报文段都从网络中消失,使下一个新连接不会收到旧连接的迟到报文段。
另外:FIN 比 SYN 多一次挥手,是因为 TCP 全双工——B 收到 FIN 后可能还有数据没发完,得先 ACK、等数据发完再发自己的 FIN,ACK 与 FIN 分开发就成了四次。
主机甲(客户)与主机乙(服务器)建立 TCP 连接,甲选择的初始序号 \(x=1000\),乙选择的初始序号 \(y=5000\)。(1) 写出三次握手中每个报文段的 SYN / ACK 置位与 seq、ack 值;(2) 第三次握手中甲捎带了 200 B 数据,该数据字节的序号范围?随后甲又发送 300 B 数据,该段的 seq 是多少?(3) 若乙随后发送第一段 500 B 数据,其 seq 是多少?
查看解答
(1) ① 甲→乙:SYN=1, seq=1000;② 乙→甲:SYN=1, ACK=1, seq=5000, ack=1001;③ 甲→乙:ACK=1, seq=1001, ack=5001。
(2) SYN 消耗序号 1000,所以数据从 1001 开始:第一段数据序号 1001~1200;第三段 seq = 1201(下一字节序号 = 1200+1)。
(3) 乙的 SYN 消耗序号 5000,乙发送数据从 5001 开始,该段 seq = 5001。
验算:甲③的 ack=5001 = 乙的数据起始序号 ✓;乙对甲捎带数据的确认应为 ack=1201 ✓,与(2)第二段 seq 一致。
(1) 三次握手中,「主机的收发能力都正常」是在第几步之后双方才都确认的?(2) 四次挥手中 B 的 CLOSE-WAIT 状态意味着什么?(3) 判断:连接建立后传送的每个 TCP 报文段 ACK 都置 1;TIME_WAIT 只出现在主动关闭方。
查看答案
(1) 第三次握手完成后:①后 B 知道 A 能发;②后 A 知道 B 能收能发;③后 B 才知道 A 能收。
(2) B 已收到 A 的 FIN 并发出确认,但自己还有数据要继续发送,等数据发完再发 FIN——这是需要四次(而非三次)挥手的根源。
(3) 对;对——TIME_WAIT(2MSL)只在主动关闭(先发 FIN)的一端出现。
5.4 TCP 可靠传输
5.4.1 可靠传输的手段与重传机制
捎带确认:接收方不单独发确认,而是搭在自己反方向发送的数据报文段的 ack 字段里捎回去(TCP 全双工,双向都有数据时几乎总是捎带),确认本身不消耗序号。
快重传:接收方收到失序报文段就重复发送对最后一个连续字节的确认;发送方一连收到 3 个重复(冗余)的 ACK,不等超时立即重传缺的报文段——比等 RTO 快得多,是轻度拥塞的信号(用途见 5.6 快恢复)。
5.4.2 滑动窗口与发送窗口(核心公式)
主机甲通过一条 TCP 连接向主机乙发送数据:发送速率(链路带宽)\(R=8\,\text{Mb/s}\),MSS \(=1000\,\text{B}\),发送窗口固定为 \(5000\,\text{B}\)(5 个报文段),往返时延 RTT \(=24\,\text{ms}\),忽略确认帧发送时延与处理时延,不发生差错。(1) 连续发送一个窗口的数据需多久?(2) 第一段报文的确认何时到达?(3) 此后的稳态周期多长、吞吐率多少?(4) 信道利用率是多少?(5) 要让利用率达到 100%,窗口至少多大?
查看解答
(1) 单段发送时延:
\[ T_L=\frac{1000\times8}{8\times10^{6}}=10^{-3}\,\text{s}=1\,\text{ms} \]
一个窗口 5 段连续发送完需 \(5\times1=5\) ms。
(2) 从 t=0 发第一段:第一段最后一位于 1 ms 时发出,经 RTT=24 ms 后确认返回,即 \(1+24=25\) ms 时刻到达。
(3) 稳态周期:发 5 ms → 等到 25 ms 窗口前移 → 再发 5 ms…周期 \(=1+24=25\) ms,每周期运走 \(5\times1000\,\text{B}=40\,000\) bit:
\[ \text{吞吐率}=\frac{40000}{25\times10^{-3}}=1.6\times10^{6}\ \text{bps}=1.6\ \text{Mb/s} \]
(4) 利用率 = 有数据可发的时间占比:
\[ U=\frac{5}{25}=20\% \]
(5) 连续发送要求「发完窗口用时 ≥ 确认到达时间」,即 \(W\times1\ge 25\),\(W\ge25\) 段,窗口至少 \(25\times1000=25\,000\,\text{B}\)(此时吞吐率打满 8 Mb/s)。
套路总结:单段发送时延 \(T_L=\text{MSS}\times8/R\);周期 \(=T_L+\text{RTT}\);吞吐率 \(=\) 窗口字节数 \(\div\) 周期;利用率 \(U=\) 发送窗口段数 \(\times T_L\div(T_L+\text{RTT})\),上限 100%。
接例 5 的连接:若甲的拥塞窗口 cwnd \(=3000\,\text{B}\),乙通告的接收窗口 rwnd \(=4000\,\text{B}\),甲的发送窗口是多少?此时再求一遍吞吐率。
查看答案
发送窗口 \(=\min(4000,3000)=3000\,\text{B}=3\) 段;周期仍为 25 ms,每周期发 3 段:
\[ \text{吞吐率}=\frac{3\times8000}{25\times10^{-3}}=0.96\ \text{Mb/s},\qquad U=\frac{3}{25}=12\% \]
可见瓶颈从「窗口太小填不满管道」变成了「拥塞窗口更小」,永远取两者较小值。
5.5 TCP 流量控制
主机甲向主机乙发送数据,乙的接收缓存为 4000 B,甲的拥塞窗口恒为 6000 B(不构成瓶颈)。乙按缓存占用情况依次通告接收窗口:收到 2000 B 数据后通告 rwnd₁;甲再发 2000 B 后(应用进程尚未读取)通告 rwnd₂;随后乙的应用进程取走 2000 B 再通告 rwnd₃;全部取走后通告 rwnd₄。求 rwnd₁~rwnd₄ 及甲对应的发送窗口,并说明 rwnd₂ 之后甲的动作。
查看解答
发送窗口恒取 \(\min(6000,\text{rwnd})\),逐项代入:
| 时刻 | 事件 | 乙缓存占用 | 通告 rwnd | 甲发送窗口 |
|---|---|---|---|---|
| 0 | 初始,缓存空 | 0 B | 4000 B | min(6000, 4000) = 4000 B |
| 1 | 乙收到 2000 B | 2000 B | rwnd₁ = 2000 B | 2000 B |
| 2 | 又收到 2000 B | 4000 B | rwnd₂ = 0 | 0,停止发送,启动坚持定时器 |
| 3 | 应用取走 2000 B | 2000 B | rwnd₃ = 2000 B | 2000 B,恢复发送 |
| 4 | 应用再取走 2000 B | 0 B | rwnd₄ = 4000 B | 4000 B |
验算:每行 rwnd = 4000 − 占用,占用 = 已收 − 已取,逐行核对无误 ✓。rwnd₂ = 0 后若 rwnd₃ 的通告丢失,甲的坚持定时器到点即发 1 B 探测报文,避免死锁。
套路总结:rwnd = 接收缓存总量 − (已收到未读取的占用);发送窗口 = min(rwnd, cwnd),rwnd=0 停发+探测。
5.6 TCP 拥塞控制 高频大题
5.6.1 四个算法:慢启动 / 拥塞避免 / 快重传 / 快恢复
- 慢启动(slow start):cwnd 从 1 个 MSS 开始,每收到一个新确认 cwnd 加 1 个 MSS,每轮翻倍(1→2→4→8…,指数增长);「慢」指起点低而非增长慢。
- 拥塞避免(congestion avoidance):当 cwnd 达到慢启动门限 ssthresh 后转入,每轮 cwnd 只加 1 个 MSS(线性增长,加法增大)。
- 超时(重传定时器溢出)→ 乘法减小 + 从头再来:置 \( \text{ssthresh}=\max(\text{当前 cwnd}\times\tfrac{1}{2},\ 2)\)(减半,但不能小于 2 个 MSS),然后 cwnd 重置为 1,重新慢启动。
- 快重传 + 快恢复:收到 3 个冗余 ACK 时立即快重传丢失段;同时 \(\text{ssthresh}=\text{当前 cwnd}\times\frac{1}{2}\),但不回到 1,而是直接置 cwnd = 新 ssthresh,就地进入拥塞避免(快恢复)。
5.6.2 拥塞窗口推演例题(大题题型)
TCP 连接建立后,发送方 cwnd = 1 MSS,ssthresh = 8 MSS。传输过程中:第 12 轮发送结束时(cwnd=16)重传定时器超时;恢复后第 20 轮发送结束时(cwnd=12)连续收到 3 个冗余 ACK。(1) 推演第 1~21 轮的 cwnd 变化表(每轮发送的 MSS 数与轮末 cwnd);(2) 前 20 轮共发送多少个报文段?(3) 第 21 轮结束时的 cwnd?
查看解答
(1) 事件一(超时,cwnd=16):新 ssthresh \(=16\div2=8\),cwnd 归 1 回慢启动;事件二(3 个冗余 ACK,cwnd=12):新 ssthresh \(=12\div2=6\),cwnd=6 直接拥塞避免。
| 轮次 | 本轮发送(MSS) | 轮末 cwnd | 阶段 / 事件 |
|---|---|---|---|
| 1~3 | 1、2、4 | 2、4、8 | 慢启动翻倍;第 3 轮末达 8 = ssthresh |
| 4~11 | 8、9、10、11、12、13、14、15 | 9、10、11、12、13、14、15、16 | 拥塞避免(每轮 +1) |
| 12 | 16 | 1 | 超时:ssthresh=8,cwnd=1 |
| 13~16 | 1、2、4、8 | 2、4、8、9 | 慢启动翻倍;第 16 轮初已到 8,改线性 |
| 17~20 | 9、10、11、12 | 10、11、12、6 | 拥塞避免;第 20 轮末 3 冗余 ACK:ssthresh=6,cwnd=6 |
| 21 | 6 | 7 | 快恢复后就地拥塞避免(+1) |
(2) 各轮发送量求和:
\[ (1+2+4)+(8+9+\cdots+16)+(1+2+4+8)+(9+10+11+12) \]
\[ =7+108+15+42=172\ \text{个报文段} \]
验算:轮 4~12 共 9 项等差,\((8+16)\times9\div2=108\) ✓;三次分段和 7+15+42=64,64+108=172 ✓。
(3) 第 21 轮按 cwnd=6 发送、线性增长,轮末 cwnd = 7(ssthresh 保持 6)。
套路总结:表格分四段(慢启动段 / 线性段 / 事件行 / 新一轮慢启动段),每段单独求和再相加,绝不能一个数一个数硬加到昏。
仍设 cwnd = 1 MSS、ssthresh = 8 MSS 起步。这次:第 6 轮发送结束时(cwnd=10)先收到 3 个冗余 ACK;恢复后第 9 轮发送结束时(cwnd=8)发生超时。(1) 推演第 1~13 轮 cwnd 变化表;(2) 前 13 轮共发送多少个报文段?
查看解答
(1) 事件一(3ACK,cwnd=10):ssthresh \(=10\div2=5\),cwnd=5,直接拥塞避免;事件二(超时,cwnd=8):ssthresh \(=8\div2=4\),cwnd=1,重新慢启动。
| 轮次 | 本轮发送(MSS) | 轮末 cwnd | 阶段 / 事件 |
|---|---|---|---|
| 1~3 | 1、2、4 | 2、4、8 | 慢启动;第 3 轮末达 8 |
| 4~6 | 8、9、10 | 9、10、5 | 拥塞避免;第 6 轮末 3 冗余 ACK:ssthresh=5,cwnd=5 |
| 7~9 | 5、6、7 | 6、7、1 | 快恢复后拥塞避免;第 9 轮末超时:ssthresh=4,cwnd=1 |
| 10~12 | 1、2、4 | 2、4、5 | 慢启动;第 12 轮初 cwnd=4 达 ssthresh,轮末只 +1 |
| 13 | 5 | 6 | 拥塞避免(+1) |
(2) 分段求和:
\[ (1+2+4+8)+(9+10)+(5+6+7)+(1+2+4+5)=15+19+18+12=64\ \text{个报文段} \]
验算:15+19=34,34+18=52,52+12=64 ✓。
易错:第 12 轮开始时 cwnd 已等于 ssthresh=4,本轮发送 4 个后是「到达门限后的第一轮」,按拥塞避免只加 1 得 5——不要错翻倍成 8。
② 慢启动翻倍若会「越过」新 ssthresh(如 4 翻到 8 越过 5),通用处理是增长到 ssthresh 即止、转入拥塞避免,命题一般回避这种设计(门限设成 4、8、16 等恰好可达的值);
③ 快恢复后 cwnd=新 ssthresh,不是旧 ssthresh,更不是 cwnd/2 再 +1。
5.7 章末自测 真题风格
限时 50 分钟,先做后看答案。难度:★★ 基础 / ★★★ 强化 / ★★★★ 冲刺。自检标准:12 题对 10 题以上;自测 11、12 两道大题必须全对——三次握手序号推演与拥塞窗口增长表是本章在真题里的大题原型,错一道回看 5.3.3 与 5.6.2。
关于网络层与传输层提供的逻辑通信,正确的是( )
A. 网络层提供进程到进程的通信 B. 传输层提供主机到主机的通信
C. 传输层提供应用进程之间的端到端通信 D. 路由器参与传输层的端到端通信
查看答案
C。网络层是主机到主机,传输层是进程到进程(端到端);路由器只实现下三层,不参与传输层通信。
下列协议与其默认(熟知)端口号的对应关系中,错误的是( )
A. FTP 控制连接——21 B. SMTP——25 C. DNS——53 D. Telnet——25
查看答案
D。Telnet 是 23,25 是 SMTP。顺带复习:FTP 数据 20 / 控制 21、SSH 22、TFTP 69、HTTP 80、POP3 110、SNMP 161、HTTPS 443。
下列关于 UDP 的叙述中,错误的是( )
A. UDP 面向报文,对应用层交下的报文既不合并也不拆分
B. UDP 支持一对一、一对多、多对一和多对多通信
C. UDP 首部共 8 B,校验和字段可置 0 表示不校验
D. UDP 校验出错时接收方向发送方请求重传
查看答案
D。UDP 无重传机制:校验出错直接丢弃(可选地上报应用层)。C 正确——校验和是可选的,全 0 表示不校验。
关于 TCP 报文段首部,下列叙述错误的是( )
A. 序号字段指本报文段数据部分的第一个字节的序号
B. 窗口字段通知对方自己的接收窗口大小
C. 校验和字段仅校验 TCP 首部
D. FIN=1 的报文段即使不携带数据也消耗一个序号
查看答案
C。TCP 校验和覆盖整个报文段(首部+数据),且要加上伪首部(协议号 6)一起算。B 易混:窗口是「我能收」的 rwnd,不是发送窗口。
TCP 采用三次握手建立连接的原因,不包括( )
A. 防止已失效的连接请求报文段又传送到服务器而建立无效连接、浪费资源
B. 让双方都确认彼此的收发能力正常
C. 同步双方的初始序号
D. 为协商 MSS 与窗口扩大因子预留传输轮次
查看答案
D。MSS 等选项在第二次握手(SYN+ACK)中即可捎带协商,无需专门一轮;A、B、C 是「为什么不能两次握手」的标准三点。
主动关闭方在发送最后一个 ACK 后要等待 2MSL,下列不属于其目的的是( )
A. 保证最后的 ACK 若丢失可响应对方重传的 FIN,使对方正常关闭
B. 让本连接产生的所有报文段从网络中消失,避免影响新连接
C. 等待本方向尚未发送完的数据发完 D. 给网络足够时间清除迟到的旧报文段
查看答案
C。能发 FIN 说明本方数据早已发完(FIN 在数据之后);2MSL 的两个理由是 A 与 B(B、D 同义)。另外记住:MSL = 最长报文段寿命,2MSL = 往返。
TCP 发送方连续收到 3 个重复(冗余)的 ACK 后的正确动作是( )
A. 将 ssthresh 减半、cwnd 置 1,重新慢启动
B. 立即重传丢失的报文段;ssthresh 减半,cwnd = 新 ssthresh,进入拥塞避免
C. 忽略冗余 ACK,等待重传定时器超时
D. 将 cwnd 减半并继续按原窗口发送
查看答案
B。快重传 + 快恢复:立即重传+门限减半+cwnd = 新 ssthresh。A 是「超时」的处置;3 冗余 ACK 说明只是轻度拥塞,不回 1。
主机甲的拥塞窗口为 24 KB,接收方乙通告的接收窗口为 16 KB,则甲的实际发送窗口为( )
A. 24 KB B. 16 KB C. 20 KB D. 40 KB
查看答案
B。发送窗口 \(=\min(\text{rwnd},\text{cwnd})=\min(16,24)=16\) KB。C 是「取平均」陷阱,D 是「取和」陷阱。
TCP 连接中发送速率 \(8\,\text{Mb/s}\),MSS \(=1000\,\text{B}\),发送窗口固定 \(6000\,\text{B}\),RTT \(=23\,\text{ms}\),忽略确认发送时延与处理时延,则信道利用率约为( )
A. 20% B. 25% C. 30% D. 100%
查看答案
B。单段发送时延 \(T_L=1000\times8/8\times10^{6}=1\) ms;周期 \(=1+23=24\) ms;窗口 6 段连续发 6 ms,\(U=6/24=25\%\)。若误写周期为 23 ms(漏加单段发送时延)会得约 26%,选不出精确项。
某 UDP 用户数据报的数据部分为 100 B,则其校验和的计算范围共覆盖( )
A. 108 B B. 120 B C. 100 B D. 112 B
查看答案
B。覆盖 = 伪首部 12 + UDP 首部 8 + 数据 100 = 120 B。A 少了伪首部,C 只有数据,D 是把伪首部记成 4 B 的错法。
主机甲(客户)与主机乙(服务器)建立 TCP 连接:甲选择的初始序号 \(x=2000\),乙选择的初始序号 \(y=7000\)。(1) 逐步写出三次握手中每个报文段的首部关键信息(SYN / ACK 置位、seq、ack);(2) 第三次握手报文段捎带 100 B 数据,写出该段 seq 与数据序号范围,以及乙对它的确认号;(3) 随后乙发送第一个 400 B 的数据报文段,写出其 seq 与甲的确认号;(4) 用一句话回答:若改用两次握手会出什么问题?
查看解答
(1) ① 甲→乙:SYN=1, seq=2000;② 乙→甲:SYN=1, ACK=1, seq=7000, ack=2001;③ 甲→乙:ACK=1, seq=2001, ack=7001。
(2) 甲的 SYN 消耗序号 2000,数据从 2001 起:seq=2001,数据序号 2001~2100;乙的确认号 ack = 2101(= 2100 + 1)。
(3) 乙的 SYN 消耗序号 7000,乙数据从 7001 起:seq=7001,字节 7001~7400;甲的确认号 ack = 7401。
(4) 一个失效的连接请求迟到后,服务器发出确认即单方面建立连接并空等,浪费资源(还要重复释放)。
验算:③的 ack=7001 = 乙数据起始序号 ✓;(2) 的 ack=2101 = 甲下一个数据段的 seq ✓——「ack 永远指向对方的下一个字节」贯穿全题。
拥塞窗口 cwnd 初始为 1 MSS,ssthresh 初始为 4 MSS。第 7 轮发送结束时(cwnd=8)发生超时;第 12 轮发送结束时(cwnd=6)连续收到 3 个冗余 ACK。(1) 推演第 1~13 轮的 cwnd 变化表(本轮发送 MSS 数、轮末 cwnd、阶段);(2) 前 12 轮共发送多少个报文段?(3) 第 13 轮结束时的 cwnd 与 ssthresh 各是多少?
查看解答
(1) 超时(cwnd=8):ssthresh \(=8\div2=4\),cwnd=1;3 冗余 ACK(cwnd=6):ssthresh \(=6\div2=3\),cwnd=3。
| 轮次 | 本轮发送(MSS) | 轮末 cwnd | 阶段 / 事件 |
|---|---|---|---|
| 1~2 | 1、2 | 2、4 | 慢启动;第 2 轮末达 ssthresh=4 |
| 3~7 | 4、5、6、7、8 | 5、6、7、8、1 | 拥塞避免;第 7 轮末超时:ssthresh=4,cwnd=1 |
| 8~9 | 1、2 | 2、4 | 慢启动;第 9 轮末达 ssthresh=4 |
| 10~12 | 4、5、6 | 5、6、3 | 拥塞避免;第 12 轮末 3 冗余 ACK:ssthresh=3,cwnd=3 |
| 13 | 3 | 4 | 快恢复后就地拥塞避免(+1) |
(2) 分段求和:
\[ (1+2+4+5+6+7+8)+(1+2+4+5+6)=33+18=51\ \text{个报文段} \]
(3) 第 13 轮按 cwnd=3 发送、线性 +1,轮末 cwnd=4,ssthresh=3。
验算:轮 3~7 从 4 到 8 共 5 项和 30,加轮 1~2 的 3 得 33 ✓;轮 8~12 和 18 ✓;总数 51 ✓。
5.8 本章考点总结
| 考点 | 常考题型 | 热度 | 核心方法 / 一句话结论 |
|---|---|---|---|
| 传输层功能与复用分用 | 选择 | ★★★★ | 网络层主机到主机,传输层进程到进程(端到端);发送多进程共用传输层为复用,接收按目的端口分用 |
| 端口号与套接字 | 选择 | ★★★★ | 熟知 0~1023 / 登记 1024~49151 / 短暂 49152~65535;背熟 FTP 20/21、SSH 22、Telnet 23、SMTP 25、DNS 53、HTTP 80、HTTPS 443、POP3 110、SNMP 161;套接字 = IP : 端口,TCP 连接由四元组唯一确定 |
| UDP | 选择 / 计算 | ★★★★ | 无连接、尽最大努力、面向报文、支持一对多、首部 8 B;校验覆盖伪首部 12 B+UDP 报(奇数补 0 只算不传);适合 DNS / RIP / DHCP / 流媒体 |
| TCP 特点与首部 | 选择 | ★★★★ | 面向连接、一对一、可靠、全双工、面向字节流;首部 20~60 B(数据偏移单位 4 B);六控制位 URG/ACK/PSH/RST/SYN/FIN;窗口字段是自己的 rwnd |
| 序号与确认号 | 选择 / 计算 | ★★★★★ | seq = 本段数据第一字节序号,ack = 期望的下一字节序号(累计确认);SYN、FIN 各耗一个序号;ack = 对方下一 seq |
| 三次握手 / 四次挥手 | 选择 / 大题 | ★★★★★ | 握手 SYN, seq=x → SYN+ACK, seq=y, ack=x+1 → ACK, seq=x+1, ack=y+1;两次握手防失效连接请求;挥手 ACK 与 FIN 分开(全双工);TIME_WAIT 2MSL:保 ACK 到达+旧报文消失 |
| 重传机制 | 选择 | ★★★★ | RTO 自适应 \(=\text{RTT}s+4\text{RTT}_d\);快重传:3 个冗余 ACK 立即重传;SACK 补累计确认之短 |
| 滑动窗口与吞吐 / 利用率 | 计算 / 大题 | ★★★★★ | 发送窗口 \(=\min(\text{rwnd},\text{cwnd})\);\(T_L=\text{MSS}\times8/R\),周期 \(=T_L+\text{RTT}\);吞吐率 = 窗口字节 ÷ 周期,\(U=\) 发送时间 ÷ 周期,窗口够大时 U→100% |
| 流量控制 | 选择 / 计算 | ★★★ | rwnd = 缓存总量 − 占用;rwnd=0 停发并启动坚持定时器,发 1 B 探测报文防死锁;流量控制点对点,拥塞控制全局 |
| 拥塞控制四算法 | 大题 / 选择 | ★★★★★ | 慢启动每轮×2 至 ssthresh,拥塞避免每轮 +1;超时:ssthresh=cwnd/2(下限 2),cwnd=1;3 冗余 ACK:ssthresh=cwnd/2,cwnd=新 ssthresh;推演表分段求和 |