TCP協議筆記
1 TCP 三次握手、四次揮手
1.1 三次握手
client: CLOSE->SYN_SEND->ESTABLISHED
server: LISTEN->SYN_RECV->ESTABLISHED
客戶端發送連接請求,發送SYNC,狀態變為SYN_SEND;如果服務器端接收到SYN報文,狀態變為SYN_RECV,同時服務器端發送ACK+SYN報文;如果客戶端收到ACK+SYN報文,則繼續發送ACK確認報文,此時客戶端變為ESTABLISHED狀態;如果服務器端收到ACK報文,服務器端也變為ESTABLISHED狀態。
1.2 四次揮手
client: FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT
server: CLOSE_WAIT->LAST_ACK->CLOSED
客戶端關閉連接,發送FIN報文給服務器,狀態變為FIN_WAIT_1,此時客戶端停止發送數據,但仍能接收服務器端發送過來的數據;服務器端收到FIN,停止發送數據,回復客戶端ACK報文,此時狀態改為CLOSE_WAIT狀態; 服務器端關閉連接,發送FIN報文給客戶端,此時狀態變為LAST_ACK;如果客戶端收到服務器端的FIN報文,則客戶端發送ACK確認報文,並且進入TIME_WAIT狀態;如果服務器收到客戶端的ACK報文,則進入CLOSED狀態; 在TIME_WAIT期間,如果客戶端沒有再收到服務端的FIN報文(也即ACK報文沒有丟失),則客戶端也進入CLOSED狀態。
2 擁塞控制
2.1 慢開始,擁塞控制
擁塞窗口、ssthresh關系
當cwnd<ssthresh時,使用慢開始算法(指數增長)。
當cwnd>ssthresh時,改用擁塞避免算法(線性增長)
當cwnd=ssthresh時,慢開始與擁塞避免算法任意;
本來遇到網絡擁塞時,也即網絡丟包;ssthresh設置為網絡擁塞時cwnd值的一半,cwnd此時 重新為1開始發送;周而復始。
2.2 快重傳,快恢復
快重傳配合使用的還有快恢復算法,有以下兩個要點:
①當發送方連續收到三個重復確認時,就執行“乘法減小”算法,把ssthresh門限減半。但是接下去並不執行慢開始算法。
②考慮到如果網絡出現擁塞的話就不會收到好幾個重復的確認,所以發送方現在認為網絡可能沒有出現擁塞。所以此時不執行慢開始算法,而是將cwnd設置為ssthresh的大小,然後執行擁塞避免算法。如下圖:
TCP協議筆記