下面给出一个详细的 TCP 通信流程图 ,演示 客户端(Client) 与 服务器(Server) 之间通过 TCP 协议进行通信时的各个步骤。这里假设:
- 服务器 IP:
192.168.1.100
,监听 80 端口 - 客户端 IP:
192.168.1.200
,使用随机分配的端口 (示例中为50000
)
下面的流程图按 三次握手 、数据交互 、四次挥手 的顺序展示。为便于阅读,采用 ASCII 画出大致示意。
┌─────────────────────┐ ┌─────────────────────┐
│ │ │ │
│ Client (C) │ │ Server (S) │
│ IP: 192.168.1.200 │ │ IP: 192.168.1.100 │
│ Port: 50000 (随机)│ │ Port: 80 (固定) │
│ │ │ │
└─────────┬───────────┘ └─────────┬───────────┘
│ │
│ 1. TCP 三次握手 - 第一次握手 │
│ C → S: 发送 SYN (同步序列号) │
│───────────────────────────────────────>│
│ │
│ 2. TCP 三次握手 - 第二次握手 │
│ S → C: 返回 SYN + ACK │
│<───────────────────────────────────────│
│ │
│ 3. TCP 三次握手 - 第三次握手 │
│ C → S: 发送 ACK │
│───────────────────────────────────────>│
│ │
│ ┌-----------------------------------┐ │
│ │ <--- 连接建立 (握手完成) ---> │ │
│ └-----------------------------------┘ │
│ │
│ │
│ 4. 发送数据 (C → S) │
│ 例如: HTTP GET 请求 │
│───────────────────────────────────────>│
│ │
│ 5. 接收数据 (S → C) │
│ 例如: HTTP 200 OK + 网页内容 │
│<───────────────────────────────────────│
│ │
│ (此过程可以多次进行) │
│ │
│ ┌-----------------------------------┐ │
│ │ <--- 数据交互阶段 ---> │ │
│ └-----------------------------------┘ │
│ │
│ 6. TCP 四次挥手 - 第一次 │
│ C → S: 发送 FIN │
│───────────────────────────────────────>│
│ │
│ 7. TCP 四次挥手 - 第二次 │
│ S → C: 返回 ACK │
│<───────────────────────────────────────│
│ │
│ 8. TCP 四次挥手 - 第三次 │
│ S → C: 发送 FIN │
│<───────────────────────────────────────│
│ │
│ 9. TCP 四次挥手 - 第四次 │
│ C → S: 返回 ACK │
│───────────────────────────────────────>│
│ │
│ ┌-----------------------------------┐ │
│ │ <--- 连接断开 (挥手完成) ---> │ │
│ └-----------------------------------┘ │
│ │
┌─────────▼───────────┐ ┌─────────▼───────────┐
│ │ │ │
│ Client 断开完成 │ │ Server 断开完成 │
└─────────────────────┘ └─────────────────────┘
流程说明
-
三次握手 (连接建立)
- 第一次握手 :客户端向服务器发送
SYN
包,表示"我要建立连接"。 - 第二次握手 :服务器收到后,向客户端返回
SYN + ACK
,表示"同意并确认连接"。 - 第三次握手 :客户端再给服务器发送
ACK
,确认握手成功。此后,TCP 连接正式建立。
- 第一次握手 :客户端向服务器发送
-
数据交互 (请求/响应)
- 连接建立后,客户端可以向服务器发送数据(例如 HTTP GET 请求)。
- 服务器处理请求后,返回给客户端所需的数据(例如 HTTP 响应)。
- 数据交互阶段 可以进行多次请求和响应,直到一方决定关闭连接。
-
四次挥手 (断开连接)
- 第一次 :客户端发送
FIN
,表示"我没有数据要发了,可以关闭了"。 - 第二次 :服务器返回
ACK
,表示"我知道了,你先别走,我也可能还有数据要发"。 - 第三次 :服务器发送
FIN
,表示"我也没有数据要发了,可以关闭了"。 - 第四次 :客户端最后一次返回
ACK
,表示"确认断开"。至此,连接完全关闭。
- 第一次 :客户端发送
其他要点
-
端口分配
- 服务器 端口通常固定(如 Web 服务器使用
80
或443
) - 客户端 端口随机分配(如
50000
),由操作系统自动决定。
- 服务器 端口通常固定(如 Web 服务器使用
-
TCP 的特性
- 有序传输 、可靠传输 :通过序列号 和确认机制保证数据完整
- 拥塞控制 、流量控制:确保在网络高负载时减少丢包、拥塞
-
UDP 的区别
- UDP 不需要三次握手,也没有四次挥手
- 数据发送不可靠,但速度快、延迟低,适合视频直播、在线游戏、语音通话等场景
-
网络安全与防火墙
- 防火墙可根据端口号(如
80
、443
)决定是否允许流量通过 - 服务器仅开放必要端口,可以减少被攻击风险
- 防火墙可根据端口号(如
以上流程图展示了典型的 TCP 通信过程。如果需要更加具体的代码示例、协议细节或者其他场景(例如 UDP、WebSocket、反向连接等),请告诉我!