TCP发送窗口拥塞窗口试题分析

题目一:

来源2015年408计算机综合

试题链接:https://www.nowcoder.com/questionTerminal/3241441c88f04ab58585a187716055d3
 

主机甲和主机乙新建一个TCP 连接,甲的拥塞控制初始阈值为 32KB,甲向乙始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙为该连接分配 16KB 接收缓存,并对每个数据段进行确认, 忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发送超时 的情况下,经过 4 个 RTT 后,甲的发送窗口是(A)。

A.1KB

B.8KB

C.16KB

D.32KB

 

发送窗口大小取决于min(rwnd,cwnd).

其中rwnd是接收缓存的空余大小,表示接收方还能接收多少。
cwnd就是我们常常画慢增长曲线,拥塞避免曲线等等分析的纵轴数值。

这里,其实很明确的告诉我们接收缓存只进不出,因此在不断减小。可是我们有一个思维惯性是喜欢思考有趣的部分,画cwnd的变化,自以为这个分析好了问题就手到擒来了,切不可忽视rwnd。这里就是个例子。

cwnd从1MSS = 1KB开始,一个RTT后变为2KB,两个RTT后变为4KB,3RTT后变为8KB,4个RTT后变为16KB

同时呢,接收缓由16KB→15KB→13KB→9KB→1KB16KB→15KB→13KB→9KB→1KB

  通知窗口值,代表接收缓存剩余值(KB) 拥塞窗口大小(KB) 发送窗口大小(KB)
初始          16           1                1
经过第一个RTT        16-1=15           2           min(15, 2)=2
经过第二个RTT        15-2=13           4           min(13,4)=4
经过第三个RTT        13-4=9           8           min(9,8)=8
经过第四个RTT         9-8=1          16  通知接收缓存只有1KB了,发送窗口取min(1, 16)=1KB

 

经过一个RTT,第二次发送时,rwnd = 15KB,cwnd = 2KB,发送窗口取较小值:2KB

经过两个RTT,第三次发送时,rwnd = 13KB,cwnd = 4KB,发送窗口取较小值:4KB

经过三个RTT,第四次发送时,rwnd = 9KB,cwnd = 8KB,发送窗口取较小值:8KB

经过四个RTT,第五次发送时,rwnd = 1KB,cwnd = 16KB,发送窗口取较小值:1KB

当然第五次发送之后接受窗口就满了,主机甲就会周期性的只发送一个字节数据的报文段,一旦主机乙的缓存有空,确认报文段就会出现非0的通知窗口值,当然这里是题目要求,主机乙的数据不被取走,仅仅为了计算,并非实际情况。

 

再来看一题:

题目二:

来源为2014年408计算机综合

链接:https://www.nowcoder.com/questionTerminal/cee6014573f841e2b1b19fbd89ab5d32
 

主机甲和乙已建立了TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是 (A)

A.10KB

B.12KB

C.14KB

D.15KB

 

分析:

当t时刻发生超时,TCP拥塞控制,拥塞窗口发生乘性减,把ssthresh设为8的一半,即为4,且拥塞窗口设为1KB。然后经历10个RTT后,拥塞窗口的大小依次为1(t时刻初始)、2(第一个RTT后)、4(第二个RTT后)、5、6、7、8、9、10、11、12(第10个RTT后),而发送窗口取当时的拥塞窗口和接收窗口的最小值,而接收窗口始终为10KB,所以选A。其中,1、2、4为慢启动,到达了阈值后开始加性增->5,6,7,8,9,10,11,12.

 

试题三:

题目来源:北京航空航天大学-2015-961_计算机学科专业基础综合

链接:https://www.nowcoder.com/questionTerminal/c5bf448282b745a3b97b52d33fac28d6
 

主机甲中的应用程序使用TCP协议向主机乙发送20KB的数据。在建立TCP连接后,主机甲按照慢启动(慢开始)和拥塞避免机制发送数据,其拥塞窗口初始值为1,慢启动门限值ssthresh为8,且每次发送TCP报文段均搭载1KB的用户数据。

1. 如传输过程中未发生确认超时,且不考虑流量控制,则主机甲到第几轮次时能够完成题中所述20KB数据的发送?各轮次的拥塞窗口宽度是多少?

2. 如传输过程中未发生确认超时,主机乙返回的确认报文段中“窗口(Window size)”字段值始终为6KB,则主机甲到第几轮次时能够完成题中所述20KB数据的发送?

分析

1.题目说了不考虑流量控制,而流量控制是TCP接收方针对TCP发送方采取的措施,能够消除发送方使接收方缓存溢出的可能性。

也就是说,这里接收方接收缓存无限大。而发送窗口=min(接收缓存的通知值,拥塞窗口大小)。所以这里发送窗口=拥塞窗口。

并且收到的确认不超时,不考虑超时重传。

第一次:发送了1KB,收到确认之后拥塞窗口变为2KB,发送窗口也变为了2KB,此时共发送1KB

第二次:发送了2KB,收到确认之后拥塞窗口变为4KB,发送窗口变为了4KB,此时共发送3KB

第三次:发送了4KB,收到确认之后拥塞窗口变为8KB(准备开始加性增),发送窗口变为了8KB,此时共发送7KB

第四次:发送了8KB,收到确认之后拥塞窗口变为9KB,发送窗口变为9KB,此时共发送15KB

第五次:发送了9KB,收到确认之后拥塞窗口变为10KB,发送窗口变为10KB,此时共发送24KB

满足要求!到达第5次时,能够完成题中所述20KB数据的发送。

 

2.在TCP报文段结构中有一个接收窗口值,这里题目说明每次返回的报文中,接收窗口的值均为6KB,意味着接收窗口的通知值每次都是6KB,发送窗口值=min(6KB,拥塞窗口值)

第一次:发送了1KB,收到确认之后拥塞窗口变为2KB,发送窗口也变为了min(6KB, 2KB)=2KB,此时共发送1KB

第二次:发送了2KB,收到确认之后拥塞窗口变为4KB,发送窗口变为了min=(6KB, 4KB)=4KB,此时共发送3KB

第三次:发送了4KB,收到确认之后拥塞窗口变为8KB(准备开始加性增),发送窗口变为了min=(6KB, 8KB)=6KB,此时共发送7KB

第四次:收到确认发送了6KB,之后拥塞窗口变为9KB,发送窗口变为min=(6KB, 9KB)=6KB,此时共发送13KB

第五次:收到确认发送了6KB,之后拥塞窗口变为10KB,发送窗口变为min=(6KB, 10KB)=6KB,此时共发送19KB

第六次:收到确认发送了6KB,之后拥塞窗口变为11KB,发送窗口变为min=(6KB, 11KB)=6KB,此时共发送25KB

综上分析:主机甲到第6次时能够完成题中所述20KB数据的发送。

 

===========================Talk is cheap, show me the code=======================

 

 

posted @ 2018-10-08 16:25  绿叶萌飞  阅读(2858)  评论(0编辑  收藏  举报