TCP如何實現可靠傳輸?實現細節?
- 如何實現可靠傳輸?
- 擁塞控制的主要機制
- TCP流量控制怎么實現的?
如何實現可靠傳輸?
TCP通過自身的序列號、確認應答、數據效驗、超時重傳、流量控制、擁塞避免,確保了數據傳輸的可靠性和效率。
- 流量控制:TCP主要通過滑動窗口機制進行流量控制,確保接收方能夠處理發送方的數據量。
- 序列號:每個TCP段都有一個序列號,確保數據包的正確順序。
- 數據效驗:TCP使用效驗和來檢測收到的數據在傳輸中是否發生錯誤,如果發生錯誤就丟棄,等待重傳。
- 確認應答:接收方在收到發送方的數據后,會返回ACK確認收到數據。如果發送方超時間沒有收到ACK,會重發數據包。
- ** 超時重傳**:發送方超過一定時間沒有收到接收方發送的ACK,就會重傳數據。
- 擁塞控制:TCP通過算法如**慢啟動,擁塞避免、快重傳、快恢復,來控制數據的發送速率,防止網絡擁塞。
擁塞控制的主要機制
擁塞控制可以在網絡出現擁塞時,動態的調整數據傳輸的速率,防止網絡過載。主要包括一下幾個方面:
- 慢啟動:初級階段,TCP發送方會發送較小的數據,隨著收到數據的ACK,逐漸增加發送窗口的大小,實現指數級的增長。
- 擁塞避免:隨著慢啟動到達閾值后,TCP進入擁塞避免階段,已線性的增長方式增加發送速率,而不是之前慢啟動階段的指數級增長。
- 快速重傳:如果發送方收到相同的確認,直接快速發送未確認的數據包。默認之前以及丟失。
- 快速恢復:在發生快重傳之后,TCP進入快恢復階段,將慢啟動閾值設置為當前值的一半,并且將窗口值設置為當前的慢啟動閾值。
TCP流量控制怎么實現的?
流量控制就是讓發送方的發送速率不要太快,讓接收方來得及接收數據。使用滑動窗口機制就可以實現流量控制,主要是動態調整發送方和接收方之間的數據傳輸速率。
- 接收窗口(
rwnd
)的含義:rwnd
是接收方在ACK
報文中設置的一個整數,單位為“字節”,表示接收緩沖區當前可接收的最大數據量。
- 計算公式:
rwnd = 接收緩沖區總大小 - 已接收未讀取的數據量
。- 若接收方應用程序讀取數據快,
rwnd
會增大(緩沖區空閑多); - 若應用程序讀取慢,
rwnd
會減小,直至為 0(緩沖區滿)。
- 若接收方應用程序讀取數據快,
- 接收方窗口大小:發送方維護一個“發送窗口”,其大小由
rwnd
決定(發送窗口大小 ≤ rwnd
)。發送窗口表示當前可發送但未收到確認的最大數據量,包含三部分數據:
- 已發送且已確認:無需關注(已完成傳輸)。
- 已發送但未確認:需等待接收方
ACK
確認。 - 未發送但允許發送:在發送窗口范圍內,可隨時發送。
發送窗口會隨以下情況“滑動”(調整范圍):
- 當收到接收方的
ACK
確認后,窗口左側向右移動(已確認的數據移出窗口); - 當接收方
rwnd
增大時,窗口右側向右移動(可發送的新數據量增加)。