🏷️ 知识点:TCP滑动窗口
主机甲通过 TCP 向主机乙发送数据的部分过程如下图,seq 为序号,ack-seq 为确认序号,rcwnd 为接收窗口。甲在t0时刻的拥塞窗口和发送窗口均为 2000B,拥塞控制阈值为 8000B,MSS=1000B。甲始终以 MSS 发送 TCP 段。若甲在t1时刻收到如图所示的确认段,则甲在未收到新的确认段之前,还可以继续向乙发送的 TCP 段数是( )。
A. 2 B. 3 C. 4 D. 5
[tag_link]
正确答案:A
发送窗口取拥塞窗口和接收窗口之间的较小值,即 swnd = min(cwnd, rwnd)。根据 ack_seq = 3001 可知,目前乙已经接收到了 1000B 的数据即一个 1 个 MSS,seq = 3001 的 MSS 仍然在发送中,并且此时乙的接收窗口(swnd)为 4 个 MSS。此外,由于甲目前仍然在慢开始阶段(发送窗口没有达到阈值),所以接收到乙的确认后,拥塞窗口要 +1,此时 cwnd = 3 MSS。所以发送窗口 swmd = min(3, 4) = 3 MSS。另外需要注意这个公式:发送窗口 的大小(swnd) = 已经发送但还没有确认数据(inflight) + 还没有发送的数据。这一题问的是甲还可以向乙发送多少个 TCP 段,这要减去那些之前已经发送但还没有确认的数据(1 MSS)。所以还可以发送 3 - 1 = 2 MSS,答案选择 B。
主机甲与主机乙之间已建立一个 TCP 连接,双方持续有数据传输,且数据无差错与丢失。若甲收到 1 个来自乙的 TCP 段,该段的序号为 1913、确认序号为 2046、有效载荷为 100 字节,则甲立即发送给乙的 TCP 段的序号和确认序号分别是( )。
A.2046、2012
B.2046、2013
C.2047、2012
D.2047、2013
[tag_link] 正确答案:B本题考察 序列号和确认号 ,确认序号 ack 是期望收到对方下一个报文段的数据的第一个字节的序号,序号 seq 是指本报文段所发送的数据的第一个字节的序号。甲收到 1 个来自乙的 TCP 段,该段的序号 seq=1913、确认序号 ack=2046、有效载荷为 100 字节,表明到序号 1913+100-1=2012 为止的所有数据甲均已收到,而乙期望收到下一个报文段的序号从 2046 开始。故甲发给乙的 TCP 段的序号 seq1=ack=2046 和确认序号 ack1=seq+100=2013。
主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了 3 个连续的 TCP 段,分别包含 300 字节、400 字节和 500 字节的有效载荷,第 3 个段的序号为 900。若主机乙仅正确接收到第 1 和第 3 个段,则主机乙发送给主机甲的确认序号是
A. 300
B. 500
C. 1200
D. 1400
[tag_link]
正确答案:B
TCP 首部的序号字段是指本报文段数据部分的第一个字节的序号,而确认号是期待收到对方下一个报文段的第一个字节的序号。第三个段的序号为 900,则第二个段的序号为 900-400=500,现在主机乙期待收到第二个段,故发给甲的确认号是 500。
设主机甲通过 TCP 向主机乙发送数据,部分过程如下图所示。甲在t0时刻发送一个序号 seq=501、封装 200B 数据的段,在t1时刻收到乙发送的序号 seq = 601、确认序号 ack_seq = 501、接收窗口 rcvwnd = 500B 的段,则甲在未收到新的确认段之前,可以继续向乙发送的数据序号范围是( )。
A. 501 ~ 1000 B. 601 ~ 1100 C. 701 ~ 1000 D. 801 ~ 1100
[tag_link]
正确答案:C
本题考察 TCP 的 滑动窗口机制 。 依题意,甲发送完 200B 报文后,继续发送的报文段中序号字段 seq=701。由于乙告知接收窗口为 500,且甲未收到乙对 seq =501 报文段的确认,那么甲还能发送的报文段字节数为 500-200=300B,因此甲在未收到新的确认段之前,还能发送的数据序号范围是 701~1000。
[tag_link]

假设题 33~41 图中的 H3 访问 Web 服务器 S 时,S 为新建的 TCP 连接分配了 20 KB (K=1 024) 的接收缓存,最大段长 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)TCP 连接的建立过程为 三次握手:首先,H3 向 Wb 服务器 S 发出连接请求报文段,这时首部中的同步位 SYN=1,ACK=0,同时选择一个初始序号 seq=100。TCP 规定,SYN 报文段(即 SYN=1 的报文段)不能携带数据,但是要消耗一个序号。接着,S 收到连接请求报文段,为自己选择一个初始序号 seq=y,向 A 发送确认。这个报文段 SYN=1、ACK=1、seq=y,确认号 ack 是 100+1=101。它不能携带数据,但是也要消耗一个序号。最后,H3 收到 S 的确认报文段后,还要向 S 给出确认。这份确认报文段 SYN=0、ACK=1,确认号 ack=y+1,自己的序号 seq=101。因此,第二次握手 TCP 段的 SYN=1、(1 分)ACK=1;(1 分)确认序号是 101。(1 分)
2)题目规定 S 对收到的每个段(MSS 大小的段)进行确认,并通告新的接收窗口,而且 TCP 接收缓存仅有数据存入而无数据取出。H3 收到的第 8 个确认段所通告的接收窗口是 20-8=12KB;(1 分)在慢开始算法里,发送方 H3 先设置拥塞窗口 cwnd=1KB,接下来每收到一个对新报文段的确认就使发送方的拥塞窗口加 KB。H3 共收到 8 个确认段,所以此时 H3 的拥塞窗口变为 1+8=9KB;(1 分)发送窗口=min{拥塞窗口,接收窗口},所以 H3 的发送窗口变为 min{9,12}=9KB。(1 分)
3)TCP 是用字节作为 窗口 和 序号 的单位。当 H3 的发送窗口等于 0KB 时,也就是接收窗口等于 0KB 时,下一个待发送段的序号是 20K+101=20×1024+101=20581;(1 分)H3 从发送第 1 个段到发送窗口等于 0KB 时刻为止,经过五个传输轮次,每个传输轮次的时间就是往返 RTT,因此平均数据传输速率是 20KB/(5×200ms)=20KB/s=20.48kbps。(1 分)
4)通信结束后,H3 向 S 发送连接释放报文段。S 收到 H3 的连接释放报文段后,马上发出确认报文段。此时 S 已经没有数据需要传输,于是它也马上发出连接释放报文段。H3 在收到 S 的连接释放报文段后,发出确认报文段。S 在收到这份确认后就释放 TCP 连接。因此从 t 时刻起,S 释放该连接的最短时间是:H3 的连接释放报文段传送到 S 的时间+S 的连接释放报文段传送到 H3 的时间+H3 的确认报文段传送到 S 的时间 = 1.5×200ms = 300ms。(1 分)
如图,主机 H 登录到 FTP 服务器后,向服务器上传一个大小为 18000B 的文件 F,假设 H 传输 F 建立数据链接时,选择的初始序号为 100,MSS=1000B,拥塞控制的初始阈值是 4MSS,RTT=10ms,忽略 TCP 的传输时延,在 F 的传送过程中,H 以 MSS 段向服务器发送数据,且始终没有错误,丢包和乱序。
(1) FTP 的控制连接是持久的还是非持久的?FTP 的数据连接是持久的还是非持久的?H 登录服务器时,建立的 FTP 连接是数据连接还是控制连接。
(2) H 通过数据连接发送 F 时,F 的第一个字节序号是多少?在断开数据连接的过程中,FTP 发送的第二次挥手的 ACK 序号是?
(3) F 发送过程中,当 H 收到确认序号为 2101 的确认时,H 的拥塞调整为多少?收到确认序号为 7101 的确认段时,H 的拥窗口调整为多少
(4) H 从请求建立数据连接开始,到确认 F 已被服务全部接收为止,至少要多长时间?期间应用层数平均发送速率是多少?
[tag_link]
1)FTP 的控制连接是持久的;数据连接是非持久的;H 登录 FTP 服务器时,建立的 TCP 连接是控制连接。
2)F 的第 1 个字节的序号是 101;第二次挥手 ACK 段的确认序号是 18102。
3)当 H 收到确认序号为 2101 的确认段时,H 的拥塞窗口调整为 3MSS;收到确认序号为 7101 的确认段时,H 的拥塞窗口调整为 5MSS。
4)H 从请求建立数据连接开始,到确认 F 已被服务器全部接收为止,至少需要 6RTT=610ms=60ms;期间应用层数据平均发送速率是 18000B/60ms=30010³B/s=0.3MB/s=2.4Mb/s。