3. 重传
## 3. 重传
有两种事件会导致 TCP 对报文段进行重传:超时和冗余 ACK。
### (1)超时
TCP 每发送一个报文段,就会对该报文段设置一个超时计时器。当计时器到期仍未收到确认时,TCP 将重传该报文段。
由于 TCP 下层是互联网环境,IP 数据报所选的路由变化很大,因此传输层的往返时延波动也较大。为了计算超时计时器的重传时间,TCP 采用一种自适应算法。它记录报文段发出的时间及收到相应确认的时间,两者之差称为报文段的往返时间(Round-Trip Time,RTT)。TCP 维护了一个加权平均往返时间 RTTS,并根据新测量的 RTT 样本值动态调整 RTTS。显然,超时计时器设置的超时重传时间(Retransmission Time-Out,RTO)应略大于 RTTS,但也不能大太多,否则当报文段丢失时,TCP 无法迅速重传,导致数据传输延迟增大。
### (2)冗余 ACK(冗余确认)
超时触发重传的一个问题是超时周期往往太长。幸运的是,发送方通常可以在超时发生之前,通过注意所谓的冗余 ACK 来较好地检测丢包情况。冗余 ACK 是再次确认某个报文段的 ACK,而发送方先前已收到过该报文段的确认。例如,发送方 A 发送了编号为 1、2、3、4、5 的 TCP 报文段,其中 2 号报文段在链路中丢失,未能到达接收方 B。因此,3、4、5 号报文段对于 B 来说成为失序报文段。TCP 规定,每当比期望序号大的失序报文段到达时,立即发送一个冗余 ACK,指明下一个期待字节的序号。在本例中,3、4、5 号报文段到达 B,但它们不是 B 期望收到的下一个报文段,于是 B 立即发送 3 个对 1 号报文段的冗余 ACK,表示自己期望接收 2 号报文段。
TCP 规定,当发送方收到对同一个报文段的 3 个冗余 ACK 时,可以认为紧跟在这个被确认报文段之后的报文段已丢失。就前面的例子而言,当 A 收到对 1 号报文段的 3 个冗余 ACK 时,它可
<!-- page: 254 -->
2027年计算机网络考研复习指导
以判断2号报文段已经丢失,并立即对2号报文段执行重传,这种技术称为快速重传。当然,冗余ACK也被用于拥塞控制,相关内容将在后续章节讨论。
## 注意
在上述示例中,对1号报文段的正常确认不能称为冗余ACK,只有在收到失序的3、4、5号报文段后,发回的确认才被称为冗余ACK。也就是说,触发快重传时,发送方共收到4个对1号报文段的确认。
## 5.3.5 TCP流量控制
流量控制的功能是确保发送方的发送速率不会过快,以便让接收方能够及时处理。因此,可以说流量控制是一种速度匹配服务,它匹配发送方的发送速率与接收方的读取速率。
TCP利用滑动窗口机制来实现流量控制。滑动窗口的基本原理已在第3章介绍过,这里重点讨论TCP如何使用窗口机制进行流量控制。TCP要求接收方维持一个接收窗口(rwnd),该窗口大小根据当前接收缓存的大小动态调整,反映了接收方的容量。接收方将此窗口值写入TCP首部的“窗口”字段,以通知发送方。发送方的发送窗口不能超过接收方给出的接收窗口值,从而限制发送方向网络注入报文的速率。
**考虑速度** 基于滑动窗口的流量控制机制(2016、2021)
图5.9说明了如何利用滑动窗口进行流量控制。假设数据仅从A发往B,而B仅向A发送确认报文段,则B可通过设置确认报文段首部中的窗口字段来通知A当前的rwnd值。rwnd表示接收方允许连续接收的最大字节数。发送方A总是根据最新收到的rwnd值来限制自己发送窗口的大小,从而将未确认的数据量控制在rwnd大小之内,确保A不会使B的接收缓存溢出。
假设在连接建立时,B告诉A:“我的接收窗口 $r \times \mathrm{n} = 400$ ”。我们注意到,接收方B进行了三次流量控制,这三个报文段都设置了 $\mathbf{A}\mathbf{C}\mathbf{K} = 1$,只有当 $\mathrm{ACK} = 1$ 时,确认序号字段才有意义。第一次将窗口减至 $r \times \mathrm{n} = 300$,第二次减至 $r \times \mathrm{n} = 100$,最后减至 $r \times \mathrm{n} = 0$,即不允许发送方再发送数据。这使得发送方暂停发送的状态将持续到B重新发出一个新的窗口值为止。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图5.9 利用滑动窗口进行流量控制
假设B向A发送了零窗口通知后不久,B的接收缓存又有了一些存储空间,于是B向A发送非零窗口通知,然而这个报文段在传输过程中丢失了。若不采取其他措施,则B和A会陷入相互等待的死锁状态。为此,TCP为每个连接设有一个持续计时器。只要发送方收到对方的零窗口
<!-- page: 255 -->
第5章 传输层
243
通知,就启动持续计时器。若计时器超时,则发送方发送一个零窗口探测报文段,而对方会在确认该探测报文段时给出当前的窗口值。若窗口仍然是零,则发送方收到确认报文段后重新设置持续计时器;若窗口不是零,则死锁状态就可以打破了。
传输层和数据链路层的流量控制的区别是:传输层实现的是端到端,即两个进程之间的流量控制;数据链路层实现的是相邻节点之间的流量控制。此外,数据链路层的滑动窗口协议的窗口大小一般为固定值,而传输层的窗口大小可以根据接收方的缓存情况动态变化。
## 5.3.6 TCP 拥塞控制
拥塞控制是指防止过多的数据注入网络,以保证网络中的路由器或链路不致过载。出现拥塞时,通信端点通常无法直接获知拥塞的具体细节,只能通过表现(如时延增加)间接感知。
拥塞控制与流量控制的区别:拥塞控制的目标是使网络能够承受当前的负载,是一个全局性过程,涉及所有主机、路由器及影响网络性能的各种因素。而流量控制则关注点对点通信中接收方的处理能力,是一个端到端的问题,由接收方通过窗口机制抑制发送方的发送速率,以确保自身能及时接收数据。尽管二者目标不同,但都是通过调节发送方的发送速率来实现控制效果的。
例如,某链路的传输速率为 $10\mathrm{Gb / s}$,当一台大型机以 $1\mathrm{Gb / s}$ 的速率向一台PC传送文件时,显然网络带宽充足,不存在拥塞问题;但由于PC的处理能力有限,可能来不及接收如此高速的数据流,因此必须进行流量控制。反之,若有100万台PC同时以 $1\mathrm{Mb / s}$ 的速率通过该链路传输文件,则问题就转变为网络总负载是否超出了其承载能力,这时需要依赖拥塞控制。
TCP 采用四种算法进行拥塞控制:慢开始、拥塞避免、快重传和快恢复。
发送方在确定数据的发送速率时,既要考虑接收方的接收能力,也要从全局角度避免引发网络拥塞。因此,除了上节介绍的接收窗口,TCP 还要求发送方维护一个拥塞窗口(cwnd),其大小取决于当前网络的拥塞状况,并动态调整。其控制原则是:
- 若网络未出现拥塞,则适当增大 cwnd,以便把更多分组发送出去,提高网络利用率。
- 若检测到网络拥塞,则适当减少 cwnd,以减少注入网络的分组数量,缓解网络拥塞。
通常,只要发送方未按时收到确认(发生了超时),即可认为网络出现了拥塞。
**等级指标** ▷ TCP 的滑动窗口机制(2010、2014-2016、2025)
发送窗口的上限值应取接收窗口(rwnd)和拥塞窗口(cwnd)中较小的一个,即
$$
\text{发送窗口的上限值} = \min [\mathrm{rwnd}, \mathrm{cwnd}]
$$
接收窗口的大小可通过 TCP 首部中的“窗口”字段由接收方通知发送方。那么,发送方如何维护拥塞窗口呢?这正是下面要介绍的慢开始和拥塞避免算法所解决的问题。为便于分析,这里假设:数据仅单向传输,接收方只发送确认报文;接收方拥有足够大的缓存空间,因此发送窗口的大小仅受拥塞窗口的限制;并且以最大报文段长度 MSS 作为拥塞窗口大小的单位。
## 1. 慢开始和拥塞避免
### (1)慢开始算法
慢开始的基本思想:在连接刚建立时,发送方并不了解网络的负载情况,若立即向网络注入大量数据,可能会引发拥塞。因此,应先发送少量数据进行试探;若未发生拥塞,则逐步增大发送量,即从小到大逐渐增大拥塞窗口。
**等级指标** ▷ 慢开始算法的原理(2014、2015、2025)
初始拥塞窗口 cwnd 通常设为 1MSS(最新的 RFC 允许设置更多 MSS),慢开始算法规定:每收到一个对新报文段的确认,就将 cwnd 加 1。这样,每经过一个传输轮次(一个往返时延 RTT),
<!-- page: 256 -->
2027年计算机网络考研复习指导
cwnd 就会加倍,从而随传输轮次呈指数增长。请注意:慢开始的“慢”并非指增长速度慢,而是指从较小的 cwnd(如 1)开始,谨慎试探网络状态,从而有效预防拥塞。例如,A 向 B 发送数据,初始 cwnd = 1,A 发送第 1 个报文段;收到确认后,cwnd 增至 2,接着发送 2 个报文段;收到这 2 个确认后,cwnd 增至 4,下一轮便可发送 4 个报文段,依此类推。
为防止 cwnd 无限制增长,还需设置一个慢开始门限 ssthresh(阈值)。当 cwnd 增长至 ssthresh 时,停止慢开始算法,转而采用拥塞避免算法。
## (2) 拥塞避免算法
**考点备注** $\triangleright$ 拥塞避免算法的原理(2009、2017、2020、2022、2023)
拥塞避免的目标是让 cwnd 缓慢增长,以降低拥塞风险。其策略是:每经过一个传输轮次(收到本轮所有报文段的确认),就将 cwnd 加 1,而不是加倍,从而使 cwnd 按线性规律缓慢增长(加法增大),防止网络过早出现拥塞。这种增长速率比慢开始阶段要慢得多。
两种算法的切换规则如下:
- 当 cwnd < ssthresh 时,使用慢开始算法。
- 当 cwnd > ssthresh 时,使用拥塞避免算法。
- 当 cwnd = ssthresh 时,既可使用慢开始算法,又可使用拥塞避免算法(常规做法)。
## (3)网络拥塞的处理
无论处于慢开始阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞(如发生超时),就执行以下操作:① 将慢开始门限 ssthresh 调整为当前 cwnd 的一半(但不得小于 2);② 将 cwnd 重置为 1;③ 重新执行慢开始算法。这样做的目的是迅速减少注入网络的分组数量,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完。
**考点备注** TCP 拥塞控制与传输效率分析(2016、2023)
慢开始和拥塞避免算法的实现过程如图 5.10 所示。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图 5.10 慢开始和拥塞避免算法的实现过程
- 初始时,拥塞窗口设为 1,即 cwnd = 1;慢开始门限设为 16,即 ssthresh = 16。
**考点备注** TCP 拥塞窗口演化分析(2016、2023)
- 在慢开始阶段,发送方每收到一个对新报文段的确认,就将 cwnd 加 1。当 cwnd 增长到 ssthresh(cwnd = 16)时,停止慢开始算法,转而采用拥塞避免算法。
- 当 cwnd = 24 时,若网络出现拥塞,则将 ssthresh 调整为当前 cwnd 的一半(12),同时将 cwnd 重置为 1,并重新执行慢开始算法;此后,当 cwnd 再次增长到 12 时,改为执行拥塞避免算法。
<!-- page: 257 -->
第5章 传输层
245
# 注意
在慢开始阶段,若 $2\mathrm{cwnd} > \mathrm{ssthresh}$,则下一个传输轮次后的 $\mathrm{cwnd}$ 应等于 $\mathrm{ssthresh}$,而不是 $2\mathrm{cwnd}$。例如,第16个轮次时 $\mathrm{cwnd} = 8$,$\mathrm{ssthresh} = 12$,则第17个轮次后 $\mathrm{cwnd} = 12$,而不是16。
在慢开始和拥塞避免算法中采用了“乘法减小”策略:当网络发生超时(通常意味着很可能出现了拥塞),将慢开始门限ssthresh调整为当前cwnd的一半,并重新进入慢开始阶段。如果网络频繁发生拥塞,ssthresh会下降得很快,从而大幅减少注入网络的分组数量。
拥塞避免并不能完全避免拥塞。事实上,依靠上述机制彻底避免拥塞是不可能的。所谓拥塞避免,是指在该阶段将拥塞窗口按线性规律增长,从而使网络较不容易发生拥塞。
## 2. 快重传和快恢复
有时,个别报文段因偶然原因丢失,但网络并未真正拥塞。若发送方等待超时才重传,则会误判为拥塞并启动慢开始算法,导致传输效率下降。为此,TCP引入了快重传和快恢复机制。
### (1)快重传
**考虑现在** ▶ 快重传算法的原理(2019)
快重传算法的核心是让发送方在超时前尽早重传丢失的报文段。为此,接收方不应等到有数据要发送时才捎带确认,而应在收到报文段后立即确认;特别是收到失序报文段时,要立即对最后一个按序到达的报文段发送重复确认(冗余ACK)。发送方连续收到3个相同的冗余ACK时,即可判定对应报文段已丢失,并立即重传,而无须等待超时计时器到期。
### (2)快恢复
快恢复算法的思路:当发送方连续收到3个冗余ACK时,表明后续多个报文段已成功抵达接收方,说明网络很可能并未发生严重拥塞。此时,发送方执行“乘法减小”策略,将ssthresh调整为当前cwnd的一半,以预防潜在的拥塞。与慢开始算法的不同之处是:它不将cwnd重置为1,而是将cwnd也调整为当前cwnd的一半(等于ssthresh),然后直接进入拥塞避免阶段,使cwnd缓慢线性增长。由于跳过了从 $\mathrm{cwnd} = 1$ 开始的慢开始过程,因此称为快恢复。
TCP拥塞控制算法的实现过程如图5.11所示,其中前20个轮次与图5.10中的相同。在第21轮次( $\mathrm{cwnd} = 16$ ),发送方连续收到3个冗余ACK,此时不启动慢开始算法,而执行快恢复算法:设置 $\mathrm{ssthresh} = \mathrm{cwnd}/2 = 8$ , $\mathrm{cwnd} = \mathrm{ssthresh} = 8$ ,并开始执行拥塞避免算法。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图5.11 TCP拥塞控制算法的实现过程
TCP拥塞控制可归纳为图5.12所示的流程图。四种算法的使用总结:当TCP连接建立或网络出现超时现象时,采用慢开始和拥塞避免算法( $\mathrm{ssthresh} = \mathrm{cwnd} / 2$ , $\mathrm{cwnd} = 1$ );当发送方收到3个冗余ACK时,采用快重传和快恢复算法( $\mathrm{ssthresh} = \mathrm{cwnd} / 2$ , $\mathrm{cwnd} = \mathrm{ssthresh}$ )。
<!-- page: 258 -->
2027年计算机网络考研复习指导
在流量控制中,发送方发送数据的量由接收方通过接收窗口(rwnd)决定;而在拥塞控制中,发送方则根据网络反馈自主调整拥塞窗口(cwnd)。接收方的缓存空间总是有限的。因此,发送方实际的发送窗口大小由流量控制和拥塞控制共同决定。当题目中同时出现接收窗口(rwnd)和拥塞窗口(cwnd)时,发送窗口的上限值应取两者中的较小者,即min[rwnd, cwnd]。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图5.12 TCP拥塞控制的流程图
## 5.3.7 本节习题精选
### 一、单项选择题
01. 下列关于传输层协议的面向连接服务的描述中,错误的是()。
A. 面向连接的服务需要经历3个阶段:连接建立、数据传输及连接释放
B. 当链路不发生错误时,面向连接的服务可以保证数据到达的顺序是正确的
C. 面向连接的服务有很高的效率和时间性能
D. 面向连接的服务提供了一个可靠的数据流
02. TCP规定HTTP()进程的端口号为80。
A. 客户
B. 解析
C. 服务器
D. 主机
03. 下列关于TCP的端口的叙述中,错误的是()。
A. 客户端使用的端口号是动态规定的
B. 端口号长度为16位
C. 端口号用于在通信中识别进程
D. 局域网内的计算机不能使用相同端口号
04. 下列几种描述中,()不是TCP服务的特点。
A. 字节流
B. 全双工
C. 可靠
D. 支持广播
05. 下列几种描述中,()不是TCP的特性。
A. 比 UDP 开销大
B. 强制重传错误分组
C. 在TCP首部中有目标主机IP地址
D. 把消息分成段并在目标主机中进行重组
06. 下列几种字段中,包含在TCP首部中而不包含在UDP首部中的是()。
A. 目的端口号
B. 序号
C. 检验和
D. 目的 IP 地址
07. 下列关于TCP报头格式的描述中,错误的是()。
A. 报头长度为 $20 \sim 60 \mathrm{~B}$,其中固定部分为 $20 \mathrm{~B}$
B. 端口号字段依次表示源端口号与目的端口号
C. 报头长度总是 4 的倍数个字节
<!-- page: 259 -->
第5章 传输层
247
D. TCP 检验和伪首部中 IP 分组头的协议字段为 17
08. 当 TCP 报文段标志字段中的( )为 1 时,表示必须释放连接,然后重新建立连接。
A. URG
B. RST
C. ACK
D. FIN
09. TCP 报文段首部中窗口字段的值的含义是( )。
A. 指明自己的拥塞窗口的尺寸
B. 指明对方的发送窗口的尺寸
C. 指明自己的接收窗口的尺寸
D. 指明对方的拥塞窗口的尺寸
10. 在采用 TCP 连接的数据传输阶段,若发送端的发送窗口值由 1000 变为 2000,则发送端在收到一个确认之前可以发送( )。
A. 2000 个 TCP 报文段
B. 2000B
C. 1000B
D. 1000 个 TCP 报文段
11. A 和 B 建立了 TCP 连接,当 A 收到确认序号为 100 的确认报文段时,表示( )。
A. 报文段 99 已收到
B. 报文段 100 已收到
C. 末字节序号为 99 的报文段已收到
D. 末字节序号为 100 的报文段已收到
12. 当 TCP 在传送大量数据时,是以( )的大小将数据进行分割发送的,进行重发时间样也是以此为单位的。
A. MSS
B. 字节
C. 比特
D. MTU
13. 在 TCP 中,发送方的窗口大小取决于( )。
A. 仅接收方允许的窗口
B. 接收方允许的窗口和发送方允许的窗口
C. 接收方允许的窗口和拥塞窗口
D. 发送方允许的窗口和拥塞窗口
14. TCP 利用滑动窗口来实现流量控制,只要发送方收到对方的零窗口通知,就启动( )计时器。若计时器超时,则发送一个零窗口探测报文段,以试图获得对方的窗口值。
A. 重传
B. 保洁
C. 时间等待
D. 持续
15. TCP 在 40Gb/s 的线路上传送数据,若 TCP 充分利用了线路的带宽,则经过( )后,TCP 会发生序号绕回(使用了之前用过的字节序号,已知 $2^{32}/5 \times 10^{9} = 0.859$ )。
A. $859\mathrm{ms}$
B. $85.9\mathrm{ms}$
C. $8.59\mathrm{ms}$
D. $0.859\mathrm{ms}$
16. 下列关于 TCP 窗口与拥塞控制概念的描述中,错误的是( )。
A. 接收窗口(rwnd)通过 TCP 首部中的窗口字段通知数据的发送方
B. 发送窗口确定的依据是:发送窗口 = min[接收端窗口,拥塞窗口]
C. 拥塞窗口是接收端根据网络拥塞情况确定的窗口值
D. 拥塞窗口大小在开始时可以按指数规律增长
17. 下列关于 TCP 工作原理与过程的描述中,错误的是( )。
A. TCP 连接建立过程需要经过“三次握手”的过程
B. TCP 传输连接建立后,客户端与服务器端的应用进程进行全双工的字节流传输
C. TCP 传输连接的释放过程很复杂,只有客户端可以主动提出释放连接的请求
D. TCP 连接的释放需要经过“四次挥手”的过程
18. TCP 使用三次握手协议来建立连接,设 A、B 双方发送报文的初始序号分别为 X 和 Y,A 发送(①)的报文给 B,B 接收到报文后发送(②)的报文给 A,然后 A 发送一个确
<!-- page: 260 -->
2027年计算机网络考研复习指导
认报文给 B 便建立了连接(注意,ACK 的下标为捎带的序号)。
① A. SYN=1,序号=X
B. SYN=1,序号=X+1,ACKₓ=1
C. SYN=1,序号=Y
D. SYN=1,序号=Y,ACKY+1=1
② A. SYN=1,序号=X+1
B. SYN=1,序号=X+1,ACKₓ=1
C. SYN=1,序号=Y,ACKₓ+1=1
D. SYN=1,序号=Y,ACKY+1=1
19. TCP “三次握手”过程中,第二次“握手”时,发送的报文段中()标志位被置为 1。
A. SYN
B. ACK
C. ACK 和 RST
D. SYN 和 ACK
20. TCP 采用三报文握手建立连接,其中第三个报文是()。
A. TCP 连接请求
B. 对 TCP 连接请求的确认
C. 对 TCP 连接请求确认的确认
D. TCP 普通数据
21. 主机 A 和 B 之间建立了一个 TCP 连接,A 向 B 发送的第一个 SYN 报文段中的序号值(seq)等于 211,数据传输结束在释放连接时,A 向 B 发送的第 4 次挥手报文段的 seq 等于 985,则在本次通信过程中,A 向 B 总共发送了()字节的数据。
A. 771
B. 772
C. 773
D. 774
22. A 和 B 之间建立了 TCP 连接,A 向 B 发送了一个报文段,其中序号字段 seq=200,确认序号字段 ack=201,数据部分有 2B,那么在 B 对该报文的确认报文段中()。
A. seq=202,ack=200
B. seq=201,ack=201
C. seq=201,ack=202
D. seq=202,ack=201
23. TCP 的通信双方,有一方发送了带有 FIN 标志的数据段后,表示()。
A. 将断开通信双方的 TCP 连接
B. 单方面释放连接,表示本方已经无数据发送,但可以接收对方的数据
C. 中止数据发送,双方都不能发送数据
D. 连接被重新建立
24. 某客户与服务器建立 TCP 连接,当连接断开时,客户先向服务器发送一个标志 FIN=1 的报文段 A,此报文段中 seq 值为 x,ack 值为 y。一段时间后,客户收到了服务器发来的一个标志 FIN=1 的报文段 B,则下列关于报文段 B 的说法中,正确的是()。
A. B 中的 seq 值一定为 y
B. B 中的 seq 值一定为 y+1
C. B 中的 ack 值一定为 x
D. B 中的 ack 值一定为 x+1
25. 某应用程序每秒产生一个 60B 的数据块,每个数据块被封装在一个 TCP 报文中,然后封装在一个 IP 数据报中,则最后每个数据报所包含的应用数据所占的百分比是()。(注意:TCP 报文和 IP 数据报文的首部没有附加字段。)
A. 20%
B. 40%
C. 60%
D. 80%
26. 假设 TCP 客户与 TCP 服务器的通信已结束,端到端的往返时间为 RTT。t 时刻 TCP 客户请求断开连接,则从 t 时刻起 TCP 服务器释放该连接的最短时间是()。
A. 0.5RTT
B. 1RTT
C. 1.5RTT
D. 2RTT
27. 甲发起与乙的 TCP 连接,甲选择的初始序号为 200,若甲和乙建立连接过程中最后一个报文段不捐带数据,则 TCP 连接建立后,甲给乙发送的数据报文段的序号为()。
A. 203
B. 202
C. 201
D. 200
28. A 发起与 B 的 TCP 连接,A 选择的初始序号为 1666,连接建立过程中未发送任何数据,TCP 连接建立后,A 给 B 发送了 1000B 数据,B 正确接收后发送给 A 的确认序号是()。
<!-- page: 261 -->
第5章 传输层
249
A. 1667
B. 2666
C. 2667
D. 2668
29. 一个 TCP 连接的数据传输阶段,若发送端的发送窗口值由 2000 变为 3000,则意味着发送端可以( )。
A. 在收到一个确认之前可以发送 3000 个 TCP 很文段
B. 在收到一个确认之前可以发送 1000B
C. 在收到一个确认之前可以发送 3000B
D. 在收到一个确认之前可以发送 2000 个 TCP 很文段
30. 甲和乙建立了 TCP 连接,甲向乙发送了 3 个连续的 TCP 段,分别包含 200B、300B、400B 的有效载荷,第 3 个段的序号为 1000。若乙仅正确接收到第 1 个和第 3 个段,则乙发送给甲的确认序号是( )。
A. 500
B. 600
C. 700
D. 800
31. 在一个 TCP 连接中,MSS 为 1KB,当拥塞窗口为 34KB 时发生了超时事件。若在接下来的 4RTT 内报文段传输都是成功的,则当这些报文段均得到确认后,拥塞窗口的大小是( )。
A. 8KB
B. 9KB
C. 16KB
D. 17KB
32. 若甲向乙发起了一条 TCP 连接,最大段长为 1KB,乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段,若甲在 $t$ 时刻发生超时,此时拥塞窗口为 16KB。则从 $t$ 时刻起,在不再发生超时的情况下,经过 10RTT 后,甲的发送窗口的大小为( )。
A. 10KB
B. 12KB
C. 14KB
D. 15KB
33. 设 TCP 的拥塞窗口的慢开始门限值初始为 8(单位为报文段),当拥塞窗口上升到 12 时发生超时,TCP 开始慢开始和拥塞避免,则第 13 次传输时拥塞窗口的大小为( )。
A. 4
B. 6
C. 7
D. 8
34. 甲和乙刚建立 TCP 连接,并约定最大段长为 2KB,假设乙总是及时清空缓存,保证接收窗口始终为 20KB,ssthresh 为 16KB,若双向传输时间为 10ms,发送时延忽略不计,且没有发生拥塞的情况,则经过( ),甲的发送窗口第一次达到 20KB。
A. 40ms
B. 50ms
C. 60ms
D. 70ms
35. 假设一个 TCP 连接的传输过程在慢开始阶段,在 $t$ RTT 时刻到 $(t + 1)$ RTT 时刻之间发送了 $k$ 个数据段,假设仍然保持在慢开始阶段,预期在 $(t + 1)$ RTT 时刻到 $(t + 2)$ RTT 时刻之间将发送( )个数据段(假设接收方有足够的缓存)。
A. $k$
B. $k + 1$
C. $2^k$
D. $2k$
36. 下列关于 TCP 的拥塞控制机制的描述中,错误的是( )。
A. TCP 刚建立连接进入慢开始阶段
B. 慢开始阶段拥塞窗口指数级增加
C. 超时发生时,新门限值(慢开始和拥塞避免阶段的分界点)等于旧门限值的一半
D. 拥塞避免阶段拥塞窗口线性增加
37. 在一个 TCP 连接中,MSS 为 1KB,当拥塞窗口为 34KB 时收到了 3 个冗余 ACK 报文。若在接下来的 4RTT 内报文段传输都是成功的,则当这些报文段均得到确认后,拥塞窗口的大小是( )。
A. 8KB
B. 16KB
C. 20KB
D. 21KB
38. A 和 B 建立 TCP 连接,MSS 为 1KB。某时,慢开始门限值为 2KB,A 的拥塞窗口为 4KB,在接下来的 1RTT 内,A 向 B 发送了 4KB 的数据(TCP 的数据部分),并
<!-- page: 262 -->
2027年计算机网络考研复习指导
且得到了B的确认,确认报文中的窗口字段的值为2KB。在下一个RTT中,A最多能向B发送()数据。
A. 2KB
B. 8KB
C. 5KB
D. 4KB
39. 假设在没有发生拥塞的情况下,在一条往返时延RTT为10ms的线路上采用慢开始控制策略。若接收窗口的大小为24KB,最大报文段MSS为2KB,则发送方能发送出第一个完全窗口(也就是发送窗口达到24KB)需要的时间是()。
A. 30ms
B. 40ms
C. 50ms
D. 60ms
40. 甲向乙发起一个 TCP 连接,最大段长 $\mathrm{MSS} = 1\mathrm{KB}$ , $\mathrm{RTT} = 3\mathrm{ms}$ ,乙的接收缓存为 $16\mathrm{KB}$ ,且乙的接收缓存仅有数据存入而无数据取出,则甲从连接建立成功至发送窗口达到 $8\mathrm{KB}$ ,需经过的最小时间以及此时乙的接收缓存的可用空间分别为()。
A. 3ms, 15KB
B. 9ms, 9KB
C. 6ms, 13KB
D. 12ms, 8KB
41. 【2009统考真题】主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300B和500B的有效载荷,第一个段的序号为200,主机乙正确接收到这两个数据段后,发送给主机甲的确认序号是()。
A. 500
B. 700
C. 800
D. 1000
42. 【2009统考真题】一个TCP连接总以1KB的最大段长发送TCP段,发送方有足够多的数据要发送,当拥塞窗口为16KB时发生了超时,若接下来的4RTT时间内的TCP段的传输都是成功的,则当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是()。
A. 7KB
B. 8KB
C. 9KB
D. 16KB
43. 【2010统考真题】主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000B,则此时主机甲还可以向主机乙发送的最大字节数是()。
A. 1000
B. 2000
C. 3000
D. 4000
44. 【2011统考真题】主机甲向主机乙发送一个(SYN=1,seq=11220)的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能是()。
A. (SYN=0, ACK=0, seq=11221, ack=11221)
B. (SYN=1,ACK=1,seq=11220,ack=11220)
C. (SYN=1,ACK=1,seq=11221,ack=11221)
D. (SYN=0,ACK=0,seq=11220,ack=11220)
45. 【2011统考真题】主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了3个连续的TCP段,分别包含300B、400B和500B的有效载荷,第3个段的序号为900。若主机乙仅正确接收到第1个段和第3个段,则主机乙发送给主机甲的确认序号是()。
A. 300
B. 500
C. 1200
D. 1400
46. 【2013统考真题】主机甲与主机乙之间已建立一个TCP连接,双方持续有数据传输,且数据无差错与丢失。若甲收到一个来自乙的TCP段,该段的序号为1913、确认序号为2046、有效载荷为100B,则甲立即发送给乙的TCP段的序号和确认序号分别是()。
A. 2046、2012
B. 2046、2013
C. 2047、2012
D. 2047、2013
<!-- page: 263 -->
第5章 传输层
251
47. 【2014 统考真题】主机甲和乙建立了 TCP 连接,甲始终以 MSS = 1KB 大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 $t$ 时刻发生超时的时候拥塞窗口为 8KB,则从 $t$ 时刻起,不再发生超时的情况下,经过 10RTT 后,甲的发送窗口的大小为()。
A. 10KB
B. 12KB
C. 14KB
D. 15KB
48. 【2015 统考真题】主机甲和主机乙新建一个 TCP 连接,甲的拥塞控制初始阈值为 32KB,甲始终向乙以 MSS = 1KB 大小的段发送数据,并一直有数据发送;乙为该连接分配 16KB 接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未出现发送超时的情况下,经过 4RTT 后,甲的发送窗口是()。
A. 1KB
B. 8KB
C. 16KB
D. 32KB
49. 【2017 统考真题】若甲向乙发起一个 TCP 连接,最大段长 MSS = 1KB,RTT = 5ms,乙开辟的接收缓存为 64KB,则甲从连接建立成功至发送窗口达到 32KB,需经过的时间至少是()。