12月 07, 2010

可悲窗口 (Silly Window Syndrome)

Silly Window Syndrome

發送端或接收端在發送、接收資料時,效率太差稱之。
現在有 1 Byte 的資料要送但因為 TCP 與 IP 的 Header 最小總計為40Bytes,變成資料使用率是 1/41 < 2.5% 如此的使用效率過於低落

解法:
Delayed ACK
接收端收到 Data 後,不用馬上回 ACK。等到之後要送資料封包回去後再一起夾帶 ACK 封包回去。如果在等待的時間,又收到第二個封包,那就要馬上回傳這兩個封包的 ACK 了。
Nagle's Algorithm
當有資料要送時,不會立刻送出,除非下面條件之一成立
1. 要送出的資料累績一定量(MSS)。
2. 收到前一個送出資料的 ACK 時(表示之前的資料已成功送達, 此時不送也是讓頻寬空著)
演算法示意:

if there is new data to send /* 有資料要送 */
if the window size >= MSS and available data is >= MSS
send complete MSS segment now /* 會累績到 MSS 的量才送*/
else
if there is unconfirmed data still in the pipe
enqueue data in the buffer until an acknowledge is received
else /* 或者等到 ACK 回應 */
send data immediately
end if
end if
end if

沒有留言:

張貼留言