TCP三次握手,四次挥手异常情况

1、三次握手

  (1)、client第一个syn包丢失,没有收到server的ack,则client进行持续重传syn包。总尝试时间为75秒。参与文献《TCP/IP详解 卷1:协议》p178

  (2)、server收到了client的syn,并发出了syn+ack包,syn+ack包丢失。

    client方面,因为没收server的。将执行情况(1);

    server方面,超时时间内没有收到client的ack包(或者数据包),会持续发送syn+ack包;

  (3)、当Client端收到Server的SYN+ACK应答后,其状态变为ESTABLISHED,并发送ACK包给Server;

    如果此时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自动关闭这个连接。

  如果此时client向server发送数据包,server能正常接收数据。并认为连接已正常。参考:https://blog.csdn.net/zerooffdate/article/details/79359726

  应用层编写socket代码时,三次握手发生在client的connect,所以为了避免长时间(75秒)无响应连接,应设置为非阻塞socket,同时用select检测设置合适的超时时间。

猜你喜欢

转载自www.cnblogs.com/quehualin/p/10409607.html