• TCP四次挥手


      

    tcp四次挥手详解:

    挥手之前,客户端和服务器端都处于建立连接状态,客户端是主动关闭,服务器是被动关闭

    (1)首先客户端发送连接释放报文FIN=1,seq=u,主动关闭连接,并不在发送数据。TCP规定FIN报文不能携带数据,但是消耗一个序号,这时A进入FIN_WAIT_1(终止等待1)

    (2)服务器收到连接释放报文后,发送确认,ACK=1,seq=v,ack=u+1(因为上面消耗了一个序号),这个之后服务器进入了close_wait状态,并通知高层应用程序,因此从可客户端到服务器发送的这个连接就已经关闭了,这个时候TCP连接属于半关闭状态,就是客户端没有数据发送了,但是服务器还可以继续发送数据,当客户端收到服务器的确认回复报文的时候,就进入了FIN_WAIT_2状态

    (3)当服务器不需要向客户端发数据的时候,就可以向客户端发送释放连接报文,FIN=1,ACK=1,seq=w,ack=u+1,,之后进入

    LAST_ACK状态

    (4)客户端收到后立刻发送确认报文ACK=1,seq=u+1,ack=w+1,进入了TIME_WAIT状态(时间等待状态),必须经过时间等待计时器的2MSL(最长报文段寿命时间)后进入close状态,撤销TCB,此刻TCP连接结束

    上述除了时间等待计时器,还有一个保活计时器,设想,如果连接后,客户机断掉了,从此便不能与服务器进行通信,服务器没收到一次客户的数据的时候,都会重新这只保活计时器,但是如果两个小时没有收到的话,就发一次探测报文段,以后每隔75分钟发一次,联系发送10个,如果没有反应,服务器就认为客户机除了故障,直接关闭了这个连接

    为什么客户机的TIME_WAIT状态需要设置2MSL?

    (1)为了保证客户端最后发送的ACK报文能够准确的被服务器收到,所以他需要等一会,如果在服务器最后发送的FIN+ACK报文在一顿时间没有收到回复的话,会重新发送一次,如果客户端收到了,会重新发送ACK报文,并重新设置等待计时器,如果不设置这段时间,那么客户端发送ACK结束后,如果服务器没有收到的话,在重新向客户端重传的话,由于客户端已经处于close

    状态,将不再能接收到,这样的话服务器就不会正常的进入到close状态

    (2)防止已经失效的连接请求报文段出现在连接之中,客户端在发送完最后一个ACK报文的时候在经过2msl后,就可以是的本网络中的所有报文段全部消失,这样在下一个新的连接中就不会出现以前的连接请求报文的干扰

  • 相关阅读:
    原生JS中Ajax的使用方法
    back-to-top回到顶部
    atom插件
    git 命令操作
    常用font-family
    上传按钮美化
    mongodb
    GraphicsMagick命令
    enctype=“multipart/form-data”详解
    操作符
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6416314.html
Copyright © 2020-2023  润新知