本文整理可靠传输与 TCP 的配套习题。参考笔记见可靠传输与 TCP。
除题目另有说明外,拥塞窗口题采用配套笔记中的经典 Reno 离散轮次模型:初始 cwnd=1 MSS,发送窗口取 min(rwnd, cwnd)。
一、TCP 基础
1. TCP 特点
- 字节流
- 全双工
- 可靠
- 支持广播
答案
解析
TCP 提供点对点、全双工的可靠字节流,一条连接只有两个端点,即:TCP 不支持广播,故选 D。
2. TCP 首部
下列关于 TCP 首部格式的描述中,错误的是( )。
- 首部长度为
20~60 B,固定部分为 20 B - 端口号字段依次表示源端口号与目的端口号
- 首部长度总是
4 B 的整数倍 - TCP 校验和伪首部中的 IP 协议字段为
17
答案
解析
TCP 的 IP 协议号为 6,17 是 UDP 的协议号,故 D 错误。数据偏移字段以 4 B 为单位,取值 5~15,所以 TCP 首部为
20~60 B 且总是 4 B 的整数倍。
TCP 报文段标志字段中的( )置 1 时,表示必须释放连接并重新建立连接。
URGRSTACKFIN
答案
解析
RST=1 表示复位连接,常用于异常或不存在的连接状态。FIN=1 只关闭本端的发送方向,不等于立即复位整条连接。
参见控制位
2021 统考真题若大小为 12 B 的应用层数据分别通过 1 个 UDP 数据报和 1 个 TCP 段传输,则该 UDP 数据报和 TCP 段实现的有效载荷(应用层数据)最大传输效率分别是( )。
37.5%,16.7%37.5%,37.5%60.0%,16.7%60.0%,37.5%
答案
解析
不使用选项时,UDP 首部为 8 B,TCP 首部最短为 20 B:
ηUDP=12+812=60%,ηTCP=12+2012=37.5%.
二、传输性能与工作过程
1. 吞吐率计算
窗口限制每个 RTT 内可保持在途的数据量。信道足够快且忽略其他限制时,吞吐率上界为 W/RTT。
TCP 发送窗口的最大尺寸为 64 KB,网络平均往返时间为 20 ms。只考虑单向传输且假设信道带宽不受限,TCP 可获得的最大数据传输速率是多少?
答案
解析
一个 RTT 最多确认一个窗口的数据:
Rmax=20×10−364×1024×8=26.2144×106 bit/s≈26.2 Mb/s.
一个 TCP 连接的信道带宽为 100 Mb/s,单个报文大小为 1000 B,发送窗口固定为 60 个报文,单向端到端时延为 20 ms
。只考虑单向传输,忽略确认报文的发送时延和各层首部开销。TCP 最大平均数据传输速率和信道利用率分别是多少?
答案
最大平均速率约为 11.98 Mb/s,信道利用率约为 11.98%。
解析
题库大题 05 解析图:一个窗口的发送周期为 RTT 加单个报文段传输时延单个报文的传输时延为
TD=100×1061000×8=0.08 ms,而 RTT=2×20=40 ms。从发送首个报文到收到其确认的周期为
T=TD+RTT=40.08 ms.窗口内的 60 个报文段连续发送只需 60TD=4.8 ms;下一窗口仍需等待首段确认,因此周期按 RTT+TD 计算。
一个窗口共 60 000 B:
R=40.08×10−360×1000×8≈11.98 Mb/s,\qquadU=10011.98≈11.98%.
TCP 报文段载荷为 1500 B,最大分组存活时间为 120 s。为使 TCP 序号不会在旧报文仍可能存活时循环回来并发生重叠,不考虑帧长限制,线路允许的最快有效载荷速率是多少?
答案
应小于约 286.3 Mb/s,即约 35.8 MB/s。
解析
TCP 序号按字节编号,32 位序号空间包含 232 个字节。序号空间的使用时间应不少于 MSL:
R<120232×8≈2.8633×108 bit/s=286.3 Mb/s.按报文段计算时,约发送 232/1500 个满载报文段后回绕;报文段数再乘每段 1500 B,载荷长度相消,因此结果仍由 232
字节的序号空间决定。TCP 首部不消耗数据序号。
2. TCP 工作过程
下列关于 TCP 工作过程的描述中,错误的是( )。
- TCP 建立连接需要三次握手
- 连接建立后,两端应用进程进行全双工字节流传输
- 只有客户端可以主动提出释放连接的请求
- 典型 TCP 连接释放需要四次挥手
答案
解析
连接任一端都可以主动关闭,客户端与服务器身份不限制关闭发起方,故 C 错误。
2021 统考真题若客户首先向服务器发送 FIN 段请求断开 TCP 连接,则当客户收到服务器发送的 FIN 段并向服务器发送 ACK 段后,客户的 TCP 状态转换为( )。
CLOSE_WAITTIME_WAITFIN_WAIT_1FIN_WAIT_2
答案
解析
主动关闭方发送最终 ACK 后进入 TIME-WAIT,等待 2MSL 后才进入 CLOSED。
TCP 使用滑动窗口实现流量控制。发送方收到对方的零窗口通知后,应启动( )计时器;计时器超时后发送零窗口探测报文段。
- 重传
- 保活
- 时间等待
- 持续
答案
解析
零窗口触发持续计时器。若探测后的确认仍通告零窗口,发送方重新设置持续计时器,避免非零窗口更新丢失后双方永久等待。
保活计时器用于关闭长期空闲的 TCP 连接,避免持续占据资源。持续计时器用于零窗口探测。
三、序号与时延
1. 序号计算
主机 A 与 B 建立 TCP 连接。A 首个 SYN 报文段的 seq=211;释放连接时,A 向 B 发送的第四次挥手报文段的 seq=985。本次通信中
A 向 B 共发送了( )字节数据。
771772773774
答案
解析
SYN 消耗序号 211,首个数据字节从 212 开始。最终纯 ACK 使用 seq=985,说明最后一个 FIN 使用 seq=984,因此最后一字节数据对应
seq=983。则数据长度为 L:
L=983−212+1=772
计算数据长度的题目,关键在于计算出数据第一块 seqbegin 与最后一块 seqend 的序号,数据长度 L 等于
L=seqend−seqbegin+1
某客户与服务器建立 TCP 连接,当连接断开时,客户先向服务器发送一个标志 FIN=1
的报文段 A,此报文段中 seq 值为 x、ack 值为 y。一段时间后,客户收到了服务器发来
的一个标志 FIN=1 的报文段 B,则下列关于报文段 B 的说法中,正确的是( )。
- B 的
seq 一定为 y - B 的
seq 一定为 y+1 - B 的
ack 一定为 x - B 的
ack 一定为 x+1
答案
解析
按题库默认的 FIN 不携带数据,A 中的 FIN 消耗一个序号,所以服务器确认该方向时使用 ack=x+1。服务器在半关闭期间仍可继续发送数据,其 FIN 的 seq
取决于实际发送量,不一定为 y 或 y+1。(若 FIN 携带数据,确认号还需再加上其负载长度。)
仍设 A 的 FIN=1 报文段为 seq=x、ack=y。若服务器在半关闭期间发送数据后,以 seq=z 的 FIN=1 报文段结束发送(FIN 单独发送且不携带数据),求服务器在半关闭期间发送的数据量;若未给出 MSS,能否确定报文段数?
答案
可以确定发送了 z-y B 数据,但无法仅据此确定报文段数。
解析
服务器收到 A 的 FIN 后,发送方向的下一个序号从 y 开始;服务器发送的数据占用 y~z-1,而 seq=z 的 FIN 占用下一个序号。因此数据长度为
L=z−y.报文段数还取决于 MSS 和实际分段方式,题干未给出,不能由序号差唯一确定。
2013 统考真题主机甲与主机乙之间已建立一个 TCP 连接,双方持续有数据传输,且数据无差错与丢失。若甲收到一个来自乙的 TCP 段,
该段的序号为 1913、确认序号为 2046、有效载荷为 100 B,则甲立即发送给乙的 TCP 段的序号和确认序号分别是( )。
2046,20122046,20132047,20122047,2013
答案
解析
收到的 ack=2046 表示乙期望甲下次从序号 2046 发送,所以甲的 seq=2046。乙的 100 B 数据覆盖 1913~2012,甲应确认下一个字节
2013:
ack=1913+100=2013. 2011 统考真题主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了 3 个连续的 TCP 段,分别包含 300 B、400 B 和 500 B 的有效载荷,第 3 个段的序号为
900。若主机乙仅正确接收到第 1 个段和第 3 个段,则主机乙发送给主机甲的确认序号是( )。
30050012001400
答案
解析
第 3 个段的 seq=900,所以第 2 个段的结束序号为 899。第 2 个段携带 400 B,起始序号为
900−400=500.乙未收到第 2 个段,只能确认第 1 个段及其之前的连续字节;下一期望序号为 500,故选 B。
2. 时延计算
TCP 客户与服务器的通信已经结束,端到端往返时间为 RTT。时刻 t 客户请求断开连接,从 t
起服务器释放该连接的最短时间是( )。
- 0.5RTT
- RTT
- 1.5RTT
- 2RTT
答案
解析
客户 FIN 在 0.5RTT 后到达服务器。最短情况下服务器没有剩余数据,将 ACK 与自身 FIN 合并发送;客户收到后立即发送最终 ACK,该
ACK 再用 0.5RTT 到达服务器。因此服务器在
0.5RTT+0.5RTT+0.5RTT=1.5RTT后进入 CLOSED。
2024 统考真题假设主机 H 通过 TCP 向服务器发送长度为 3000 B 的报文,往返时间 RTT=10 ms,最长报文段寿命 MSL=30 s,最大报文段长度 MSS=1000 B,忽略 TCP 段的传输时延,
报文传输结束后 H 首先请求断开连接,则从 H 请求建立 TCP 连接时刻起,到 H 进入 CLOSED
状态为止,所需的时间至少是( )。
30.03 s30.04 s60.03 s60.04 s
答案
解析
按本题采用的经典初始窗口 1 MSS:
- t=0 发送 SYN,t=1RTT 收到 SYN + ACK;第三次握手携带首个
1000 B;
- t=2RTT 收到首段 ACK,
cwnd 增至 2 MSS,发送剩余 2000 B;
- t=3RTT 收到剩余数据的 ACK,立即发送 FIN;
- 服务器立即合并回复 ACK + FIN,H 在 t=4RTT 收到 FIN、回复 ACK 并进入
TIME-WAIT。
因此
Tmin=4RTT+2MSL=4×10 ms+60 s=60.04 s.现代 TCP 的初始拥塞窗口可能大于 1 MSS;本题结论依赖题库采用的经典慢启动模型。
四、窗口计算
1. 窗口演化
窗口演化题的固定步骤: 将每条边写成
(cwnd1,rwnd1)时间发送量(cwnd2,rwnd2),节点表示一个发送轮次开始时的状态;箭头上方标注时长或事件,下面标注该轮发送量。先用当前状态计算
W=min(cwnd,rwnd) 和本轮发送量,收到确认后按拥塞控制规则更新 cwnd。接收缓存只存入数据时,rwnd 还要扣除本轮已到达的数据量。
式中的 ∞ 仅表示解题时可忽略 rwnd,并非接收方实际通告了无限窗口;若后续需要跟踪 rwnd 而其初值未知,则标作问号。
先求 W=min(rwnd,cwnd),再扣除已发送但尚未确认的数据,得到当前可用窗口。
A 与 B 建立 TCP 连接,MSS=1 KB。某时 ssthresh=2 KB、cwnd=4 KB;下一 RTT 内 A 发送 4 KB 数据并全部得到确认,确认报文通告
rwnd=2 KB。再下一个 RTT 内,A 最多能发送( )数据。
2 KB8 KB5 KB4 KB
答案
解析
状态与发送量单位均为 KB:
(4,?)1RTT发送 4(5,2).当前处于拥塞避免阶段,全部确认后 cwnd 增至 5 KB;接收方只通告 rwnd=2 KB。因此发送窗口为
W=min(5,2)=2 KB.2010 统考真题主机甲和主机乙之间已建立一个 TCP 连接,TCP 最大段长为 1000 B。
若主机甲的当前拥塞窗口为 4000 B,在主机甲向主机乙连续发送两个最大段后,成功收到
主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为 2000 B,则此时主机甲
还可以向主机乙发送的最大字节数是( )。
1000200030004000
答案
解析
状态与发送量单位均为 B。题干未给出初始 rwnd,也不足以确定收到 ACK 后 cwnd 的精确值;但新 ACK 不会使其低于 4000 B:
(4000,?)首段 ACK 到达发送 2×1000(cwnd′,2000),cwnd′≥4000.总发送窗口为
W=min(cwnd′,2000)=2000 B.第二个 1000 B 报文段仍未确认并占用窗口,所以可用窗口为 2000−1000=1000 B。
2015 统考真题主机甲和主机乙新建一个 TCP 连接,甲的拥塞控制初始阈值为 32 KB,
甲始终向乙以 MSS=1 KB 大小的段发送数据,并一直有数据发送;乙为该连接分配
16 KB 接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部
存入缓存,不被取走,则甲从连接建立成功时刻起,未出现发送超时的情况下,经过 4RTT 后,
甲的发送窗口是( )。
1 KB8 KB16 KB32 KB
答案
解析
状态与发送量单位均为 KB:
(1,16)(2,15)(4,13)(8,9)1RTT发送 1(2,15),1RTT发送 2(4,13),1RTT发送 4(8,9),1RTT发送 8(16,1).四轮慢启动分别发送 1、2、4、8 KB,累计写入接收缓存 15 KB。此时
rwnd=16−15=1 KB,cwnd=16 KB,故发送窗口为 1 KB。
甲向乙发起 TCP 连接,MSS=1 KB。乙每个确认段均通告 rwnd=10 KB。时刻 t 发生超时,此时 cwnd=16 KB;此后不再超时。经过
10RTT,甲的发送窗口是( )。
10 KB12 KB14 KB15 KB
答案
解析
按 Reno,超时后 ssthresh=8 KB、cwnd 重置为 1 MSS。接收窗口始终为 10 KB。
状态与发送量单位均为 KB。前 5RTT 为
(1,10)(2,10)(4,10)(8,10)(9,10)1RTT发送 1(2,10),1RTT发送 2(4,10),1RTT发送 4(8,10),1RTT发送 8(9,10),1RTT发送 9(10,10).后 5RTT 为
(10,10)(11,10)(12,10)(13,10)(14,10)1RTT发送 10(11,10),1RTT发送 10(12,10),1RTT发送 10(13,10),1RTT发送 10(14,10),1RTT发送 10(15,10).第 10 RTT 结束时状态为 (15,10):cwnd 继续增长,但发送量始终受 rwnd=10 KB 限制。
W=min(rwnd,cwnd)=10 KB.TCP 的 ssthresh 初始为 8 个报文段;cwnd 上升到 12 时发生超时,随后重新执行慢启动与拥塞避免。第 13 次传输时 cwnd
为( )个报文段。
4678
答案
解析
窗口与发送量的单位均为报文段数。超时前第 1~4 轮为
(1,∞)(2,∞)(4,∞)(8,∞)1RTT发送 1(2,∞),1RTT发送 2(4,∞),1RTT发送 4(8,∞),1RTT发送 8(9,∞).第 5~8 轮为
(9,∞)(10,∞)(11,∞)(12,∞)1RTT发送 9(10,∞),1RTT发送 10(11,∞),1RTT发送 11(12,∞),1RTT 后超时发送 12(1,∞).超时后 ssthresh=12/2=6、cwnd=1。第 9~12 轮为
(1,∞)(2,∞)(4,∞)(6,∞)1RTT发送 1(2,∞),1RTT发送 2(4,∞),1RTT发送 4(6,∞),1RTT发送 6(7,∞).因此第 13 次传输开始时 cwnd=7。
甲、乙刚建立 TCP 连接,MSS=2 KB。乙及时清空缓存,使 rwnd 始终为 20 KB;ssthresh=16 KB,RTT=10 ms
,忽略发送时延且不发生拥塞。甲的发送窗口第一次达到 20 KB 需要( )。
40 ms50 ms60 ms70 ms
答案
解析
状态与发送量单位均为 KB:
(2,20)(4,20)(8,20)(16,20)(18,20)1RTT发送 2(4,20),1RTT发送 4(8,20),1RTT发送 8(16,20),1RTT发送 16(18,20),1RTT发送 18(20,20).cwnd 经慢启动三轮达到 16 KB,再以每 RTT 2 KB 的速度增长到 20 KB。共需
5RTT=50 ms.一个 TCP 连接的 MSS=1 KB。cwnd=34 KB 时收到 3 个冗余 ACK;接下来 4RTT 内报文段传输均成功。全部报文段得到确认后,
cwnd 是( )。
8 KB16 KB20 KB21 KB
答案
解析
按题目采用的简化 Reno,3 个冗余 ACK 触发窗口调整;状态单位为 KB:
(34,∞)3 个冗余 ACK(17,∞).ssthresh=cwnd=234=17 KB.随后四轮为
(17,∞)(18,∞)(19,∞)(20,∞)1RTT发送 17(18,∞),1RTT发送 18(19,∞),1RTT发送 19(20,∞),1RTT发送 20(21,∞).cwnd=17+4=21 KB.严格 Reno 在快恢复期间会临时令 cwnd=ssthresh+3 MSS;本题按教辅简化模型计算。
甲向乙发起 TCP 连接,MSS=1 KB、RTT=3 ms。乙的接收缓存为 16 KB,且只存入数据而不取出。甲从连接建立成功到发送窗口达到
8 KB 的最短时间,以及此时乙接收缓存的可用空间分别是( )。
3 ms,15 KB9 ms,9 KB6 ms,13 KB12 ms,8 KB
答案
解析
状态与发送量单位均为 KB:
(1,16)(2,15)(4,13)1RTT发送 1(2,15),1RTT发送 2(4,13),1RTT发送 4(8,9).三轮慢启动耗时 3RTT=9 ms,累计发送
1+2+4=7 KB,接收缓存还剩 16−7=9 KB。此时发送窗口为 min(8,9)=8 KB。
2009 统考真题一个 TCP 连接总以 1 KB 的最大段长发送 TCP 段,发送方有足够多的数据要发送,
当拥塞窗口为 16 KB 时发生了超时,若接下来的 4RTT 时间内的 TCP 段的传输都是成功的,
则当第 4 个 RTT 时间内发送的所有 TCP 段都得到肯定应答时,拥塞窗口大小是( )。
7 KB8 KB9 KB16 KB
答案
解析
超时后 ssthresh=8 KB、cwnd=1 KB。状态与发送量单位均为 KB:
(1,∞)(2,∞)(4,∞)(8,∞)1RTT发送 1(2,∞),1RTT发送 2(4,∞),1RTT发送 4(8,∞),1RTT发送 8(9,∞).前三轮执行慢启动,第四轮进入拥塞避免;确认完成后 cwnd=9 KB,故选 C。
2. 序号窗口综合计算
2021 统考真题设主机甲通过 TCP 向主机乙发送数据,部分过程如下图所示。甲在 t0 时刻发送一个序号
seq=501、封装 200 B 数据的段,在 t1 时刻收到乙发送的序号
seq=601、确认序号 ack_seq=501、接收窗口 rcvwnd=500 B 的段,则甲在未收到新的确认
段之前,可以继续向乙发送的数据序号范围是( )。
2021 年统考题原图:确认号、已发送数据与接收窗口共同决定可用窗口501~1000601~1100701~1000801~1100
答案
解析
ack=501、rwnd=500 B 给出的窗口覆盖序号 501~1000。甲已发送的 200 B 覆盖 501~700,因此还能发送 701~1000,共
300 B。
需要注意题干说明是“继续发送”,还是“可以发送”。“继续发送”只统计当前尚未发送的序号;已经发送但尚未确认的字节仍占用发送窗口,不能再次计入。
2016 统考真题假定下图中的 H3 访问 Web 服务器 S 时,S 为新建的 TCP 连接分配了 20 KB(K=1024)的接收缓存,最大段长
MSS=1 KB,平均往返时间 RTT=200 ms。H3 建立连接时的初始序号为 100,且持续以 MSS 大小的段向 S 发送数据,
拥塞窗口初始阈值为 32 KB;S 对收到的每个段进行确认,并通告新的接收窗口。假定 TCP 连接建立完成后,S 端的
TCP 接收缓存仅有数据存入而无数据取出。请回答下列问题:
2016 年统考综合题原图;本题只使用 H3 与 Web 服务器 S 之间的 TCP 条件- 在 TCP 连接建立过程中,H3 收到的 S 发送过来的第二次握手 TCP 段的 SYN 和 ACK 标志位的值分别是多少?确认序号是多少?
- H3 收到的第 8 个确认段所通告的接收窗口是多少?此时 H3 的拥塞窗口变为多少?H3 的发送窗口变为多少?
- H3 的发送窗口等于
0 时,下一个待发送的数据段序号是多少?H3 从发送第 1 个数据段到发送窗口等于 0 时刻为止,平均数据传输速率是多少?(忽略段的传输时延。) - 若 H3 与 S 之间的通信已经结束,在 t 时刻 H3 请求断开该连接,则从 t 时刻起,S 释放该连接的最短时间是多少?
答案
① SYN=1、ACK=1、ack=101;② rwnd=12 KB、cwnd=9 KB、发送窗口 9 KB;③ seq=20581,平均速率 163.84 kb/s;④
300 ms。
解析
① 第二次握手。 H3 的 SYN 使用 seq=100 并消耗一个序号,故 S 回复
SYN=1,ACK=1,ack=100+1=101.② 第 8 个确认。 S 已缓存 8 KB,剩余空间为
rwnd=20−8=12 KB.经典慢启动从 1 MSS 开始,每个新 ACK 增加 1 MSS;收到第 8 个确认后 cwnd=9 KB。因此
W=min(12,9)=9 KB.③ 零窗口。 缓存填满时共接收 20 KB。首个数据字节序号为 101,故
seqnext=101+20×1024=20581.五轮发送量依次为 1、2、4、8、5 KB,共用 5RTT=1 s:
R=120×1024×8=163.84 kb/s.④ 服务器释放。 H3 的 FIN 经 0.5RTT 到达 S;最短情况下 S 合并回复 ACK + FIN,该报文经 0.5RTT 到达 H3,H3 的最终 ACK
再经 0.5RTT 到达 S。因此
TS,min=1.5RTT=300 ms.
2025 统考真题主机甲通过 TCP 向主机乙发送数据的部分过程如下图所示,seq 为序号,ack_seq 为确认序号,rcvwnd 为接收窗口。
甲在 t0 时刻的拥塞窗口和发送窗口均为 2000 B,拥塞控制阈值为 8000 B,MSS=1000 B,
甲始终以 MSS 大小发送 TCP 段。若甲在 t1 时刻收到如图所示的确认段,则甲在未收到新的确认段之前,还可继续向乙发送的 TCP
段数是( )。
2025 年统考题原图:新确认推进窗口,同时仍有一个报文段未确认2345
答案
解析
ack=3001 确认了序号 2001~3000。当前处于慢启动,收到一个新 ACK 后
cwnd=2000+1000=3000 B.接收窗口为 4000 B,故发送窗口为 3000 B。序号 3001~4000 的一个报文段仍未确认,占用 1000 B;可用窗口为 2000 B,还能发送
2 个 MSS。
慢启动状态下,收到一个 ACK 后,增加一个 MSS,而一个 RTT 翻倍只是推论,不可机械套入。