TCP的錯誤恢復特性是我們用來定位、診斷並最終修復網絡高延遲的最好工具。
常見的TCP錯誤恢復特性有:TCP重傳、TCP重復確認和快速重傳
1. TCP重傳:
重傳數據包是TCP最基本的錯誤恢復特性之一,用來對付數據包的丟失。
數據包丟失可能原因有很多,如:出故障的應用程序、流量負載沉重的路由器或臨時性的服務中斷。
數據包層次上的移動速度非常快,而且數據包丟失通常都是暫時的,因此TCP能否檢測到數據包丟失並恢復至關重要。
如何決定是否重傳:
決定是否重傳數據包的主要機制叫做:重傳計時器,這個計時器負責維護一個重傳超時(RTO--Retransmission timeout)的值。
當使用TCP傳輸一個數據包時,就啟動重傳計時器,當收到這個數據包的ACK應答時,計時器就停止。從發送數據包到接收ACK確認之間的時間被稱為往返時間(Round-Trip time,RTT),若干個這樣的時間平均下來,可計算出最終的RTO值。
一旦RTO值確定下來,重傳計時器就被用於每個傳輸的數據包,以確定數據包是否丟失。
當報文發送之后,但接收方尚未發送TCP ACK報文,發送方假設源報文丟失並將其重傳。重傳之后,RTO值加倍;如果在2倍RTO值到達之前還是沒有收到ACK報文,就再次重傳。如果仍然沒有收到ACK,那么RTO值再次加倍。如此持續下去,每次重傳RTO都翻倍,直到收到ACK報文或發送方達到配置的最大重傳次數。
最大重傳次數取決於發送操作系統的配置值。默認情況下,Windows主機默認重傳5次。大多數Linux系統默認最大15次。兩種操作系統都可配置。