1. 程式人生 > >TCP的接收緩衝區滿了,收到資料後會向傳送方傳送ACK嗎?該怎麼解決

TCP的接收緩衝區滿了,收到資料後會向傳送方傳送ACK嗎?該怎麼解決

問題:TCP的接收緩衝區滿了,收到資料後會向傳送方傳送ACK嗎?

TCP的傳送緩衝區中的資料,如果收不到接收方的ACK就不會刪除,導致傳送緩衝區溢位。如果接收方的緩衝區滿了,收到資料後會不會向傳送方發ACK呢?如果不發ACK,那麼就沒有接收緩衝區溢位的概念了,只要控制住傳送方,就不會丟包;如果發ACK,那傳送方就沒辦法控制是否繼續傳送了,接收緩衝區就會造成溢位,導致丟包。事實是怎樣的呢?我這樣理解正確嗎?

答案:1. 只要收到了包,就會ACK。
2. TCP在ACK的同時會帶有window大小值,表示這邊能接受的資料量。傳送方會根據這個調整資料量。
3. 接收方緩衝區滿時,回給傳送方的window值就是0。


4. 傳送方看到window為0的包,會啟動一個定時器,隔一段時間發一個包試探。
5. 一旦接收方緩衝區有足夠空間了,就會給window賦上非0值。傳送方就又開始傳送了。