美文网首页
607,TCP连接的三次握手(面试点:三次握手:1:一个客户端发

607,TCP连接的三次握手(面试点:三次握手:1:一个客户端发

作者: 枫叶1234 | 来源:发表于2021-04-02 12:35 被阅读0次

    第一次握手:客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认;

    第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

    握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP 连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开 TCP 连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)

    image.png

    四次挥手

    CLIENT SERVER

    FIN_WAIT ----------FIN M------------>
    <---------ACK=1,ack=M+1------CLOSE_WAIT
    TIME_WAIT<--------------FIN N----------LASK_ACK
    ---------ACK=1,ack=K+1----->CLOSED

    问题一:为什么挥手需要四次呢?为什么不能将ACK和FIN报文一起发送?

    当服务器收到FIN报文时候,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端“你发的FIN我收到了”。只有等到服务端所有的报文都发送完了,才能发FIN报文,所以要讲ACK和FIN分开发送,这就导致需要四次挥手

    相关文章

      网友评论

          本文标题:607,TCP连接的三次握手(面试点:三次握手:1:一个客户端发

          本文链接:https://www.haomeiwen.com/subject/fmgfkltx.html