標題: 糊涂窗口綜合癥及其解決方法 [打印本頁]

作者: 51黑tt    時間: 2016-3-5 18:44
標題: 糊涂窗口綜合癥及其解決方法
7-13:能否更詳細些討論一下糊涂窗口綜合癥及其解決方法?
答:發(fā)送端產(chǎn)生的癥狀
如果發(fā)送端為產(chǎn)生數(shù)據(jù)很慢的應用程序服務,例如,一次產(chǎn)生一個字節(jié)。這個應用程序一次將一個字節(jié)的數(shù)據(jù)寫入發(fā)送端的TCP的緩存。如果發(fā)送端的TCP沒有特定的指令,它就產(chǎn)生只包括一個字節(jié)數(shù)據(jù)的報文段。結果有很多41字節(jié)的IP數(shù)據(jù)報就在互連網(wǎng)中傳來傳去。
解決的方法是防止發(fā)送端的TCP逐個字節(jié)地發(fā)送數(shù)據(jù)。必須強迫發(fā)送端的TCP收集數(shù)據(jù),然后用一個更大的數(shù)據(jù)塊來發(fā)送。發(fā)送端的TCP要等待多長時間呢?如果它等待過長,它就會使整個的過程產(chǎn)生較長的時延。如果它的等待時間不夠長,它就可能發(fā)送較小的報文段。Nagle找到了一個很好的解決方法。
?Nagle算法
Nagle算法非常簡單,但它能解決問題。這個算法是為發(fā)送端的TCP用的:
1. 發(fā)送端的TCP將它從發(fā)送應用程序收到的第一塊數(shù)據(jù)發(fā)送出去,哪怕只有一個字節(jié)。
2. 在發(fā)送第一個報文段(即報文段1)以后,發(fā)送端的TCP就在輸出緩存中積累數(shù)據(jù),并等待:或者接收端的TCP發(fā)送出一個確認,或者數(shù)據(jù)已積累到可以裝成一個最大的報文段。在這個時候,發(fā)送端的TCP就可以發(fā)送這個報文段。
3. 對剩下的傳輸,重復步驟2。這就是:如果收到了對報文段x的確認,或者數(shù)據(jù)已積累到可以裝成一個最大的報文段,那么就發(fā)送下一個報文段(x + 1)
Nagle算法的優(yōu)點就是簡單,并且它考慮到應用程序產(chǎn)生數(shù)據(jù)的速率,以及網(wǎng)絡運輸數(shù)據(jù)的速率。若應用程序比網(wǎng)絡更快,則報文段就更大(最大報文段)。若應用程序比網(wǎng)絡慢,則報文段就較。ㄐ∮谧畲髨笪亩危。
接收端產(chǎn)生的癥狀
接收端的TCP可能產(chǎn)生糊涂窗口綜合癥,如果它為消耗數(shù)據(jù)很慢的應用程序服務,例如,一次消耗一個字節(jié)。假定發(fā)送應用程序產(chǎn)生了1000字節(jié)的數(shù)據(jù)塊,但接收應用程序每次只吸收1字節(jié)的數(shù)據(jù)。再假定接收端的TCP的輸入緩存為4000字節(jié)。發(fā)送端先發(fā)送第一個4000字節(jié)的數(shù)據(jù)。接收端將它存儲在其緩存中,F(xiàn)在緩存滿了。它通知窗口大小為零,這表示發(fā)送端必須停止發(fā)送數(shù)據(jù)。接收應用程序從接收端的TCP的輸入緩存中讀取第一個字節(jié)的數(shù)據(jù)。在入緩存中現(xiàn)在有了1字節(jié)的空間。接收端的TCP宣布其窗口大小為1字節(jié),這表示正渴望等待發(fā)送數(shù)據(jù)的發(fā)送端的TCP會把這個宣布當作一個好消息,并發(fā)送只包括一個字節(jié)數(shù)據(jù)的報文段。這樣的過程一直繼續(xù)下去。一個字節(jié)的數(shù)據(jù)被消耗掉,然后發(fā)送只包含一個字節(jié)數(shù)據(jù)的報文段。這又是一個效率問題和糊涂窗口綜合癥(見下圖)。
對于這種糊涂窗口綜合癥,即應用程序消耗數(shù)據(jù)比到達的慢,有兩種建議的解決方法。
?Clark解決方法    Clark解決方法是只要有數(shù)據(jù)到達就發(fā)送確認,但宣布的窗口大小為零,直到或者緩存空間已能放入具有最大長度的報文段,或者緩存空間的一半已經(jīng)空了。
?延遲的確認    第二個解決方法是延遲一段時間后再發(fā)送確認。這表示當一個報文段到達時并不立即發(fā)送確認。接收端在確認收到的報文段之前一直等待,直到入緩存有足夠的空間為止。延遲的確認防止了發(fā)送端的TCP滑動其窗口。當發(fā)送端的TCP發(fā)送完其數(shù)據(jù)后,它就停下來了。這樣就防止了這種癥狀。
遲延的確認還有另一個優(yōu)點:它減少了通信量。接收端不需要確認每一個報文段。但它也有一個缺點,就是遲延的確認有可能迫使發(fā)送端重傳其未被確認的報文段。
可以用協(xié)議來平衡這個優(yōu)點和缺點,例如現(xiàn)在定義了確認的延遲不能超過500毫秒






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1