建立 TCP 连接三次握手的过程如...
建立 TCP 连接三次握手的过程如下:
(1) 第一问。第二次握手的TCP段中,SYN=1 且 ACK=1。
第二问。H3建立连接时的初始序号为100,即第一次握手序号 seq = x = 100。第二次握手的确认序号 ack=x+1=100+1=101。
(2) 发送方发送窗口 swnd = min {拥塞窗口 cwnd, 接收方接收窗口 rwnd}。
S端的TCP接收缓存仅有数据存入而无数据取出。初始时,rwnd = 20 MSS
发送方维持一个拥塞窗口 (congestion window, cwnd),拥塞窗口的大小取决于网络的拥塞程度,并且动态地变化。发送方让自己的发送窗口等于拥塞窗口。
发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
最大报文段长度 (maximum segment size, MSS) 是 TCP 协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括报文段头)。
慢开始算法
开始时,将拥塞窗口设置为一个 MSS 的数值,每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个 MSS 的数值。可以分析出,每经过一个传输轮次 (transmission round),拥塞窗口大小加倍,逐渐增大到拥塞窗口的数值,一个传输轮次所经历的时间就是一个往返时间 RTT。
拥塞避免算法
每经过一个往返时间将发送方的窗口加 1。只要发送方判断网络出现拥塞,就将慢开始门限 ssthresh 设置为出现拥塞时发送方窗口值的一半,然后执行慢开始算法。
每经过一个往返时间将发送方的窗口加 1。只要发送方判断网络出现拥塞,就将慢开始门限 ssthresh 设置为出现拥塞时发送方窗口值的一半,然后执行慢开始算法。
接下来对本题进行分析。
拥塞窗口初始阈值为32 KB,20 KB < 32 KB,即便在一个RTT中发送20KB数据都不会触发拥塞避免算法。可以断言从 H3 发送第1个TCP段到 H3 收到的第 20 个确认段所通告时慢开始算法都适用,不会触发拥塞避免算法。也就意味着从 H3 发送第1个TCP段到 H3 收到的第 8 个确认段所通告时慢开始算法都适用,不会触发拥塞避免算法。因此,慢开始算法每收到一个对新的报文段的确认后,把拥塞窗口增加一个 MSS 的数值。本题中最大段长MSS=1 KB。
第一问。初始时S端的TCP接收缓存为 20 KB,且该接收缓存仅有数据存入而无数据取出。H3 收到的第 8 个确认段所通告时,已经传输了 8 KB 的数据,剩余接收窗口是 rwnd = 20 KB - 8 KB = 12 KB。
第二问。H3 的拥塞窗口为此前加一,cwnd = 8 KB + 1 KB = 9 KB,即cwnd = 9 KB。
第三问。H3的发送窗口 swnd = min{cwnd, rwnd} = min {9 KB, 12 MSS} = 9 KB,即swnd = 9 KB。
(3) 第一问。当H3的发送窗口等于0时,说明已经发送了20个TCP段,接下来准备发送第21个TCP段,已经发送的字节数为 20 KB / B= 20 × 1024 = 20480,H3建立连接时的初始序号seq=x=100,第三次握手时初始序号seq=x+1=101,即从序号101字节开始传输,第21个TCP段从序号101+20480 = 20581 字节开始传输,即下一个待发送数据段序号是20581。
第二问。根据 (2) 的分析,从 H3 发送第1个TCP段到 H3 收到的第 20 个确认段所通告时慢开始算法都适用,不会触发拥塞避免算法。
第1个RTT开始时,采用慢开始算法,拥塞窗口cwnd = 1MSS,S的接收窗口rwnd = 20 MSS。
H3的发送窗口 swnd = min{cwnd, rwnd} = min {1 MSS, 20 MSS} = 1MSS,此时可以将第1个TCP段连续发送出去。
第2个RTT开始时,调整当前拥塞窗口大小为上一轮次拥塞窗口大小的两倍,拥塞窗口cwnd = 2 MSS,S的接收窗口rwnd = 20 MSS -1 MSS = 19 MSS。H3的发送窗口 swnd = min{cwnd, rwnd} = min {2 MSS, 19 MSS} = 2 MSS,此时可以将第2、3个TCP段连续发送出去。
第3个RTT开始时,调整当前拥塞窗口大小为上一轮次拥塞窗口大小的两倍,拥塞窗口cwnd = 4 MSS,S的接收窗口rwnd = 19 MSS - 2MSS =17 MSS。H3的发送窗口 swnd = min{cwnd, rwnd} = min {4 MSS, 17 MSS} = 4 MSS,此时可以将第4、5、6、7个TCP段连续发送出去。
第4个RTT开始时,调整当前拥塞窗口大小为上一轮次拥塞窗口大小的两倍,拥塞窗口cwnd = 8 MSS,S的接收窗口rwnd = 17 MSS - 4 MSS = 13 MSS。H3的发送窗口 swnd = min{cwnd, rwnd} = min {8 MSS, 13 MSS} = 8 MSS,此时可以将第8、9、10、11、12、13、14、15个TCP段连续发送出去。
第5个RTT开始时,调整当前拥塞窗口大小为上一轮次拥塞窗口大小的两倍,拥塞窗口cwnd = 16 MSS,S的接收窗口rwnd = 13 MSS - 8 MSS = 5 MSS。H3的发送窗口 swnd = min{cwnd, rwnd} = min {16 MSS, 5 MSS} = 5 MSS,此时可以将第16、17、18、19、20个TCP段连续发送出去。
为了简化模型,同一个TCP段的发送和确认在同一个RTT内完成,可画出如下示意图。
到此为止,发送这20个TCP段需要5个RTT,RTT = 200ms,5RTT = 1s,忽略段的传输延时,总时间为 1s。发送数据量为 20 KB。
平均数据传输率为 。
(4) 释放 TCP 连接四次挥手的过程如下:
为了使释放 TCP 连接的时间最短,CLOSE-WAIT 期间不再进行数据传输,CLOSE-WAIT 和 FIN-WAIT-2 的时间为 0,释放 TCP 连接四次挥手的过程就变成了三次挥手,过程如下:
忽略段的传输延时,每次挥手的传播时延为 0.5 RTT,如下图所示。
整个过程需要 3×0.5 RTT = 1.5 RTT,RTT = 200ms,1.5 RTT = 1.5×200ms=300ms。即从t时刻起,S释放该连接的最短时间是 300ms。
登录后提交答案
暂无评论,来抢沙发