TCP三次握手,四次揮手異常狀況

一、三次握手

  (1)、client第一個syn包丟失,沒有收到server的ack,則client進行持續重傳syn包。總嘗試時間爲75秒。參與文獻《TCP/IP詳解 卷1:協議》p178網絡

 

  (2)、server收到了client的syn,併發出了syn+ack包,syn+ack包丟失。併發

    client方面,由於沒收server的。將執行狀況(1);socket

    server方面,超時時間內沒有收到client的ack包(或者數據包),會持續發送syn+ack包;tcp

 

  (3)、當Client端收到Server的SYN+ACK應答後,其狀態變爲ESTABLISHED,併發送ACK包給Server;spa

    若是此時ACK在網絡中丟失,那麼Server端該TCP鏈接的狀態爲SYN_RECV,而且依次等待3秒、6秒、12秒後從新發送SYN+ACK包,以便Client從新發送ACK包,以便Client從新發送ACK包。
           
  Server重發SYN+ACK包的次數,能夠經過設置/proc/sys/net/ipv4/tcp_synack_retries修改,默認值爲5。
             
  若是重發指定次數後,仍然未收到ACK應答,那麼一段時間後,Server自動關閉這個鏈接。.net

  若是此時client向server發送數據包,server能正常接收數據。並認爲鏈接已正常。參考:https://blog.csdn.net/zerooffdate/article/details/79359726server

 

  應用層編寫socket代碼時,三次握手發生在client的connect,因此爲了不長時間(75秒)無響應鏈接,應設置爲非阻塞socket,同時用select檢測設置合適的超時時間。blog

相關文章
相關標籤/搜索