2025-09-20
Web
00
请注意,本文编写于 76 天前,最后修改于 76 天前,其中某些信息可能已经过时。

目录

TCP 三次握手与四次挥细模型
一、三次握手(建立连接)
握手过程:
1. 第一次握手 —— Client → Server(SYN)
2. 第二次握手 —— Server → Client(SYN + ACK)
3. 第三次握手 —— Client → Server(ACK)
二、四次挥手(关闭连接)
挥手过程:
1. 第一次挥手 —— Client → Server(FIN + ACK)
2. 第二次挥手 —— Server → Client(ACK)
3. 第三次挥手 —— Server → Client(FIN + ACK)
4. 第四次挥手 —— Client → Server(ACK)
三、状态变化总结
三次握手
四次挥手

TCP 三次握手与四次挥细模型

一、三次握手(建立连接)

设:

  • 客户端:10.0.0.1:50000,初始序列号 ISN_c = 1000
  • 服务端:10.0.0.2:80,初始序列号 ISN_s = 2000

握手过程:

1. 第一次握手 —— Client → Server(SYN)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1000 Ack = 0 Flags = SYN Options = MSS=1460, WS=7, SACK, TSval=123456, TSecr=0
  • 客户端请求建立连接,发送 SYN。
  • 消耗一个序号(Seq=1000)。

2. 第二次握手 —— Server → Client(SYN + ACK)

text
src: 10.0.0.2:80 → dst: 10.0.0.1:50000 Seq = 2000 Ack = 1001 (确认客户端 SYN) Flags = SYN, ACK Options = MSS=1460, WS=7, SACK, TSval=654321, TSecr=123456
  • 服务端同意建立连接,返回 SYN 并确认客户端 SYN。
  • 消耗一个序号(Seq=2000)。

3. 第三次握手 —— Client → Server(ACK)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1001 Ack = 2001 (确认服务端 SYN) Flags = ACK Options = TSval=123457, TSecr=654321
  • 客户端确认服务端的 SYN。
  • 双方进入 ESTABLISHED 状态,连接建立。

二、四次挥手(关闭连接)

设:

  • 当前连接已建立,客户端下一个 Seq=1001,服务端下一个 Seq=2001。

挥手过程:

1. 第一次挥手 —— Client → Server(FIN + ACK)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1001 Ack = 2001 Flags = FIN, ACK
  • 客户端请求关闭连接,发送 FIN。
  • 消耗一个序号(Seq=1001)。

2. 第二次挥手 —— Server → Client(ACK)

text
src: 10.0.0.2:80 → dst: 10.0.0.1:50000 Seq = 2001 Ack = 1002 (确认客户端 FIN) Flags = ACK
  • 服务端确认收到客户端的 FIN。
  • 客户端进入 FIN_WAIT_2,服务端进入 CLOSE_WAIT。

3. 第三次挥手 —— Server → Client(FIN + ACK)

text
src: 10.0.0.2:80 → dst: 10.0.0.1:50000 Seq = 2001 Ack = 1002 Flags = FIN, ACK
  • 服务端发送自己的 FIN,表示要关闭连接。
  • 消耗一个序号(Seq=2001)。

4. 第四次挥手 —— Client → Server(ACK)

text
src: 10.0.0.1:50000 → dst: 10.0.0.2:80 Seq = 1002 Ack = 2002 (确认服务端 FIN) Flags = ACK
  • 客户端确认服务端的 FIN。
  • 服务端进入 CLOSED。
  • 客户端进入 TIME_WAIT,等待 2*MSL 后进入 CLOSED。

三、状态变化总结

三次握手

  • ClientCLOSED → SYN_SENT → ESTABLISHED
  • ServerLISTEN → SYN_RECEIVED → ESTABLISHED

四次挥手

  • ClientESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
  • ServerESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

本文作者:晏秋

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!