發送端或接收端在發送、接收資料時,效率太差稱之。
現在有 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
沒有留言:
張貼留言