| |
|
开发:
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地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |