tcp握手


https://xiaolincoding.com/network/3_tcp/quic.html#quic-%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%8F%AF%E9%9D%A0%E4%BC%A0%E8%BE%93%E7%9A%84

TCP三次握手

三次握手用于建立TCP连接,确保客户端和服务器之间能够可靠地通信。

  1. 第一次握手(SYN)

    • 客户端发送一个SYN(同步)报文段到服务器,请求建立连接。
    • 报文段中包含客户端的初始序列号(seq)。
  2. 第二次握手(SYN-ACK)

    • 服务器收到SYN后,发送一个SYN-ACK报文段,确认接收到客户端的SYN。
    • 这个报文段中包含服务器的初始序列号(seq)和客户端的序列号加1(ack),表示确认号。
  3. 第三次握手(ACK)

    • 客户端收到SYN-ACK后,发送一个ACK报文段,确认收到服务器的SYN-ACK。
    • 这个报文段的确认号为服务器的序列号加1(ack),同时客户端可以在此报文段中发送数据(可选)。

经过三次握手,客户端和服务器的连接建立成功。

TCP四次挥手

四次挥手用于终止TCP连接,确保双方能够正常关闭连接,避免数据丢失。

  1. 第一次挥手(FIN)

    • 主动关闭连接的一方(比如客户端)发送一个FIN(结束)报文段,表示不再发送数据。
    • 这个报文段中包含客户端的序列号(seq)。
  2. 第二次挥手(ACK)

    • 另一方(服务器)收到FIN后,发送一个ACK报文段,确认收到FIN。
    • 这个报文段的确认号为客户端的序列号加1(ack)。
  3. 第三次挥手(FIN)

    • 服务器准备关闭连接后,发送一个FIN报文段,表示也不再发送数据。
    • 这个报文段中包含服务器的序列号(seq)。
  4. 第四次挥手(ACK)

    • 客户端收到服务器的FIN后,发送一个ACK报文段,确认收到服务器的FIN。
    • 这个报文段的确认号为服务器的序列号加1(ack)。
为什么要四次挥手

防止服务端发送 fin的包丢失,导致客户端无法接收。


文章作者: K1T0
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 K1T0 !
  目录