4-5:TCP协议之确认应答(ACK)机制和超时重传机制
文章目錄
- 一:TCP的確認應答(ACK)機制
- 二:超時重傳機制
一:TCP的確認應答(ACK)機制
在TCP中,當發送端的數據達到接收主機時,接收端主機會返回一個已收到消息的通知,這個消息叫做ACK(確認應答,PositiveAcknowlegementPositive AcknowlegementPositiveAcknowlegement)
通常,兩個人對話時,在談話的停頓處可以點頭或詢問以確認談話內容。如果對方遲遲沒有回應,說話的一方還可以重復一遍以保證對方確實可以聽到。因此,對方是否理解了此次對話的內容以及是否聽到了對話的內容都要靠對方的反應來判斷。
網絡中的確認應答就類似于上面的例子。當對方聽懂對話內容時會說:“嗯”,這就相當于返回了一個確認應答(ACKACKACK)。而當對方沒有理解對話內容或沒有聽清時往往會問一句“啊?”
TCP通過肯定的ACK實現可靠的數據傳輸。當發送端將數據發出之后會等待對端的確認應答,如果有確認應答,說明數據已經成功到達,如果沒有,那么數據有可能丟失了
如下圖所示,在一定時間內沒有等到確認應答,發送端就可以認為數據已經丟失,就會進行重發
未收到確認應答也并不意味著數據一定丟失,有時也有可能是因為數據收到,但是ACK卻在傳輸的途中丟了。因此這種情況也會導致發送端因沒有及時收到ACK,而認為數據沒有到達目的地,從而進行重傳
此外,還有一種情況對于接收方來說會比較難受。就是確認應答延時到達,在等待的過程中發送端會誤認為數據丟失,所以會反復觸發重傳,因此對于接受主機來說,它會反復接收到相同的數據,而為了對上層應用提供可靠的傳輸,就必須得放棄重復的數據包。為此就必須要引入一種機制,使其能夠識別是否已經接受數據,又能判斷是否需要接受
序列號是按照順序給發送數據的每一個字節都標上號碼的編號。接收端查詢接收數據TCP首部中的序列號和數據的長度,將自己下一步應該接受的序號作為確認應答返送回去。就這樣,通過序列號和確認應答號,TCP可以實現可靠傳輸
發送的數據
序列號和確認應答號
二:超時重傳機制
超時重傳的超時是指在重發數據之前,等待確認應答到來的那個特定時間間隔。如果超過了這個時間仍然為收到確認應答,發送端將會重發數據。那么這個數據是如何確定的呢?
最理想就是找到一個最小時間,它能保證確認應答一定能在這個時間內返回。但是這個時間長短隨著數據包途徑的網絡環境的不同會有所變化。
TCP要求不論處在何種網絡環境下都要提供高性能通信,而且無論網絡擁堵的情況發生如何改變,都必須保持這一特性。為此,它在每次發包時都會計算往返時間及其偏差,將這個往返時間和偏差相加重發超時的時間,就是比這個綜合要稍微大一點的值。
在BSD的Unix及Windows系統中,超時都以0.5s為單位進行控制,因此重發超時都是0.5s的整數倍。不過由于最初的數據包還不知道往返時間,所以其重發超時一般設置為6s左右
數據被重發以后若還是收不到應答,就會進行再次發送,此時,等待確認應答的時間將會以2倍,4倍的指數函數延長
不過,數據也不會無限,反復的重發。當達到一定的重發次數之后,如果仍然沒有任何確認應答返回,就會判斷為網絡或對端主機發生異常,強制關閉連接。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的4-5:TCP协议之确认应答(ACK)机制和超时重传机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于结对和团队组建
- 下一篇: 【线性代数本质】1:向量究竟是什么