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=======================

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM