TCP三次握手第三次握手時ACK丟失怎么辦


Server 端

    第三次的ACK在網絡中丟失,那么Server 端該TCP連接的狀態為SYN_RECV,並且會根據 TCP的超時重傳機制,會等待3秒、6秒、12秒后重新發送SYN+ACK包,以便Client重新發送ACK包。

    而Server重發SYN+ACK包的次數,可以通過設置/proc/sys/net/ipv4/tcp_synack_retries修改,默認值為5.

    如果重發指定次數之后,仍然未收到 client 的ACK應答,那么一段時間后,Server自動關閉這個連接。

 

Client 端

    在linux c 中,client 一般是通過 connect() 函數來連接服務器的,而connect()是在 TCP的三次握手的第二次握手完成后就成功返回值。也就是說 client 在接收到 SYN+ACK包,它的TCP連接狀態就為 established (已連接),表示該連接已經建立。那么如果 第三次握手中的ACK包丟失的情況下,Client 向 server端發送數據,Server端將以 RST包響應,方能感知到Server的錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM