作者信息:https://home.cnblogs.com/u/huangjiabobk

在Linux中,三次握手,四次挥手分别指的是什么?

在 Linux 系统中,三次握手和四次挥手是 TCP(传输控制协议)通信过程中的两个重要阶段,分别用于建立和关闭 TCP 连接。以下是它们的详细解释:

1. 三次握手(Three-Way Handshake)

三次握手是 TCP 协议用于建立可靠连接的过程。它的目的是确保双方在通信开始之前都准备好,并且能够接收和发送数据。以下是三次握手的具体步骤:

1.1 第一次握手:SYN(同步)
  • 客户端:客户端(例如浏览器)向服务器发送一个 TCP 包,标志位中包含 SYN(同步序列号)。这个包的目的是请求建立连接。
  • 内容
    • 标志位:SYN
    • 序列号:客户端选择一个初始序列号(seq),通常是一个随机值。
    • 目的端口:目标服务器的端口号(例如 80 或 443)。
    • 源端口:客户端的本地端口号(通常是动态分配的)。
1.2 第二次握手:SYN-ACK(同步-确认)
  • 服务器:服务器收到客户端的 SYN 包后,会回复一个 SYN-ACK 包,表示确认收到请求并同意建立连接。
  • 内容
    • 标志位:SYN 和 ACK
    • 序列号:服务器选择自己的初始序列号(seq),通常也是一个随机值。
    • 确认号:服务器将客户端的序列号加 1(ack = seq + 1),表示确认收到客户端的 SYN 包。
    • 目的端口:客户端的源端口号。
    • 源端口:服务器的端口号。
1.3 第三次握手:ACK(确认)
  • 客户端:客户端收到服务器的 SYN-ACK 包后,回复一个 ACK 包,表示确认收到服务器的响应,此时 TCP 连接建立完成。
  • 内容
    • 标志位:ACK
    • 序列号:客户端的序列号加 1(seq + 1)。
    • 确认号:服务器的序列号加 1(ack = seq + 1),表示确认收到服务器的 SYN-ACK 包。
    • 目的端口:服务器的端口号。
    • 源端口:客户端的源端口号。
2. 四次挥手(Four-Way Handshake)

四次挥手是 TCP 协议用于关闭连接的过程。它的目的是确保双方在关闭连接之前已经完成数据传输,并且双方都同意关闭连接。以下是四次挥手的具体步骤:

2.1 第一次挥手:FIN(结束)
  • 主动关闭方:假设客户端希望关闭连接,客户端向服务器发送一个 FIN 包,表示不再发送数据。
  • 内容
    • 标志位:FIN
    • 序列号:客户端的当前序列号(seq)。
    • 目的端口:服务器的端口号。
    • 源端口:客户端的源端口号。
2.2 第二次挥手:ACK(确认)
  • 被动关闭方:服务器收到客户端的 FIN 包后,回复一个 ACK 包,表示确认收到客户端的关闭请求。
  • 内容
    • 标志位:ACK
    • 序列号:服务器的当前序列号(seq)。
    • 确认号:客户端的序列号加 1(ack = seq + 1),表示确认收到客户端的 FIN 包。
    • 目的端口:客户端的源端口号。
    • 源端口:服务器的端口号。
2.3 第三次挥手:FIN(结束)
  • 被动关闭方:服务器完成自己的数据传输后,向客户端发送一个 FIN 包,表示服务器也不再发送数据。
  • 内容
    • 标志位:FIN
    • 序列号:服务器的序列号加 1(seq + 1)。
    • 目的端口:客户端的源端口号。
    • 源端口:服务器的端口号。
2.4 第四次挥手:ACK(确认)
  • 主动关闭方:客户端收到服务器的 FIN 包后,回复一个 ACK 包,表示确认收到服务器的关闭请求,此时连接正式关闭。
  • 内容
    • 标志位:ACK
    • 序列号:客户端的序列号加 1(seq + 1)。
    • 确认号:服务器的序列号加 1(ack = seq + 1),表示确认收到服务器的 FIN 包。
    • 目的端口:服务器的端口号。
    • 源端口:客户端的源端口号。
3.为什么需要三次握手和四次挥手?
3.1 三次握手的原因
  1. 防止已失效的连接请求报文突然又传送到了服务端

    • 如果只有两次握手,可能会出现客户端发送的 SYN 包在网络中延迟到达,服务器误以为是一个新的连接请求,从而导致错误。
    • 通过三次握手,客户端的最后一次 ACK 确认可以确保服务器收到的是一个有效的连接请求。
  2. 同步双方的初始序列号

    • 三次握手过程中,客户端和服务器分别选择自己的初始序列号,并通过 SYNACK 确认对方的序列号,从而确保双方在数据传输过程中能够正确地跟踪数据包。
3.2 四次挥手的原因
  1. 确保双方都已完成数据传输

    • 四次挥手允许客户端和服务器分别独立地关闭自己的发送方向,确保双方在关闭连接之前已经完成所有数据的传输。
  2. 防止数据丢失

    • 如果只有三次挥手,可能会出现一方发送的 FIN 包丢失,导致另一方无法正确关闭连接。通过四次挥手,双方的 ACK 确认可以确保对方已经收到关闭请求。
4.我的总结
  • 三次握手:用于建立 TCP 连接,确保双方准备好并同步初始序列号。
  • 四次挥手:用于关闭 TCP 连接,确保双方都已完成数据传输并同意关闭连接。

综上所述,这两个过程是 TCP 协议可靠性和稳定性的重要保障机制。

posted @ 2025-03-20 23:15  黄嘉波  阅读(54)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波