TCP 通信流程图

devtools/2025/3/21 2:30:12/

下面给出一个详细的 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、反向连接等),请告诉我!


http://www.ppmy.cn/devtools/168782.html

相关文章

Android Fresco 框架兼容模块源码深度剖析(六)

Android Fresco 框架兼容模块源码深度剖析 一、引言 在 Android 开发的多元环境中&#xff0c;兼容性是衡量一个框架优劣的重要指标。Fresco 作为一款强大的图片加载框架&#xff0c;其兼容模块在确保框架能在不同 Android 版本、不同设备和不同图片格式下稳定运行方面发挥着…

MySQL常用函数详解及SQL代码示例

MySQL常用函数详解及SQL代码示例 引言当前日期和时间函数字符串函数数学函数聚合函数结论 引言 MySQL作为一种广泛使用的关系型数据库管理系统&#xff0c;提供了丰富的内置函数来简化数据查询、处理和转换。掌握这些函数可以大大提高数据库操作的效率和准确性。本文将详细介绍…

VUE中使用路由router跳转页面

在 Vue 中&#xff0c;this.$router.push 是用来跳转到另一个路由的方法&#xff0c;它可以传递参数。Vue Router 提供了多种方式来传递路由参数&#xff0c;常见的有 查询参数&#xff08;query&#xff09; 和 路由参数&#xff08;params&#xff09;。 1. 查询参数&#x…

Python简单爬虫实践案例

学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 1、基于FastAPI搭建Web服务器 # 导入FastAPI模…

rag-给一篇几百页的pdf,如何从中找到关键信息并汇总出关系图

小思考 对pdf肯定要做模糊chunk&#xff0c;能用模型切分就用模型切分&#xff0c;不能用模型就用规则&#xff0c;规则要尽可能保存连续文本&#xff0c;特殊数据格式&#xff08;图、表格&#xff09;必须完整保存&#xff0c;必须能被捕捉到。这些独立的表格or图数据&#…

【第14届蓝桥杯】软件赛CB组省赛

个人主页&#xff1a;Guiat 归属专栏&#xff1a;算法竞赛真题题解 文章目录 A. 日期统计B. 01串的熵C. 冶炼金属D. 飞机降落E. 接龙数列F. 岛屿个数G. 子串简写H. 整数删除I. 景区导游J. 砍树 正文 总共10道题。 A. 日期统计 【题目】日期统计 【分析】 【答案】235 【AC_…

STM32 - 在机器人领域,LL库相比HAL优势明显

在机器人控制器、电机控制器等领域的开发&#xff0c;需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以&#xff0c;大家常用的HAL库明显不符合要求。再加上&#xff0c;我们学习一门技术&#xff0c;一定要学会掌握底层的原理。MCU开发的底层就是寄存器…

Spring WebFlux之流式输出

&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389; 欢迎访问的个人博客&#xff1a;https://swzbk.site/&#xff0c;加好友&#xff0c;拉你入福利群 &#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389; 流式输…