| |
|
开发:
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 服务端
接着在另外一台电脑上运行 iPerf 客户端,此时两边电脑的 iPerf 都会开始打印收发包的情况。
使用 ip 地址和端口号可以过滤出 iPerf 发送的包 ?此时你可能会发现一个很奇怪的现象,请看图:
我们展开 IP 层信息继续看看:
?果然,如上图红框所示,每个 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地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/23 5:51:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |