详细解释udp的传输过程(含多图)

简介: 本文详解UDP数据包的传输过程,涵盖跨交换机与路由器的完整流程。分析10KB UDP包的分片机制,需拆分为7个IP数据报传输。交换机和中间路由器不会等待完整数据接收,而是逐帧/分片转发,且每个IP分片均包含完整IP地址信息。

疑问: udp包的详细传输过程, 跨越交换机 跨越路由器的完整过程,  如果包大小为10KB, 需要拆分成大概多少个底层数据报传输。   路由器或者交换机, 是否会等10KB 接收完整, 才会转发?  底层的ip层数据包,是否包含完整的 ip地址 信息?



✅ 一、UDP 传输过程详解(跨交换机、跨路由器)

1. 基本背景知识

  • UDP(User Datagram Protocol) 是传输层协议,不保证可靠性、不建立连接。
  • IP 层(网络层) 负责将数据报从源主机路由到目标主机。
  • 以太网帧(链路层) 在局域网中通过交换机传输。
  • MTU(Maximum Transmission Unit):最大传输单元,通常以太网为 1500 字节。
  • 当 UDP 数据过大(超过 MTU),会在 IP 层进行分片(Fragmentation)



2. 你的问题分析

❓问题 1:一个 10KB 的 UDP 包,需要拆分成多少个底层数据报?

  • UDP 数据大小:10KB = 10,240 字节
  • UDP 头部:8 字节 → 总 UDP 报文 = 10,248 字节
  • IP 头部(IPv4):通常 20 字节 → 每个 IP 数据报最多携带 1480 字节数据(1500 - 20 - 8)
  • 所以每个 IP 分片最多携带 1480 字节的 UDP 数据

分片数量 ≈ ⌈10240 / 1480⌉ = ⌈6.918⌉ = 7 个 IP 分片

结论:10KB 的 UDP 包会被 IP 层拆分为 7 个 IP 数据报(分片)进行传输

⚠️ 注意:UDP 本身不支持分段,是 IP 层做的分片(IP Fragmentation)


❓问题 2:路由器或交换机会不会等 10KB 接收完整才转发?

✅ 交换机(Switch):
  • 工作在 链路层(Layer 2)
  • 只看 MAC 地址
  • 不会等待完整 UDP 包,收到一个以太网帧就立即转发(基于 MAC 表)
  • 每个以太网帧最大 1518 字节(含头部),所以一个 10KB 的数据会变成多个帧
  • 交换机逐帧转发,不需要等所有帧到齐
✅ 路由器(Router):
  • 工作在 网络层(Layer 3)
  • IP 地址,做路由决策
  • 收到一个 IP 分片后:
  • 如果开启了分片重组功能(如目的主机前最后一跳),可能会缓存等待所有分片
  • 大多数中间路由器不会等待,而是直接根据 IP 头部信息转发每个分片
  • 每个 IP 分片独立路由
  • 只有 目的主机的 IP 层 会等待所有分片到达后重组为原始 UDP 报文

结论:交换机和中间路由器都不会等待完整的 10KB 数据,而是逐帧/逐分片转发

❓问题 3:底层的 IP 层数据包是否包含完整的 IP 地址信息?

是的,每一个 IP 分片都包含完整的 IP 头部信息,包括:

  • 源 IP 地址
  • 目的 IP 地址
  • 协议号(UDP=17)
  • TTL
  • 分片相关字段:
  • 标识符(Identification):所有分片相同
  • 标志位(Flags):MF = More Fragments(最后一个为 0)
  • 片偏移(Fragment Offset):表示该分片在原始数据中的位置

所以即使分片走不同路径,只要能到达目的地,就可以重组



✅ 二、UDP + IP 分片 + 跨设备传输全过程

🌐 场景设定:

  • 主机 A 发送 10KB UDP 包给 主机 B
  • 经过本地交换机 → 路由器 R1 → 路由器 R2 → 远程交换机 → 主机 B
  • 所有链路 MTU = 1500



🔁 详细传输流程:


image.png


  1. 主机 A:
  • 应用层生成 10KB 数据
  • UDP 加上 8 字节头 → 10,248 字节
  • 传给 IP 层
  • IP 层发现数据 > MTU(1500),开始分片
  • 生成 7 个 IP 分片,每个 ≤1500 字节
  • 每个分片封装成以太网帧(MAC 头 + IP + 数据 + CRC)
  1. 本地交换机:
  • 收到第一个以太网帧
  • 查 MAC 表,转发到路由器 R1 的端口
  • 后续帧依次转发,不等待
  1. 路由器 R1:
  • 收到 IP 分片
  • 检查目的 IP,查路由表
  • 转发到下一跳(R2)
  • 不等待其他分片,直接转发
  • TTL 减 1,重新计算校验和
  1. 路由器 R2:
  • 同样处理每个分片
  • 转发到目标网络的交换机
  1. 远程交换机:
  • 根据 MAC 地址转发帧到主机 B
  1. 主机 B:
  • 接收所有 IP 分片
  • 根据 IP 标识符、偏移量、MF 标志重组
  • 重组完成后交给 UDP 层
  • UDP 检查端口,交给对应应用

⚠️ 若任意一个分片丢失,整个 UDP 报文作废(UDP 无重传机制)




相关文章
|
网络架构
udp的简单整理
udp的简单整理
1114 0
|
传感器 安全 中间件
深入浅出:SOME/IP协议中的服务发现机制解析
深入浅出:SOME/IP协议中的服务发现机制解析
1343 1
|
网络协议 安全 网络安全
【UDP】——为什么 UDP 数据包不能超过 512 个字节
一开始了解的是 DNS 服务使用的是 UDP 协议,后面看到 DNS 服务主要使用 UDP 协议,在少数情况(传输的数据超过 512 个字节)下也会使用 TCP 协议,因为 UDP 数据包不能超过 512 个字节。那问题来了,为什么 UDP 数据包不能超过 512 个字节呢?
5325 0
【UDP】——为什么 UDP 数据包不能超过 512 个字节
|
5G 调度
灵活时隙符号配比 | 带你读《5G 空口设计与实践进阶 》之十八
通过不同时隙格式的选择或不同时隙格式的聚合,NR 可以动态适配当前场景下的业务需求。
灵活时隙符号配比 | 带你读《5G 空口设计与实践进阶 》之十八
|
11月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
485 7
|
10月前
|
JSON Java Shell
多线程的 udp client server 测试demo
本示例展示了使用 Python 实现的 UDP 客户端与服务端通信,支持多线程、线程池、JSON 格式传输、UUID 生成、超时设置及 search_id 校验功能,适用于高并发场景下的数据交互需求。
多线程的 udp client server 测试demo
|
监控 网络协议 安全
Tcpdump简直就是命令行抓包中的神!
【10月更文挑战第32天】
1400 1
Tcpdump简直就是命令行抓包中的神!
|
网络协议 网络架构
UDP报文结构详解:一篇文章带你搞懂
本文介绍了网络基础中的重要概念——UDP报文格式,包括源端口号、目的端口号、长度和检验和四个字段。UDP是一种无连接的传输层协议,简单高效但不可靠。文中还简要介绍了IP报文的重要字段,如版本、首部长度、服务类型、总长度、标识字段、生存时间和首部检验和。最后推荐了几本深入学习网络协议的书籍,帮助读者进一步理解相关知识。
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
2250 3
|
域名解析 存储 网络协议
基于 Wireshark 分析 UDP 协议
基于 Wireshark 分析 UDP 协议

热门文章

最新文章