IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 通过 wireshark 体验 IP 层分包 -> 正文阅读

[网络协议]通过 wireshark 体验 IP 层分包

不管是 TCP 包还是 UDP 包,如果 size 太大,到了 IP 层,都会进行分包处理。

如何才算 size 太大呢?这个跟具体的网络类型有关。

以最常用的以太网为例,允许的最大包 size 为 1500 字节,也就是我们俗称的 MTU(Maximum Transmission Unit)值。

今天我们通过 Wireshark 工具,直观的感受一下 IP 层是如何对 TCP 或者 UDP 包进行分包处理的。

实验环境:两台电脑+网络互通

操作系统:Windows 或者 Linux 均可

软件:iPerf3+Wireshark

iPerf3 是一个著名的免费测试网络拥塞情况的测试软件。

我们通过 iPerf3 来给对方发送 TCP 或者 UDP 包。

iPerf3 可以在官方免费下载,下载后拷贝到两台电脑上。

其中一台电脑上使用 iPerf3 的服务端模式,命令为 iPerf3 -s -i 1 -p 10000

命令解析:-s 以服务端模式运行 -p 监听端口号 -i 报告打印时间间隔

另一台电脑则以客户端模式运行,命令为 iPerf3 -c 192.168.6.23 -b 100M -t 5 -p 10000 -u

命令解析:-c 以客户端模式运行,后面为服务端 ip 地址? -b 发包速率 -t 测试时间 -p 同上 -uUDP

大白话就是客户端每秒以 100Mbit 的速率向服务端 10000 端口发送 UDP 包,持续发送 5s。

那每个 UDP 的大小是多少呢?根据 iPerf3 的官方介绍,默认的单个 UDP 发包大小是 8K 字节

事不宜迟,我们开始动手。

首先运行 iPerf 服务端

然后启动 Wireshark,选中当前使用的网卡开始截包。Wireshark 选择在客户端或者服务端电脑都可以。

接着在另外一台电脑上运行 iPerf 客户端,此时两边电脑的 iPerf 都会开始打印收发包的情况。

5 秒后 iperf 会自动停止,此时停止 wireshark 的截包。

使用 ip 地址和端口号可以过滤出 iPerf 发送的包

?此时你可能会发现一个很奇怪的现象,请看图:

上图中 UDP 包 Frame 显示的大小是 834byte,但是 udp 包的实际长度却显示的是 8192 字节,这是为何?

我们展开 IP 层信息继续看看:

猜测这个 UDP 包是一个聚合包,我们把过滤条件去掉,看看这个聚合包之前是否有其他的线索

?果然,如上图红框所示,每个 UDP 包之前有五个 IP 包,每个包的大小都是 1514 字节,并且每个包后面都有 Reassembled in #XXX,意思是指该 IP 包会被组合到第 XXX 号包中,而第 XXX 号包,就是图中的显示的 UDP 包。其实这 6 个包,是 IP 层对 UDP 包进行分包得出的,上文提到过,以太网的默认的 MTU 是 1500 字节,这个其实是指数据包在 IP 层封装的最大 size 值(包含 IP 头)。我们知道,IP 头的大小固定 20 字节,也就是说,IP 的最大 payload 为 1480(1500-20),再加上帧头帧尾,发送到网络中的整个包大小不会超过 1520 字节。

回到这个例子中,由于 iPerf 发送的 UDP 包大小默认是 8192 字节,因此 IP 层将会分 6 个包(最后一个包不足 1500)进行发送(8192/1480=5 余 792),也许你有疑问,为什么上图是 5 个 ip 包而不是计算得出的 6 个?那是因为最后的 UDP 包也是 IP 包,也就是余数的不足 1500 字节的包,Wireshark 为了显示方便,把前 5 个包整合到第 6 个包中了,这就是上面提到的为何 UDP 的 Frame 大小和 UDP 包实际长度不一致的原因了。

这个可能不太好理解,我再重新表述如下:

UDP 包如果太大,到了 IP 层会进行分包处理,这些包如果被 Wireshark 截获,Wireshark 会重新把他们组成一个 UDP 包进行给用户展示。

?

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:49:47  更:2021-08-31 15:51:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:26:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码