TCP 通信流程图

下面给出一个详细的 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 断开完成    │
└─────────────────────┘               └─────────────────────┘

流程说明

  1. 三次握手 (连接建立)

    • 第一次握手 :客户端向服务器发送 SYN 包,表示"我要建立连接"。
    • 第二次握手 :服务器收到后,向客户端返回 SYN + ACK,表示"同意并确认连接"。
    • 第三次握手 :客户端再给服务器发送 ACK,确认握手成功。此后,TCP 连接正式建立。
  2. 数据交互 (请求/响应)

    • 连接建立后,客户端可以向服务器发送数据(例如 HTTP GET 请求)。
    • 服务器处理请求后,返回给客户端所需的数据(例如 HTTP 响应)。
    • 数据交互阶段 可以进行多次请求和响应,直到一方决定关闭连接。
  3. 四次挥手 (断开连接)

    • 第一次 :客户端发送 FIN,表示"我没有数据要发了,可以关闭了"。
    • 第二次 :服务器返回 ACK,表示"我知道了,你先别走,我也可能还有数据要发"。
    • 第三次 :服务器发送 FIN,表示"我也没有数据要发了,可以关闭了"。
    • 第四次 :客户端最后一次返回 ACK,表示"确认断开"。至此,连接完全关闭。

其他要点

  1. 端口分配

    • 服务器 端口通常固定(如 Web 服务器使用 80443
    • 客户端 端口随机分配(如 50000),由操作系统自动决定。
  2. TCP 的特性

    • 有序传输可靠传输 :通过序列号确认机制保证数据完整
    • 拥塞控制流量控制:确保在网络高负载时减少丢包、拥塞
  3. UDP 的区别

    • UDP 不需要三次握手,也没有四次挥手
    • 数据发送不可靠,但速度快、延迟低,适合视频直播、在线游戏、语音通话等场景
  4. 网络安全与防火墙

    • 防火墙可根据端口号(如 80443)决定是否允许流量通过
    • 服务器仅开放必要端口,可以减少被攻击风险

以上流程图展示了典型的 TCP 通信过程。如果需要更加具体的代码示例、协议细节或者其他场景(例如 UDP、WebSocket、反向连接等),请告诉我!

相关推荐
我的xiaodoujiao5 分钟前
Windows系统Web UI自动化测试学习系列3--浏览器驱动下载使用
前端·windows·测试工具·ui
violet-lz28 分钟前
Linux文件系统调用:文件调用函数与exec系统函数详解与应用
linux·运维·服务器
aesthetician1 小时前
@tanstack/react-query:React 服务器状态管理与数据同步解决方案
服务器·前端·react.js
学习同学1 小时前
从0到1制作一个go语言服务器 (一) 配置
服务器·开发语言·golang
袁泽斌的学习记录2 小时前
ubuntu22.04安装cuda11.4版本
linux·运维·服务器
JanelSirry2 小时前
VMware+RockyLinux+ikuai+docker+cri-docker+k8s+calico BGP网络 自用 实践笔记(底稿)
网络·docker·kubernetes
chuxinweihui2 小时前
Socket编程UDP
linux·网络·网络协议·udp·通信
北京耐用通信2 小时前
神秘魔法?耐达讯自动化Modbus TCP 转 Profibus 如何为光伏逆变器编织通信“天网”
网络·人工智能·网络协议·网络安全·自动化·信息与通信
万事可爱^2 小时前
如何在云服务器上使用LLaMA Factory框架微调模型
运维·服务器·llm·sft·llama·模型微调·ai agent
Ronin3052 小时前
【Linux网络】Socket编程:UDP网络编程实现Echo Server
linux·网络·udp·网络通信·socket编程