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

深入理解TCP与UDP:协议对比、头部结构与连接管理


一、TCP与UDP的核心区别

特性TCPUDP
连接特性面向连接(三次握手建立连接)无连接,直接传输数据
可靠性通过确认重传、排序、流控保证可靠尽力交付,不保证数据到达
流量控制支持滑动窗口机制调节发送速率不支持
数据分段支持大数据分段传输以完整报文传输(最大65507字节)
资源与效率头部大(20-60字节)、效率较低头部小(8字节)、传输速度快

二、适用场景对比

1. TCP典型场景

  • 文件传输(FTP/HTTP)
  • 邮件协议(SMTP/POP3)
  • 网页浏览(HTTPS)
    核心需求:数据完整性与准确性优先,容忍一定延迟。

2. UDP典型场景

  • 实时视频/直播(RTP)
  • 在线游戏(MOBA/FPS)
  • DNS查询
    核心需求:低延迟优先,允许少量数据丢失。

三、协议头部结构详解

TCP头部(20-60字节)

在这里插入图片描述
1. 基础标识字段

  • 源端口(Source Port):16位,标识发送方应用程序进程
  • 目的端口(Destination Port):16位,标识接收方应用程序进程
  • 序列号(Sequence Number):32位,标识发送数据流中第一个字节的序号
  • 确认号(Acknowledgment Number):32位,期望接收的下一个字节序号(仅当ACK=1时有效)

2. 控制字段

  • 头部长度(HL):4位,以32位字为单位计算头部长度(最小值为5,对应20字节)
  • 保留位(Reserved):6位,必须置0,为未来协议扩展保留
  • 控制标志(Control Flags):6位,按顺序表示:
    • URG:紧急指针有效(置1时优先处理数据)
    • ACK:确认字段有效(建立连接后必须置1)
    • PSH:推送功能请求(要求立即提交数据到应用层)
    • RST:连接重置(强制中止异常连接)
    • SYN:同步序列号(连接建立阶段使用)
    • FIN:数据传输结束(正常关闭连接)

3. 流量控制字段

  • 窗口大小(Window Size):16位,声明接收窗口剩余容量(最大65535字节)
  • 紧急指针(Urgent Pointer):16位,配合URG标志定位紧急数据末尾位置

4. 校验与扩展

  • 校验和(Checksum):16位,覆盖伪头部+TCP头部+数据的CRC校验值
  • 选项(Options):可变长度,支持:
    • 最大报文段大小(MSS)协商
    • 窗口缩放因子(Window Scaling)
    • 时间戳(Timestamp)
    • 选择性确认(SACK)
伪头部校验机制
 0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source IP Address                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Destination IP Address                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Zero  | Proto  |    TCP Length (包括头部和数据)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 组成要素:源/目的IP地址(各32位)、协议类型(8位)、TCP报文总长度(16位)
  • 验证范围:IP层关键信息参与校验,防止路由篡改

2. UDP头部(固定8字节)

在这里插入图片描述

四、TCP连接管理机制

1. 三次握手建立连接

在这里插入图片描述

关键步骤

  1. 客户端发送SYN包(随机初始化序列号x)
  2. 服务端返回SYN-ACK包(确认号x+1,随机序列号y)
  3. 客户端发送ACK包(确认号y+1),连接建立

2. 四次挥手释放连接

在这里插入图片描述

关键状态迁移

  • 客户端:FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT(等待2MSL)
  • 服务端:CLOSE_WAIT → LAST_ACK → CLOSED

为什么需要四次挥手
TCP是全双工协议,需分别关闭两个方向的数据流:

  1. 客户端关闭发送通道(FIN)
  2. 服务端确认并关闭接收通道(ACK)
  3. 服务端关闭发送通道(FIN)
  4. 客户端确认并关闭接收通道(ACK)

五,实验复现

一、实验环境搭建

拓扑设计
在这里插入图片描述

在这里插入图片描述


二、TCP三次握手复现(HTTP通信)

在这里插入图片描述

  1. 启动抓包

    • 右键点击与路由器之间的链路 → 启动Wireshark抓包
    • 设置过滤器:tcp.port == 80
  2. 发起HTTP请求
    在这里插入图片描述


数据包分析报告:TCP连接与HTTP通信全流程
在这里插入图片描述

1. TCP三次握手建立连接
数据包源地址:端口目标地址:端口协议标志位序列号(Seq)确认号(Ack)说明
1192.168.1.10:2050192.168.2.20:80TCPSYN0-客户端发起连接请求
2192.168.2.20:80192.168.1.10:2050TCPSYN+ACK01服务端确认连接请求
3192.168.1.10:2050192.168.2.20:80TCPACK11客户端确认连接建立

关键点

  • 序列号递增规则:SYN包占1个序号(Seq=0 → 下一包Seq=1)。
  • MSS协商:双方声明最大报文段长度(1460字节),基于MTU 1500字节(扣除IP和TCP头部)。

2. HTTP请求与响应
数据包源地址:端口目标地址:端口协议内容说明
4192.168.1.10:2050192.168.2.20:80HTTPGET / HTTP/1.1客户端请求根路径资源
5192.168.2.20:80192.168.1.10:2050HTTPHTTP/1.1 200 OK服务端返回HTML内容
6192.168.1.10:2050192.168.2.20:80TCPACK客户端确认收到HTTP响应

关键点

  • HTTP协议特征:GET请求与200响应均通过TCP连接传输。
  • 数据长度:HTTP响应包长度361字节(含头部和HTML内容)。

3. TCP四次挥手断开连接
数据包源地址:端口目标地址:端口协议标志位序列号(Seq)确认号(Ack)说明
7192.168.1.10:2050192.168.2.20:80TCPFIN+ACK159308客户端发起断开请求
8192.168.2.20:80192.168.1.10:2050TCPACK308160服务端确认客户端的FIN
9192.168.2.20:80192.168.1.10:2050TCPFIN+ACK308160服务端发起断开请求
10192.168.1.10:2050192.168.2.20:80TCPACK160309客户端确认服务端的FIN

关键点: 。

  • 序列号与确认号规则
    • 客户端发送FIN后,序列号递增至159(假设之前数据长度为158字节)。
    • 服务端确认号为160(159+1),符合Ack=Seq+1的规则。

4. 网络性能与延迟分析
阶段时间差说明
SYN → SYN-ACK15ms网络往返时间(RTT)约15ms
HTTP请求→响应78ms服务端处理请求耗时
FIN → FIN-ACK843ms客户端等待应用层释放资源后断开连接

三、UDP协议验证(模拟DNS查询)
  1. 配置DNS服务
    在这里插入图片描述

  2. 抓包设置

    • 过滤器:udp.port == 53
  3. 执行DNS查询
    在这里插入图片描述


DNS查询与响应抓包分析报告


在这里插入图片描述

1. 数据包概览

数据包时间戳源地址:端口目标地址:端口协议长度信息
211092.078000192.168.1.10:49153192.168.2.20:53DNS71字节查询 www.aaa.com 的A记录
231092.156000192.168.2.20:53192.168.1.10:49153DNS87字节响应 www.aaa.com192.168.2.20

2. 分层解析
2.1 数据包21(DNS查询)

  • 以太网层

    • 源MAC:54:89:98:53:50:b4(客户端)
    • 目的MAC:00:e0:fc:90:09:b9(DNS服务器/路由器)
    • 关键点:若跨子网通信,目的MAC可能为路由器接口MAC。
  • IP层

    • 源IP:192.168.1.10(客户端)
    • 目的IP:192.168.2.20(DNS服务器)
    • 关键点:客户端与DNS服务器位于不同子网(192.168.1.0/24 vs 192.168.2.0/24),需通过路由器转发。
  • UDP层

    • 源端口:49153(客户端临时端口)
    • 目的端口:53(DNS服务端口)
    • 关键点:DNS默认使用UDP,仅当响应过大时切换TCP。
  • DNS层

    • 事务ID:0x0000
    • 查询类型:A记录(IPv4地址)
    • 查询域名:www.aaa.com
    • 关键点
      • 事务ID应为随机值(此处为0x0000,需检查是否为抓包工具显示问题或配置异常)。
      • 查询长度71字节,符合简单DNS查询的典型大小。

2.2 数据包23(DNS响应)

  • 以太网层

    • 源MAC:00:e0:fc:90:09:b9(DNS服务器/路由器)
    • 目的MAC:54:89:98:53:50:b4(客户端)
  • IP层

    • 源IP:192.168.2.20(DNS服务器)
    • 目的IP:192.168.1.10(客户端)
  • UDP层

    • 源端口:53(DNS服务端口)
    • 目的端口:49153(客户端临时端口)
  • DNS层

    • 事务ID:0x0000(与查询匹配)
    • 响应类型:A记录
    • 解析结果:www.aaa.com192.168.2.20
    • 关键点
      • 响应长度87字节,包含查询结果和资源记录头部。
      • 192.168.2.20为DNS服务器自身IP,可能是本地测试配置(如hosts文件或本地DNS记录)。

3. 完整DNS交互流程
客户端(192.168.1.10) 路由器 DNS服务器(192.168.2.20) DNS查询: www.aaa.com (UDP 53) 转发查询 DNS响应: 192.168.2.20 转发响应 客户端(192.168.1.10) 路由器 DNS服务器(192.168.2.20)

相关文章:

  • WebSocket解决方案的一些细节阐述
  • WebSocket实时双向通信:从基础到实战
  • LlamaIndex中应用自定义提示词提升回答质量
  • 【25软考网工】第六章(7)网络安全防护系统
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序源码的去中心化商业扩散研究
  • 【C++】map和set的使用
  • @JsonProperty和@JSONField 使用
  • 5.18 打卡
  • Android日活(DAU)检测的四大实现方案详解
  • Android 性能优化入门(三)—— 启动速度优化
  • weibo_comment_pc_tool | 我于2025.5月用python开发的评论采集软件,根据帖子链接爬取评论的界面工具
  • 牛客网NC276110题解:小红的数组重排
  • 低延迟与高性能的技术优势解析:SmartPlayer VS VLC Media Player
  • 湖北理元理律师事务所:债务优化服务的四维创新实践
  • C++23 范围迭代器作为非范围算法的输入 (P2408R5)
  • Ubuntu22.04开机运行程序
  • 自动化:批量文件重命名
  • OSI七层模型和TCP/IP的五层(四层模型)
  • MLLM常见概念通俗解析(三)
  • QT6 源(108)篇二:阅读与注释菜单栏里的菜单对象 QMenu,先是成员函数,后是信号函数的测试
  • 发射后失联,印度地球观测卫星发射任务宣告失败
  • 湖南4个县市区被确定为野生蘑菇中毒高风险区:中毒尚无特效解毒药
  • 卿晨璟靓等用服刑经历“引流”,专家:将犯罪问题娱乐化会消解刑罚严肃性
  • 龚正会见哥伦比亚总统佩特罗
  • “免签圈”扩容,旅游平台:今年以来巴西等国入境游订单显著增加
  • 中央军委决定调整组建3所军队院校