Wireshark TS | PMTU 问题实例

news2024/12/22 19:03:59

前言

PMTU,说到网络上的 PMTU 所能实现的功能,网工对它的原理自然是如数家珍,不熟悉的可能就感觉高大上了,觉得路径 MTU 能自动发现了,自然端到端数据包传输就能避免数据包分片了。可是理想很丰满,现实很骨干,PMTU 的想法自然是极好,但是受限于复杂的环境因素,PMTU 实际上有时并无法很好地实现。

本篇简单介绍一个 PMTU 的案例,一来主要是在实际环境中比较少见,要么全程一路畅通,要么路径 MTU 问题造成丢包连接中断,二来就是能拿到实际数据包。。。不容易~


PMTU 概念

PMTU(Path MTU Discovery),简单来说路径 MTU 发现是用来确定端到端路径中最小 MTU(Maximum Transmission Unit)的大小。又是最小,又是最大,还是用图说话比较清楚。

PMTU-01

每一段都会有一个 MTU 也就是最大传输单元的限制,而端到端传输中间可能会经过很多个具有不同 MTU 限制的节点,这样如果设置不分片 DF(Don’t Fragment)标志的长度为 1500 字节的数据包就会在 MTU 1200 处被丢包,同样长度为 1100 字节的数据包也会在 MTU 1000 处被丢包。

如何自动探测路径中的最小 MTU ?也就是如何找到图示中最小的一个 MTU 值 1000,就需要 PMTU 来实现,它通过在 IP 报头中设置有不分片 DF(Don’t Fragment)标志来探测路径中的 MTU 值, 如果路径中设备的 MTU 值小于此报文长度,并且发现 DF 标志,就会发回一个 Internet 控制消息协议 (ICMP,类型3、代码4需要分片的消息 ICMP_FRAG_NEEDED),消息中包含它可接受的 MTU 值。这样发端应用会主动降低 MTU,所发送出来的数据包就能满足中间路径最小 MTU 的要求。

回到说开篇提到的 PMTU 实际上并不能很好地实现,简单的原因就是它太依赖 ICMP ,如果中间设备不回复 ICMP 或者 ICMP 消息被中间安全设备阻断,种种原因造成源端无法接收到 ICMP 消息,那么自然也无法判断出最小 MTU 值,拿 TCP 连接来说,可能不断尝试进行数据包重发,仍无法得到响应就断开连接了。


案例信息

数据包跟踪文件基本信息如下:

λ capinfos PMTU.pcapng
File name:           PMTU.pcapng
File type:           Wireshark/... - pcapng
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: (not set)
Number of packets:   5908
File size:           6296 kB
Data size:           6104 kB
Capture duration:    14.336218 seconds
First packet time:   2022-07-14 12:54:13.944957
Last packet time:    2022-07-14 12:54:28.281175
Data byte rate:      425 kBps
Data bit rate:       3406 kbps
Average packet size: 1033.18 bytes
Average packet rate: 412 packets/s
SHA256:              ...
RIPEMD160:           ...
SHA1:                ...
Strict time order:   False
Capture hardware:    Intel(R) Core(TM) ...
Capture oper-sys:    64-bit Windows 7 Service Pack 1...
Capture application: Dumpcap (Wireshark) 3.2.18 (v3.2.18-0-gddf8072b7671)
Number of interfaces in file: 1
Interface #0 info:
                     Name = \Device\NPF_{...}
                     Description = 无线网络连接
                     Encapsulation = Ethernet (1 - ether)
                     Capture length = 262144
                     Time precision = microseconds (6)
                     Time ticks per second = 1000000
                     Time resolution = 0x06
                     Operating system = 64-bit Windows 7 Service Pack 1...
                     Number of stat entries = 1
                     Number of packets = 5908

λ

通过 Wireshark v3.2.18 捕获,数据包捕获数量 5908 个,捕获持续时间为 14.3 秒,平均速率 3406 kbps,捕获系统为 Win7 SP1。会话信息中仅有一条流,该跟踪文件可能已经经过一番过滤了。

PMTU-02

专家信息整体看起来也很正常,Warning 信息数量很少可忽略不计。

PMTU-03


案例分析

数据包跟踪文件实际展开如下:

PMTU-04

主要分析如下:

  1. 数据包 No.1-3,Client 和 Server 之间的 TCP 三次握手连接,其中 SYN/ACK 中的 MSS 1400 说明服务器上最大的 MTU 为 1440 (1400+20 TCP 首部+20 IP 首部),也就是说双方最大传输数据包的长度为 1454 (1440+14 Ethernet 首部长度);IRTT 约为 103ms;支持 SACK;支持 WS;
  2. 数据包 No.3 ,Length 长度为 54,小于 60 ,说明该跟踪文件是在 Client 上直接捕获;
  3. 数据包 No.6 ,Client 发送了最大长度为 1454 的数据包;

PMTU-05

  1. 数据包 No.7,从 192.168.191.69 节点返回了 ICMP 消息,提示 Destination unreachable(Fragmentation needed)

PMTU-06

No.7 数据包为 ICMP 报文,为类型 3 、代码 4 表示需要分片的消息(Fragmentation needed) ,消息中包含它可接受的 MTU 值为 1410;之后的 IPv4 首部、TCP 首部以及 HTTP 数据为 No.6 原始数据包的部分信息,相关信息可与 No.6 一一对应。

其中需要注意的是 TCP payload 大小 508 字节,这样使得 No.7 整个数据包为 590 字节,减去 14 字节 Ethernet 首部长度后,实际 No.7 数据包的 MTU 为 576,而 576 是广域网所规定的一个最小 MTU 标准值。

  1. Client 在收到 No.7 之后,得知下一跳 MTU 为 1410,因此会调整 MSS 为 1370(1410-40),发送数据包 No.9;

PMTU-07

No.9 1424 字节长度(1370 + 20 + 20 + 14),此后的 No.11-12 同样为 1424 字节长度。Client Seq 230 -> 1600 -> 2970 -> 4340 ,Server 在 No.13 ACK num 4340。至此完成 PMTU 系统实现、数据交互,连接之后恢复正常。

PMTU-08

需要注意的是,因为 Client No.6 实际由于 MTU 问题未正常发送到 Server ,Client 重新根据新的 MTU 进行了数据包调整发送的缘故,Wireshark 在此处的判断逻辑并没那么智能,会由于 No.6 Seq 误判断 No.9 为乱序、No.11为重传等,实际上并不是,可以通过忽略 No.6-7数据包的方式重新观察,如下,一切正常。

PMTU-09


案例总结

日常工作中,由于 MTU 的限制,可能带来的问题远比想象的要复杂,但只要掌握了基础知识和原理,从容应对,那么问题就不会是问题了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

防火墙NAT综合实验——nat控制,豁免,远程,DMZ区域(带命令)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.实验 实验要求 实验命令 前言 本章将会进行NAT的综合配置…

编程零基础转行Python,往这个方向走,绝对没有错

近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多。一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经过多方汇总为大家汇总了一份Python学习路线图。 对于一个零基础的想学习python的朋友来说…

对造轮子Say NO!如何移植并使用Linux内核的通用链表?(附源代码)

1. 什么是链表 链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。 相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配…

字节跳动技术总监整理的这份MySQL学习文档,看完才发现要学的可太多了!

对于程序员来说,去任何一家公司面试,数据库是避不开的。开发人员对MySQL掌握的越深入,你能做的事情就越多。 完成业务功能,要懂基本的Sql语句。做性能优化,要懂索引,懂引擎。做分库分表,要懂主从…

Head First设计模式(阅读笔记)-13.代理模式

监控糖果机 假设现在需要一台监视器去生成报告,报告中包括糖果机的位置、库存等信息 // 糖果机 public class GumballMachine{String loc;public GumballMachine(String loc, int count){this.loc loc;}public String getLoc(){return loc;}// 其他方法省略 } // 监…

详解Pytorch中的torch.nn.MSELoss函数(包括每个参数的分析)

一、函数介绍 Pytorch中MSELoss函数的接口声明如下,具体网址可以点这里。 torch.nn.MSELoss(size_averageNone, reduceNone, reduction‘mean’) 该函数默认用于计算两个输入对应元素差值平方和的均值。具体地,在深度学习中,可以使用该函数用…

玩转webpack(03):webpack进阶使用

一、自动清理构建目录 避免构建前每次都要手动删除dist 使用 clean-webpack-plugin(默认删除output指定的输出目录) (1)依赖安装 npm i clean-webpack-plugin -D (2)使用 --- webpack.prod.js const Cl…

基于java学生签到考勤系统

开发工具eclipse,jdk1.8 技术:java swing 数据库:mysql5.7 学生选课系统功能:管理员、教师、学生三个角色 一、管理员功能: 1.登录、修改密码、退出系统 2.学生管理:添加、修改、删除、查询 3.班级管理&#x…

YOLOV1算法学习记录

前言 R-CNN系列算法(R-CNN、SPPNet、Fast R-CNN、Faster R-CNN)均是采用two-stage的方法(1.提取region proposal 2.分类边框回归),主要是对region proposal进行识别定位。虽然这类方法检测精度很高,但由于…

Leetcode番外篇——滑动窗口的应用

各位好,博主新建了个公众号《自学编程村》,拉到底部即可看到,有情趣可以关注看看哈哈,关注后还可以加博主wx呦~~~(公众号拉到底部就能看到呦) 我们刚刚在上一节讲述了TCP的滑动窗口。殊不知,它…

基于RISC-V的Copy-On-Write

为什么需要写时拷贝呢? 当 shell执行指令的时候会 fork(),而这个 fork()出来的进程首先会调用的就是 exec来执行对应的命令,如果我们将 fork()创建的进程对地址空间进行了完整的拷贝,那将是一个巨大的消耗 因为在实际应用中,for…

微信小程序框架-全面详解(学习总结---从入门到深化)

小程序与普通网页开发的区别 小程序的主要开发语言是 JavaScript ,小程序的开发同普通的网页 开发相比有很大的相似性。对于前端开发者而言,从网页开发迁移 到小程序的开发成本并不高,但是二者还是多少有些许区别的,例如&#xff…

HCIP实验 4-1:路由引入与路由控制

实验 4-1 路由引入与路由控制 学习目的 掌握OSPF与ISIS相互路由引入的配置方法掌握通过地址前缀列表过滤路由信息的配置方法掌握通过Route-policy过滤路由信息的配置方法 拓扑图 场景 你是你们公司的网络管理员。公司网络中有两部分路由区域,一部分运行OSPF,另外…

【Proteus仿真】【51单片机】厨房天然气泄漏检测报警系统

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用LCD1602、按键、天然气、烟雾传感器、ADC,报警模块等。 系统运行后,LCD1602显示传感器检测的天然气浓度和烟雾浓度值。 可通…

中国土地交易数据库:300w数据中国土地高频交易数据2000-2022

土地交易是土地在流通过程中多方发生的经济关系,土地交易的行为主要是交换的土地所有权、使用权、租赁权、抵押权等。在我国,土地作为一种重要资源,其收购储备和交易行为都由国家进行统一管理。经过改革开放几十年的探索和实践,土…

手机投影到电脑显示 此设备不支持miracast,因此不能以无线投影到它

在家里使用手机的体感游戏,发现手机屏幕比较小,想要将其投影到自己的笔记本电脑上,这样看得就比较大了。然后我就打开笔记本电脑,操作如下: 如下图: 原文地址:手机投影到电脑显示 此设备不支持miracast,因此不能以无线投影到它 - 廖强的博客 但是结果我们就看到了…

Mysql安装配置和Mysql使用六千字详解!!

目录 课前导读 一、Mysql的安装和配置 二、数据库简介: 1、数据库中典型代表: 2、数据库类型: 3、Mysql简介: 4、客户端和服务器简介: 三、初始MySQL 四、数据库操作 五、表的基本操作 六、表的基础增删查改…

虚拟主机、WordPress 主机和云主机之间的区别

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网站】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】💬 免费且…

[附源码]JAVA毕业设计校园失物招领管理系统(系统+LW)

[附源码]JAVA毕业设计校园失物招领管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

港科夜闻|罗康锦教授获委任为香港科大工学院院长

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、罗康锦教授获委任为香港科大工学院院长。该委任任期由2023年1月1日开始。罗康锦教授服务香港科大多年,是智慧交通系统、智慧城市和可持续发展的杰出学者,在学术研究方面屡获殊荣。罗教授拥有丰富的学…