轉載自三次握手的第三個ACK包丟了,TCP的處理方式
三次握手的第三個ACK包丟了,客戶端認為連接建立,寫數據時,會觸發RST。
當Client端收到Server的SYN+ACK應答后,其狀態變為ESTABLISHED,并發送ACK包給Server,如果此時ACK在網絡中丟失,那么Server端該TCP連接的狀態為SYN_RECV,并且依次等待3秒、6秒、12秒后重新發送SYN+ACK包,以便Client重新發送ACK包。
Server重發SYN+ACK包的次數,可以通過設置/proc/sys/net/ipv4/tcp_synack_retries修改,默認值為5。
如果重發指定次數后,仍然未收到ACK應答,那么一段時間后,Server自動關閉這個連接。
但是Client認為這個連接已經建立,如果Client端向Server寫數據,Server端將以RST包響應,方能感知到Server的錯誤