当前位置: 首页 > news >正文

TCP 和 UDP 协议的通信解析

一、TCP 通信阶段(面向连接)

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

sequenceDiagramClient->>Server: SYN(seq=x)Server->>Client: SYN-ACK(seq=y, ack=x+1)Client->>Server: ACK(ack=y+1)
 
 
  • 关键步骤
    • 客户端发送 SYN(同步序列号)
    • 服务端回应 SYN-ACK(确认客户端序列号+1)
    • 客户端发送最终 ACK(确认服务端序列号+1)
  • 状态变迁
    • 客户端:CLOSED → SYN_SENT → ESTABLISHED
    • 服务端:LISTEN → SYN_RCVD → ESTABLISHED

2. 数据传输阶段

graph LRA[发送数据] --> B[等待ACK]B -->|超时未确认| AB -->|收到ACK| C[滑动窗口移动]
 
 
  • 核心机制
    • 可靠传输:序列号确认(SEQ/ACK)
    • 流量控制:窗口大小通告(Window Size)
    • 拥塞控制:慢启动/快重传/快恢复
  • 数据特征
    • 字节流传输(无明确报文边界)
    • 支持全双工通信(双向数据流动)

3. 连接终止阶段(四次挥手)

sequenceDiagramClient->>Server: FIN(seq=u)Server->>Client: ACK(ack=u+1)Server->>Client: FIN(seq=v)Client->>Server: ACK(ack=v+1)
 
 
  • 关键步骤
    • 主动关闭方发送 FIN
    • 被动关闭方先回 ACK,后发 FIN
    • 最终双方确认关闭
  • 状态变迁
    • 主动方:ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
    • 被动方:ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

4. 特殊状态(TIME_WAIT)

  • 持续时长:2*MSL(Maximum Segment Lifetime,默认60秒)
  • 作用:
    • 确保最后一个ACK能到达
    • 让旧连接的重复报文过期

二、UDP 通信阶段(无连接)

1. 单阶段通信模型

graph TDA[发送数据报] --> B[接收数据报]B -->|可能丢失| C[无重传]B -->|可能乱序| D[应用层处理]
 
 
  • 核心特征
    • 无需建立连接(直接发送)
    • 无状态维护(服务端不记录客户端信息)
    • 每个数据报独立处理

2. 伪连接实现(应用层)

  • 某些基于UDP的协议(如QUIC)在应用层实现:
    • 连接ID标识会话
    • 自定义重传机制
    • 加密握手过程

三、协议阶段对比

对比项 TCP UDP
连接建立 需要三次握手 无连接建立阶段
数据传输 可靠有序的字节流 不可靠无序的数据报
状态维护 维护连接状态(序列号、窗口等) 无状态
连接终止 需要四次挥手 无终止过程
资源消耗 高(缓冲区、定时器等)
典型延迟 高(握手/挥手开销)

四、编程视角的关键差异

1. TCP 套接字API流程

graph TBServer[服务端] --> s1[socket()]s1 --> s2[bind()]s2 --> s3[listen()]s3 --> s4[accept()] --> s5[recv()/send()]s5 --> s6[close()]Client[客户端] --> c1[socket()]c1 --> c2[connect()]c2 --> c3[send()/recv()]c3 --> c4[close()]
 
 

2. UDP 套接字API流程

graph TBServer[服务端] --> s1[socket()]s1 --> s2[bind()]s2 --> s3[recvfrom()] --> s4[sendto()]Client[客户端] --> c1[socket()]c1 --> c2[sendto()] --> c3[recvfrom()]
 
 

五、典型问题分析

1. TCP 半关闭问题

  • 场景:一方调用 shutdown(SHUT_WR) 后仍可接收数据
  • 状态:进入 FIN_WAIT_1FIN_WAIT_2 状态
  • 编程注意:需正确处理 recv() 返回0的情况

2. UDP 粘包/丢包处理

  • 解决方案
    • 添加应用层头部(包含长度字段)
    • 实现超时重传机制
    • 使用序列号标识数据报
  • 示例协议:TFTP(简单文件传输协议)
http://www.zskr.cn/news/26146.html

相关文章:

  • 易基因:华农王应祥/杨存义ChIP-seq等揭示大豆开花时间调控及区域适应性的表观分子机制|NC(IF15.7)
  • 2025年10月益生菌品牌对比榜:十强排名全解读
  • 2025年10月益生菌品牌推荐榜:公开信息对比与排行
  • 在运维工作中,如何一键式统计整个k8s集群cpu、内存总大小?总使用率?还剩余多少?
  • Giants Shoulder - Hyrix: LPDDR5 Commands New Features - 实践
  • 国内开发者如何选择代码托管平台?深度解析主流平台优劣势
  • 2025年中国国际健康营养博览会(NHNE):深度盘点全球展品与政策风向
  • 2025年10月中国遗产继承律师推荐榜:北京盈科陈珊珊领衔五强对比
  • 2025年10月小红书代理商实力榜:五家对比评测与避坑指南
  • P1725 琪露诺 解题笔记
  • 【电商行业案例】基于Vaadin全栈Java框架,打造百万级订单的B2B电商SaaS平台
  • 【触想智能】什么是人脸识别一体机,人脸识别一体机主要应用于哪些领域?
  • WPF使用MediaCapture开发相机应用(二、相机预览优化)
  • 自己动手做一款ChatExcel数据分析系统,智能分析 Excel 数据
  • 2025年10月无缝钢管推荐榜:五强对比评测与采购指南
  • 实用指南:构建AI智能体:五十二、反应式智能体:AI世界的条件反射,真的可以又快又稳
  • 微信小程序使用formdata采用multipart方式上传文件
  • 中国项目管理工具市场迎来技术驱动新纪元:Gitee引领双核协作革命
  • 中国企业DevOps工具链选型指南:政务、出海与跨国协作的实战解析
  • 数字媒体技术-培优讲练-知识点总结
  • Jmeter解决响应乱码的问题
  • 实用指南:计算机毕业设计Python农作物产量预测分析 农作物爬虫 农产品可视化 农产品推荐系统 机器学习 深度学习 大数据毕业设计(源码+LW文档+PPT+详细讲解)
  • 告别客服焦虑!用PandaWiki打造724小时AI在线客服
  • Jmeter解决临界部分控制器,锁限流的问题
  • Docker Compose v2.35.1 更新!
  • 【完整源码+数据集+部署教程】医疗设备显示器图像分割系统: yolov8-seg-C2f-SCConv - 详解
  • 2025 年容器 / 结构 / 不锈钢 / 金属 / 过滤器铆焊厂家推荐北京大疆实业:精密制造与全链条服务的实践样本
  • 2025年10月销量第一证明机构推荐榜:尚普与华信人权威对比
  • 国产代码托管平台Gitee的崛起:为何越来越多人选择它而非GitHub?
  • 2025年10月留香沐浴露对比榜:蓝蕨经典香型与四款热门香型横评