TCP三次握手和四次挥手

TCP 三次握手

TCP 三次握手(Three-Way Handshake)是用来建立可靠的 TCP 连接的过程。其目的是为了确保双方都有能力发送和接收数据,并且初始化双方的序列号和确认号。以下是三次握手的具体步骤:

  1. 第一次握手:客户端发送一个 SYN(同步序列编号)包到服务器,表明客户端希望建立连接。

    • 客户端发送一个 SYN 包,包含一个初始序列号(Sequence Number)。
    • 标志位:SYN=1,ACK=0
  2. 第二次握手:服务器收到 SYN 包后,回应一个 SYN-ACK 包,表示同意连接,并给出自己的初始序列号。

    • 服务器发送一个 SYN-ACK 包,包含服务器的初始序列号和对客户端初始序列号的确认号(客户端的序列号加一)。
    • 标志位:SYN=1,ACK=1
  3. 第三次握手:客户端收到 SYN-ACK 包后,发送一个 ACK 包以确认连接。

    • 客户端发送一个 ACK 包,确认服务器的序列号。
    • 标志位:SYN=0,ACK=1

连接建立后,客户端和服务器可以开始数据传输。

TCP 四次挥手

TCP 四次挥手(Four-Way Handshake)是用来关闭一个 TCP 连接的过程。其目的是确保双方都有机会完整地关闭连接并释放资源。以下是四次挥手的具体步骤:

  1. 第一次挥手:主动关闭连接的一方(通常是客户端)发送一个 FIN(结束)包,表示数据传输结束,准备关闭连接。

    • 客户端发送一个 FIN 包,包含当前序列号。
    • 标志位:FIN=1,ACK=0
  2. 第二次挥手:被动关闭连接的一方(通常是服务器)收到 FIN 包后,发送一个 ACK 包,确认收到关闭请求。

    • 服务器发送一个 ACK 包,确认客户端的序列号(序列号加一)。
    • 标志位:FIN=0,ACK=1
  3. 第三次挥手:服务器发送一个 FIN 包,表示服务器的数据传输也结束,准备关闭连接。

    • 服务器发送一个 FIN 包,包含当前序列号。
    • 标志位:FIN=1,ACK=0
  4. 第四次挥手:客户端收到 FIN 包后,发送一个 ACK 包,确认收到关闭请求,并进入 TIME-WAIT 状态,确保服务器收到 ACK 包。

    • 客户端发送一个 ACK 包,确认服务器的序列号(序列号加一)。
    • 标志位:FIN=0,ACK=1

客户端在 TIME-WAIT 状态下会等待一段时间(通常是 2MSL,最大报文段生存时间)以确保 ACK 包被服务器收到,然后正式关闭连接。

图示

TCP 三次握手
Client                 Server
  |       SYN          |
  |------------------->|
  |       SYN-ACK      |
  |<-------------------|
  |        ACK         |
  |------------------->|
  |                    |
TCP 四次挥手
Client                 Server
  |       FIN          |
  |------------------->|
  |        ACK         |
  |<-------------------|
  |                    |
  |       FIN          |
  |<-------------------|
  |        ACK         |
  |------------------->|
  |                    |

三次握手确保连接的建立是可靠的,四次挥手则确保连接的关闭是完整的。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值