Skip to content

2016年 408 计算机网络 第 41 题

计算机网络2016年综合题0分

题目

某网络拓扑如题 41 图所示:

201.1.3.9L0E0L1201.1.3.1E1: 192.168.3.254InternetWeb 服务器 S130.18.10.1R1R2NATR3201.1.1.0/24201.1.2.0/25DNS 服务器201.1.1.1SwitchHubH1192.168.3.2H2192.168.3.3H3192.168.3.251H4192.168.3.252

图中说明:R1~R3 是路由器,Switch 为 100BaseT 交换机,Hub 为 100BaseT 集线器,主机 H1~H4 的默认 DNS 服务器均配置为 201.1.1.1。

假设题 33~41 图中的 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 接收缓存仅有数据存入而无数据取出。请回答下列问题。

(1) 在 TCP 连接建立过程中,H3 收到的 S 发送过来的第二次握手 TCP 段的 SYN 和 ACK 标志位的值分别是多少?确认序号是多少?

(2) H3 收到的第 8 个确认段所通告的接收窗口是多少?此时 H3 的拥塞窗口变为多少?H3 的发送窗口变为多少?

(3) 当 H3 的发送窗口等于 0 时,下一个待发送的数据段序号是多少?H3 从发送第 1 个数据段到发送窗口等于 0 时刻为止,平均数据传输速率是多少(忽略段的传输延时)?

(4) 若 H3 与 S 之间通信已经结束,在 t 时刻 H3 请求断开该连接,则从 t 时刻起,S 释放该连接的最短时间是多少?

解析

(1) 第二次握手的 SYN / ACK / 确认序号

TCP 三次握手的标志位组合(背诵级)

握手方向SYNACKseqack_seq
第一次H3 → S10100
第二次S → H311y(S 选的初始序号)101
第三次H3 → S01101y + 1

第二次握手是"S 同意建连 + 顺便确认 H3 的 SYN",所以 SYN=1 + ACK=1 同时打开。

确认序号 = 对方 seq + 1(SYN 段虽然不携带数据,但消耗一个序号)= 100 + 1 = 101

最终答案:SYN = 1,ACK = 1,ack_seq = 101

(2) 第 8 个 ACK 后的窗口状态

题面强调 "S 端 TCP 接收缓存仅有数据存入、无数据取出" → 接收方每确认一个 1 KB 段,接收窗口 rwnd 就少 1 KB

慢启动阶段(初始阈值 32 KB 远未到达,全程都在慢启动),每收到一个新段的 ACK,cwnd 增加 1 KB(初始 cwnd = 1 KB)。

逐次填表(追踪到第 8 个 ACK):

第 N 个 ACKrwnd(剩余接收缓存)cwnd(拥塞窗口)
ACK #120 − 1 = 19 KB1 + 1 = 2 KB
ACK #219 − 1 = 18 KB3 KB
.........
ACK #820 − 8 = 12 KB1 + 8 = 9 KB

发送窗口 = min(cwnd, rwnd) = min(9, 12) = 9 KB

慢启动 vs 拥塞避免的切分点:拥塞窗口 ≤ ssthresh 时是慢启动(指数增长,每 RTT 加倍);> ssthresh 时进入拥塞避免(线性增长,每 RTT 加 1 MSS)。本题 ssthresh = 32 KB,cwnd 永远涨不到这里就被 rwnd 卡死了,所以全程慢启动。

(3) 发送窗口降为 0 时的状态

继续跟踪到 rwnd = 0:每个 ACK 都会让 rwnd 减 1,所以 rwnd 在第 20 个 ACK 后变为 0。此时 cwnd = 21 KB,但发送窗口 = min(21, 0) = 0。

下一个待发送的数据段序号

  • 初始序号 100,三次握手 SYN 消耗 1 个序号 → 数据起始序号 = 101
  • 已发送 20 个 1 KB(= 20 × 1024 = 20480 B)的数据
  • 下一个待发序号 = 101 + 20 × 1024 = 101 + 20480 = 20581

算"经过了几轮 RTT"(关键步骤):

慢启动每轮"翻倍"地发送,直到被 rwnd 卡住:

轮次(已过 RTT 数)本轮 cwnd本轮 rwnd本轮发送窗口本轮发送段数累计已发段数
1120111
2219223
3417447
48138815
51655520

第 5 轮收完所有 ACK 后,rwnd = 0、发送窗口 = 0,总计 5 个 RTT = 5 × 200 ms = 1000 ms = 1 s

平均数据传输速率

也可以写作 20 KB/s20.48 KB/s(如果 K=1000;本题 K=1024 所以是 20 KB/s = 20480 B/s)。

常见单位错位:考研题里 K=1024、k=1000、B=byte、b=bit 经常混着用,注意区分 KB/skbps——前者是字节速率,后者是比特速率,差 8 倍。

(4) S 释放连接的最短时间

TCP 四次挥手 + 时间线(从 H3 发送 FIN 起算):

t = 0       H3 → S : FIN(H3 进入 FIN-WAIT-1)
t = RTT/2   S 收到 FIN
            S → H3: ACK(S 进入 CLOSE-WAIT,H3 进入 FIN-WAIT-2)
            S 立刻发完剩余数据后(题面无数据,立刻发 FIN)
            S → H3: FIN(S 进入 LAST-ACK)
t = RTT     H3 收到 ACK 和 FIN
            H3 → S: ACK(H3 进入 TIME-WAIT)
t = 1.5×RTT S 收到最后 ACK,立刻 CLOSED ← 最短释放时刻

S 真正"释放连接"是在收到 H3 的最后一个 ACK 之时。这一 ACK 从 H3 发出后,单程 = RTT/2 到达 S。

总时间 =

TIME-WAIT 在 H3 端、不影响 S:H3 在发完最后 ACK 后会进入 TIME-WAIT 状态等 2 MSL 才彻底关闭——这是为了万一最后 ACK 丢失,能重发一次以保证 S 关闭。但本题问的是"S 释放连接"的时间,不是 H3 关闭时间,所以不算 2 MSL。

为什么是四次挥手而不是三次:握手时 S 可以把"对 H3 SYN 的 ACK"和"自己的 SYN"合并成一个段;挥手时 S 收到 FIN 后可能还有数据要发完,所以 ACK 立刻回但 FIN 要等数据发完才发,两个不能合并 → 一次方向上的关闭需要 2 个段(FIN + ACK),双向共 4 个段。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题