美文网首页
TCP3次握手和4次挥手

TCP3次握手和4次挥手

作者: 1点01的n次方 | 来源:发表于2021-12-27 16:19 被阅读0次

    一,使用plantuml制图
    @startuml
    Client -> Server: SYN,J
    Server -> Client: SYN,X;ACK,J+1
    Client -> Server: ACK,X+1

    Client -> Server: FIN
    Server -> Client: ACK
    Server -> Client: FIN
    Client -> Server: ACK
    @enduml

    java -jar plantuml.jar sequenceDiagram.txt
    
    sequenceDiagram.png

    建立链接过程:
    1,客户端发送 SYN 报文给服务端请求建立链接,进入SYN-SENT状态
    2,服务器发送 SYN+ACK报文给客户端表示同意建立链接,进入SYN_RECV状态
    3,客户端发送 ACK 报文给服务端表示收到同意链接 ,进入已链接状态

    问题:为何是3次而不是2次握手?
    客户端发送第一个报文,超时后,发送第二个syn报文,第二个到达了服务端,服务端发送确认报文且建立链接,传完数据之后释放链接,这之后收到了客户端发送的第一个报文,发送确认报文且建立链接,但此时客户端收到了也没理会,会浪费服务器资源

    释放链接过程:
    1,客户端发送FIN报文,进入FIN-1
    2,服务端收到返回ACK报文,进入Close-Wait状态
    3,服务端发送 FIN报文
    4,客户端发送ACK报文

    为何是4步挥手?
    因为 ack不能跟fin一起组合发送报文,服务器收到FIN报文时,可能服务端还有数据没发送完,所以先发送ACK报文表示知道了,等发送完数据之后再发送FIN报文。

    相关文章

      网友评论

          本文标题:TCP3次握手和4次挥手

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