1. MTU配错到底会怎样从三个真实症状说起MTU 这个词听起来很基础但真正在现网里遇到它的时候往往已经是半夜被告警叫醒的状态了。我先说三个我自己碰到过的场景你对号入座一下看看是不是眼熟。第一个场景某台应用服务器迁移到新的网络区域之后SSH 登录上去敲命令回车按下去要等两三秒才有回显ls一次刷屏的目录卡住不动但ping网关又是通的延迟低得很。第二个场景一套跨机房的同步链路小文件同步秒传超过几十 KB 的文件全部超时日志里只留下一个模糊的connection reset。第三个场景容器集群里某个服务调用外部接口HTTP 请求头发得出去响应体一超过一个固定大小就断抓包看到的都是重传。这三个症状指向同一个根源链路上允许通过的最大数据帧被限制在了比预期更小的值而应用层还在按默认大小发包。那个“最大数据帧”就是MTUMaximum Transmission Unit最大传输单元。当一条链路上任意一跳设备的 MTU 小于发送端认为的 MTU 时超出部分要么被分片要么被丢弃。分片被丢弃的情况更麻烦因为它常常悄无声息。我见过太多人第一反应是去查防火墙、查路由、查 ACL查了大半天。其实有个更快的动作用 ping 命令直接怼一个大包过去看它通不通。这个动作三十秒就能做完能立刻把排查方向锁定或者排除。这篇内容讲的就是怎么把这件事做得又准又快包括参数怎么给、结果怎么读、以及那些看起来“已经成功”其实根本没验证到的坑。适合谁看我把它写给三类人一是刚接手网络运维、需要在变更后做验证的同学二是做后端和基础设施开发、经常被“连不上但 ping 得通”搞晕的工程师三是需要给团队定验收标准、想把 MTU 检查固化进上线流程的人。全程不需要额外的抓包工具系统自带的 ping 就够用。1.1 小包通、大包死是MTU问题最典型的指纹判断是不是 MTU 问题我一般只看一个特征同样一条链路小数据包正常往返大数据包超时或卡住。这个特征之所以可靠是因为 ICMP 回显请求也就是 ping 发的包本身很小默认只有 32 字节或者 56 字节的负载加上 IP 头和 ICMP 头也就几十个字节远低于任何合理的 MTU 值。所以当链路 MTU 被压到 1400、1300 甚至更低时普通 ping 依然欢快地返回时间图形化界面上一片绿色很有欺骗性。而一旦你发起一个接近或超过实际 MTU 的包并且禁止中间设备分片真实的链路容量就暴露了要么设备返回一个“需要分片但被禁止”的 ICMP 差错报文ping 立刻告诉你失败要么设备干脆静默丢弃ping 就卡在超时。这里有个关键点必须说清楚“大包不通”只是现象不是结论。链路带宽拥塞、中间设备限速、QoS 策略、甚至某些设备的控制平面保护机制都可能表现成“大包丢、小包过”。所以 ping 大包的价值在于它是成本最低的分流手段能在一分钟内告诉你“要不要往 MTU 方向查”而不是直接给你答案。我自己的习惯是拿到一台报障机器先ping网关三次确认基础连通性紧接着就发一个 DF 置位的大包。如果大包直接失败排查范围立刻收缩到链路层和 MTU如果大包通过那我就可以把 MTU 这个嫌疑排掉转去看应用层和 TCP 层的问题节省大量时间。1.2 分片、DF标志与“悄悄丢包”的关系要理解 ping 为什么能测 MTU得先弄明白分片这件事。IP 协议在设计之初允许路由器把过大的数据包切成小块转发接收端再拼回去这叫分片Fragmentation。理论上很优雅实践上很糟糕分片增加设备负担、增加重传代价、而且只要有一片丢了整个原始包就得重传。所以现代网络的普遍做法是尽量避免分片尤其是在 TCP 场景下由发送端根据 MSS 自己控制包大小。但“避免”需要一个机制来告知发送端“你发太大了”。这个机制就是PMTUD路径 MTU 发现发送端把 IP 头里的DFDont Fragment不分片标志置位意思是“这一路谁也别帮我切”。当某个中间设备的出接口 MTU 小于包长时它不能切只能丢掉并且应该回一个 ICMP 类型 3 代码 4 的差错报文含义是“目标不可达需要分片但 DF 已置位”同时附上它自己的 MTU 值。发送端收到之后把包调小重发逐步逼近路径真实 MTU。问题就出在这个“应该”上。现实中大量设备和策略会屏蔽 ICMP或者只放行部分类型。于是发送端永远收不到那个“你发太大了”的通知它会一直用大包重试一直失败形成一个典型的PMTUD 黑洞。表现出来就是连接建立没问题握手包很小一旦开始传数据就卡死。ping命令里的 DF 参数就是手动模拟这个过程。你置位 DF 发一个大包等价于在问链路“这个尺寸你能过吗”设备要么让你过要么回你差错要么静默丢弃。三种结果对应三种判断非常直接。注意ping 得到“能过”只代表 ICMP 这一个协议、这一个方向上、这一时刻能过。它不能替代 TCP 层的 MSS 协商验证这一点我在第 5 节会详细展开。1.3 为什么ping是最快的验证手段市面上不缺工具。tracepath能直接报出路径 MTUtraceroute加参数也能测抓包工具更是什么都能看。但在“改完配置立刻想知道对不对”这个场景下我还是首选 ping理由有三个。第一是零依赖。ping 是几乎所有操作系统自带的不需要安装、不需要额外权限Linux 上非 root 用户 ping 通常通过 capability 机制放行、不需要对端配合装 agent。你在任何一台跳板机、任何一台容器里都能立刻执行。第二是参数可控。你可以精确指定负载字节数、指定发包次数、指定 DF 标志、指定源接口这些恰好就是验证 MTU 需要的全部变量。相比之下用 curl 或者 nc 去试包大小受协议栈和库的实现影响不够精确。第三是结果可解释。ping 的返回只有几种通、超时、收到“需要分片”的差错。每一种都有明确的网络层含义不像应用层超时那样含糊。当然它也有明显短板依赖 ICMP 可达。如果链路上 ICMP 被整体屏蔽ping 就完全失效这时候得换别的思路比如用 TCP 探测或者直接看 TCP 握手时协商的 MSS。但即使如此先花三十秒 ping 一下依然是划算的因为大多数内网环境 ICMP 是通的。2. 参数准备不同系统下ping的写法差异这一步最容易翻车。同样是“发一个指定大小且不分片的包”Linux、Windows、macOS 的参数完全不一样而且参数含义还有细微差别。我见过有人在 Linux 上照抄 Windows 的命令结果-l被解释成别的意思测出来的数字完全不对还以为是链路问题。在动手之前先把三个平台的关键参数对齐。2.1 Linux-M do 与 -s 的严格配合Linux 下的写法是ping -M do -s 1472 -c 3 192.0.2.10拆开看-M do表示禁止分片do 就是 dont fragment 的缩写另外还有-M want和-M dont我们只需要do-s 1472指定 ICMP 负载为 1472 字节-c 3只发三个包就停避免无限刷屏。这里有一个非常容易搞错的点-s指定的是 ICMP 负载长度不是整个 IP 包的长度。IP 头固定 20 字节ICMP 头固定 8 字节所以实际在链路上跑的数据帧大小是1472 20 8 1500字节。这就是为什么验证 1500 的 MTU 要用 1472 而不是 1500。如果你的环境启用了 IPv4 选项比如记录路由IP 头会变长但这个场景基本用不到。IPv6 下没有分片标志位改用-M do会报错需要用-6并且靠-s控制大小IPv6 的最小 MTU 要求是 1280这一点在双栈环境里要特别注意。还有一个细节某些发行版的 ping 在收到“需要分片”差错时会直接打印类似ping: local error: message too long, mtu1400的提示这句话里直接就告诉了你链路的真实 MTU 值等于白送答案。看到这个提示就别再二分了直接按它给的数字去配。2.2 Windows-f 与 -l 的大小写陷阱Windows 下的等价写法是ping -f -l 1472 192.0.2.10-f是设置 DF 标志-l是指定负载大小。注意 Windows 的参数区分大小写-L和-l在某些工具里含义不同一定要用小写。Windows 的 ping 默认只发 4 个包就停这个行为比 Linux 更“友好”一点。但在 PowerShell 里执行时有个坑ping可能被解析成Test-Connection的别名虽然大多数情况下会优先走ping.exe但为了保险我通常直接写ping.exe -f -l 1472 192.0.2.10明确调用可执行文件。另外 Windows 的返回文案比较啰嗦中文系统下关键信息是需要拆分数据包但是设置 DF这行字。看到它就说明包太大如果显示来自 ... 的回复: 字节1472 时间...那就是通过了。判读的时候别被一大段中文绕晕只看这两句。2.3 macOS与BSD系-D 的用法macOS 和 FreeBSD 的写法是ping -D -s 1472 -c 3 192.0.2.10-D是设置 DF 标志。注意 macOS 的-s在某些版本里计算口径和 Linux 略有差异实测下来主流版本是一致的都是指 ICMP 负载。但为了稳妥我在 macOS 上做完测试后会在对端 Linux 机器上再复测一次两边结果对得上才敢下结论。BSD 系还有一个值得记的参数-t用来设置存活时间TTL和 MTU 无关别看错。2.4 三个平台的参数对照表把上面的内容整理成一张表配环境的时候直接查平台禁止分片参数负载大小参数次数参数1500 MTU 对应的负载Linux-M do-s-c1472Windows-f-l-n1472macOS / BSD-D-s-c1472IPv6 通用无需靠负载控制-s-c1452最后一行值得多说一句。IPv6 的头部是 40 字节比 IPv4 的 20 字节多 20而 ICMPv6 头是 8 字节所以 1500 的 MTU 对应的负载是1500 - 40 - 8 1452。双栈环境里如果只测了 IPv4 忘了测 IPv6很容易在只走 v6 的链路上踩坑。提示拿不准参数的时候先ping --help看一眼比凭记忆敲要靠谱。我见过有人把-M do写成-m do结果-m被解释成标记命令没报错但测试完全无效白忙一场。3. 二分法实测20次ping以内锁定精确MTU知道参数之后剩下的问题就是“试多大的包”。最笨的办法是从 1500 一路往下减运气不好要试几十次。用二分法从 1500 到 1280 这个区间七次以内就能锁定精确值。3.1 先算理论值别一上来就瞎试动手之前先想清楚这条链路的理论 MTU 应该是多少这决定了二分的起点和范围。常见的几种封装开销我列一下都是字节数纯以太网二层链路1500。PPPoE 拨号接入1500 减去 8 字节 PPPoE 头得到 1492。GRE 封装外层 IP 头 20 加 GRE 头 4减去 24得到 1476。VXLAN 封装外层 IP 20 UDP 8 VXLAN 8 内层以太网头 14减去 50得到 1450。IPsec 传输模式或某些隧道模式视具体算法和模式而定常见减去 50 到 70落在 1430 到 1450 之间。这些数字不是让你死记而是让你一开始就朝着正确的方向去试。比如我知道这是一条 VXLAN 链路那我不可能指望 1500 通过直接拿 1450 去测一次就能确认大部分情况。反过来如果理论值算下来应该是 1500 而实测只有 1400那说明中间有我没算到的设备这才是真正需要排查的异常。我踩过的一个坑是在做 GRE 封装的时候只算了 GRE 头忘了算外层 IP 头按 1480 配下去结果死活不通。后来把两层头都算上改成 1476 才对。封装链路上每一层头都要扣一层都不能漏这个原则在多层 overlay 叠加的环境里尤其重要。3.2 二分查找的具体执行过程确定理论值之后按下面的节奏走。假设理论值是 1500我怀疑实际更小区间定为 1280 到 1472负载范围。第一步测中间值 1376命令是ping -M do -s 1376 -c 3 目标。如果通说明实际 MTU 至少 1404往上半区找如果不通往下半区找。第二步假设通了测 1424。如果不通说明真实负载在 1377 到 1423 之间。第三步继续对半测 1400。如此往复每次范围缩小一半。整个过程的关键不是“试到通为止”而是找到那个临界点最大的能通过的负载值加上 28 就是真实 MTU。为了效率我一般把每次的结果记在纸上或者记事本里写成“1472 通 / 1376 通 / 1424 不通 / 1400 通 / 1412 不通 / 1406 通 / 1409 不通 / 1407 通”这样一串最后取“最大的通”对应的数字。还有一个提速技巧先测两个端点。1472 直接测一次如果通直接收工整条链路 MTU 就是 1500不用二分。如果不通再测 1280IPv4 的最小合理值如果连 1280 都不通那问题就不是 MTU 偏小可能是链路完全不通或者 ICMP 被屏蔽排查方向要换。3.3 28字节的换算与常见错误这个换算必须刻在脑子里IPv4 下ping 显示的负载字节数 28 MTU。28 的构成是IP 头 20 字节 ICMP 头 8 字节。所以ping 负载对应 MTU14721500146414921442147014221450140014281372140012721300这张表我建议抄在便利贴上贴显示器边上前几次用的时候对着看用熟了自然就记住了。常见的换算错误有三种。第一种是把-s当成 MTU 直接填比如要测 1500 就写-s 1500这样实际发出去的是 1528 字节的包本来通的链路也被测成不通。第二种是忘了 ICMP 头只加 20算出来差 8 字节导致配下去的 MTU 比实际小了 8虽然能用但浪费了容量。第三种是在 IPv6 上套用 28 的公式应该是 48。配设备的时候尤其要注意ip link set dev eth0 mtu 1450里的 1450 是整个 IP 包的 MTU不是你 ping 的负载值。这两个数字混了配置就错了。3.4 脚本化一次跑完整个区间手工二分虽然快但如果要验证十几台机器、或者要写进上线检查流程还是脚本更省事。下面这个 bash 脚本会从一个区间里自动找出最大可通负载逻辑是标准的二分#!/bin/bash TARGET$1 LOW1272 # 对应 MTU 1300 HIGH1472 # 对应 MTU 1500 BEST0 while [ $LOW -le $HIGH ]; do MID$(( (LOW HIGH) / 2 )) if ping -M do -s $MID -c 2 -W 1 $TARGET /dev/null 21; then BEST$MID LOW$(( MID 1 )) else HIGH$(( MID - 1 )) fi done if [ $BEST -eq 0 ]; then echo 目标 $TARGET: 1300 以下仍不通检查链路或 ICMP 策略 else echo 目标 $TARGET: 最大可通负载 $BEST推算 MTU $(( BEST 28 )) fi三个参数值得解释一下。-c 2只发两个包因为二分过程中我们要的是快速判断两个包足够了如果链路本身丢包率高可以调到 4 到 5但会变慢。-W 1把超时设成 1 秒默认通常是 10 秒二分七次的话光等待就是一分多钟改成 1 秒整体能压到十秒以内。 /dev/null 21把输出扔掉只看退出码这样脚本干净。如果目标机器比较多我会在脚本外面套一层循环把结果输出成 CSV 格式方便后面比对#!/bin/bash for host in $(cat hosts.txt); do # 上面的二分逻辑最后输出 echo ${host},${BEST},$(( BEST 28 )) donePython 版本逻辑一模一样只是用subprocess调 ping好处是可以顺手把超时、重试、结果归档都做得更规整。脚本化最大的价值不是省那几次手工而是让验证动作可重复、可追溯换个人来跑结果也一样。注意脚本里的区间下限设成 1272MTU 1300是有意为之。低于 1300 的 MTU 在常规以太网环境里极少见如果测到这里还不通基本可以断定是 ICMP 被拦或者链路本身有问题继续往下试意义不大应该换排查方向。4. 几个典型环境的验证实战理论讲完来看实操。不同的网络形态MTU 的坑位置是不一样的我按我自己碰到的频率从高到低排一下。4.1 Overlay网络下的1450这是目前最常遇到的一类。宿主机之间跑 VXLAN 或者类似的封装虚拟机的报文要在外面再包一层50 字节的开销跑不掉所以 overlay 内部的 MTU 通常是 1450。验证方法很直接在 overlay 内部的两台虚机之间先测 1450 对应的负载 1422通了就说明配置正确。但只测这一个值是不够的因为 1422 通了只能说明“链路至少能过 1450”不能说明“链路就是 1450”。如果中间某台设备的 MTU 被误配成 1500 没改过来1422 依然会通你测不出来。真正的验证要在边界上做测 1423对应 MTU 1451这个值应该是不通的。如果它通了说明某处设备的 MTU 还是 1500overlay 的封装开销没有生效这时候大流量进来依然会被分片或者丢弃问题只是被延迟暴露。这个“测通过 测不通过”的双向验证思路是我认为最值得强调的一点。只测通过值等于只验证了下限补上不通过值才验证了上限配置的精确性才算确认。4.2 云主机与容器网络云环境的麻烦在于你摸不到底层设备。你只能看到虚拟网卡看不到宿主机上的虚拟交换机、看不到物理交换机也没法改它们的 MTU。这种情况下验证的目的从“确认我配对了”变成“确认这条路径的实际容量是多少我要不要相应调整上层的 MSS”。做法是从云主机出发分别 ping 同子网的另一台机器、ping 网关、ping 跨可用区的机器三个目标各跑一遍二分。三组数字如果一致说明路径上没有额外的封装如果跨区的那组明显更小说明跨区链路上有额外开销这时候就需要把那台机器的网卡 MTU 调小或者在上层做 MSS 钳制。容器网络更细一层。容器的 veth 对、网桥、以及 CNI 插件本身都可能有自己的 MTU 设置四五个地方任何一个没对齐都会出现“宿主机通、容器不通”或者“同节点容器互通、跨节点不通”的诡异现象。我的排查顺序是先在容器里 ping 容器网关再 ping 宿主机 IP再 ping 跨节点容器逐段缩小范围。每一段都记录下最大可通负载最后拉一张表哪一段数字突然变小问题就在那一段。4.3 PPPoE与无线接入链路家用和企业接入场景里PPPoE 的开销是 8 字节MTU 应该是 1492对应负载 1464。这个数字很多人不知道路由器的 WAN 口 MTU 默认还是 1500结果就是网页能打开、视频能播但偶尔卡住、某些大文件下载中断。无线链路还有额外的注意点。AP 和终端之间可能因为信号质量做速率调整个别设备在处理接近 MTU 上限的帧时表现不稳定会出现“有线测 1472 通无线测 1472 偶发丢”的情况。所以无线环境下的验证-c的次数要给足我一般用 10 次而不是 3 次只要出现超过 20% 的丢失就认为这个尺寸不可靠往下调小 20 到 40 字节再测。这里还有一个隐蔽的问题链路的 MTU 可能是“抖动”的。某些承载网络在负载高的时候会临时调整白天测得 1492 通晚上高峰期就不通了。所以重要链路的验证不要只做一次至少在业务高峰和非高峰各做一次两次结果一致才算稳。4.4 双向验证与MSS联动ping 测出来的是单向的、ICMP 协议的能力而真实业务是 TCP 双向的。这两者之间隔着 MSS 协商。TCP 建立连接时双方在 SYN 包里各带一个 MSS 值表示“我能接收的最大 TCP 段”。这个值通常由本机 MTU 减去 40IPv4 的 IP 头 20 TCP 头 20算出来。也就是说 MTU 1450 对应 MSS 1410。中间设备如果不做 MSS 钳制双方可能协商出一个超过链路能力的大 MSS然后大包被丢表现就是刚才说的 PMTUD 黑洞。所以完整的验证应该分两步。第一步用 ping 确认链路能过的最大 IP 包这是物理事实。第二步确认真实 TCP 连接里协商出来的 MSS 是不是和这个事实匹配这是协议行为。第二步的做法是在两端各抓一次握手包看 MSS 字段或者更简单地直接传一个接近 MTU 大小的文件看会不会卡。我在做跨机房链路的时候养成了一个习惯ping 测完之后一定再用curl拉一个几百 KB 的响应体观察耗时曲线。如果 curl 卡在中段反复重传即使 ping 全通也说明 MSS 有问题需要在网关上加钳制规则。这个组合拳比单看 ping 可靠得多。5. 常见问题与排查实录下面这些是我这些年真正被绊倒过的地方按遇到的频率排。5.1 能ping通大包业务却依然超时这是最让人抓狂的一类。ping 1472 一路绿灯你以为万事大吉结果应用一跑就出问题。原因通常有三种。第一种是ping 走的是不同的路径。有些网络做了基于源地址或者协议类型的策略路由ICMP 和 TCP 走的不是同一条链路MTU 自然可能不同。验证方法是给 ping 指定源地址Linux 下-I参数让它和业务流用同一个源 IP。第二种是反向路径的 MTU 更小。ping 只测了去程回程可能因为非对称路由经过不同设备MTU 更小。这种情况在大包往返时才会暴露因为请求包小、响应包大。验证方法是两端互 pingA 到 B 和 B 到 A 各跑一遍二分。第三种是MSS 协商值超过了链路能力。这就是 4.4 节说的情况需要在中间设备上做 MSS 调整。排查顺序我一般是先指定源 IP 重测 ping再反向测一遍最后看 TCP 握手的 MSS。三步走完基本能定位。5.2 中间设备把ICMP整个吞掉某些安全策略严格的网络会整体屏蔽 ICMP这时候 ping 全是超时完全无法判断是“包太大”还是“根本没通”。区分方法很实用先 ping 一个小包。如果小包也不通那就是 ICMP 被拦跟 MTU 无关换工具。如果小包通、大包不通但又不返回任何差错信息那大概率是 ICMP 差错报文被拦了链路本身可能是通的只是不告诉你真实 MTU。这种情况下换 TCP 探测。用nc或者curl向目标端口发请求配合不同的响应体大小来测虽然不如 ping 精确但能定性。更彻底的办法是在两端同时抓包看大包到底在哪个方向、哪一跳消失这个就要上抓包工具了。5.3 改完MTU重启就失效这个坑纯粹是操作层面的。用ip link set dev eth0 mtu 1450改的是运行时状态重启就没了。要持久化得写进配置文件或者 systemd 单元不同发行版的位置不一样改之前先看本机用的是什么网络管理方式。还有一种情况是改对了但没生效。某些网卡驱动的接收缓冲区大小是固定的MTU 超过某个值时会被静默拒绝命令返回成功但ip link show里的实际值没变。所以改完一定要回头看一眼实际值别信命令的返回值。提示每次改完 MTU我的固定动作是三件事——ip link show看实际值、ping 大包看通不通、ping 更大的包看是否按预期不通。三件事都符合预期才算改完。5.4 常见问题速查表现象最可能原因快速验证动作小包通、大包超时无报错PMTUD 黑洞ICMP 差错被拦换 TCP 探测或两端抓包大包返回“需要分片”链路 MTU 小于发送值直接按报错里的 mtu 值配置ping 全超时包括小包ICMP 被策略屏蔽换端口探测确认基础连通单向通、反向不通非对称路由回程 MTU 更小两端互 ping 各测一次改完立即生效、重启失效未持久化配置检查网络管理方式的配置文件命令成功但实际值未变驱动或硬件限制ip link show复核实际值有线通、无线偶发丢无线链路对极限尺寸不稳定增大 ping 次数观察丢失率6. 把它变成流程上线前的MTU自检清单单次排查靠经验长期稳定靠流程。我把自己常用的检查项整理成清单每次网络变更、每次新机器上线照单执行一遍五分钟以内能完成能挡掉大部分低级问题。6.1 检查项清单第一项确认本机网卡的实际 MTU 值不是配置里写的是ip link show输出里的。配置和执行不一致是常见错误。第二项ping 网关验证理论值。按本机 MTU 减去 28 算出负载发三个包。不通说明本地段就有问题先解决这一段。第三项ping 远端验证端到端。同子网、跨网段、跨区域各找一个目标三组数字都记下来。如果跨区域那组变小说明中间有封装按实测值调整。第四项验证上限。用实测最大负载加 1 再 ping 一次确认它不通。这一步是很多人省略的但没有它你无法排除“其实链路更大、只是我没测到”的可能。第五项反向验证。让对端 ping 回来或者用带源地址指定的方式复测确认双向一致。第六项大文件传输冒烟。用curl或者文件传输拉一个几百 KB 到几 MB 的数据观察有没有中断和异常重传。这是最接近真实业务的验证。第七项记录归档。把每台机器的实测 MTU、测试时间、测试人记到表格里。下次出问题时这份记录是第一手对照材料能立刻看出“是链路变了”还是“一直是这个值”。这套清单看起来啰嗦但真正执行起来很快因为大部分项目都是几条命令的事。它的价值在于把“凭感觉”变成“有依据”尤其是在多人协作的环境里谁来执行结果都一致。6.2 记录与回归最后说一个容易被忽视的点MTU 是会变的。网络不是静态的。加了一台新设备、换了一条运营商线路、升级了一次 overlay 版本、甚至改了一条安全策略都可能让路径 MTU 发生变化。我遇到过最离谱的一次是某次设备固件升级后默认开启了一个额外的封装功能整条链路的 MTU 从 1500 掉到 1442没有任何通知直到业务开始报障才被发现。所以我的做法是把上面那套检查做成定期任务核心链路每周跑一次脚本结果存下来做趋势比对。数字一旦发生变化就触发告警不用等业务出问题。脚本就是第 3.4 节那个二分脚本套个 cron 就行成本极低。如果团队有变更流程我会在流程里加一条硬性要求任何涉及网络路径的变更必须附上变更前后的 MTU 实测记录。这条规则执行下来因为 MTU 导致的故障基本清零了因为问题在变更窗口内就被发现了根本到不了生产。我个人在实际操作中的体会是MTU 这类问题的难点从来不是技术本身公式就那一个命令就那几条。难的是你有没有养成“改完就验、验完就记”的习惯。我早年吃过亏配完觉得肯定没问题就收工了结果三天后业务高峰才炸出来排查成本是当场验证的几十倍。后来我就把验证动作固化成条件反射改任何网络参数手比脑子快命令先敲出去再说。这个习惯救过我很多次也希望它能帮到你。
企业数字化 ERP 产品动态
相关推荐
Ansible Playbook进阶实战:生产级自动化技巧 1. Ansible Playbook进阶实战:从基础到生产级自动化(开头部分)
第一次接触Ansible Playbook时,我被它简洁的YAML语法和声明式编程模式深深吸引。但真正在生产环境大规模使用时,才发现那些基础教程里没讲的细节才是决定… · 2026/11/3 20:02:38
SURPAC地质建模规范:数据表、ID编号与文件命名避坑指南 简介:这份文档面向地质勘探、矿产资源评价及环境监测领域的建模初学者与技术人员,系统梳理了 SURPAC 软件建模的核心知识点,帮助读者建立从数据组织到解译建模的完整认知框架。压缩包内为 1 个 docx 文件,约 17KB,内容… · 2026/11/3 20:02:38
RTDE 实时数据交换:125Hz 上限、两阶段设计与避坑指南 简介:面向UR(优遨)机器人开发者与自动化集成工程师的RTDE接口技术手册,聚焦如何通过标准TCP/IP连接将外部程序与UR控制器同步,同时不破坏控制器实时属性,适用于现场总线驱动交互、机器人I/O操作与轨迹状态绘… · 2026/11/3 20:02:38
回形针的一百年:材料、结构设计与办公场景下的工程智慧 说起 paperclip,也就是回形针,我大概有三四年没正眼看过它了。上周末收拾书桌抽屉,被一盒边缘生锈的回形针划了一下手指,才突然想认真聊聊这个一百多年来几乎没怎么变过样子的办公小物件。一支回形针能做什么?固定几张… · 2026/11/3 20:40:03
高效技术博文拆解:完整项目信息的四要素 理解。在生成博文之前,我需要你提供完整的项目信息。请严格按以下格式填写,尤其不要省略“项目正文”和“关键词”这两项,它们决定了博文拆解的深度和方向。项目标题: [标题]
项目正文: [通常比较零散、不完整的原始描述,可是任意… · 2026/11/3 20:40:03
浪潮AS Manager带外管理实战:兼容老旧RAID与多品牌混管 简介:本资源是浪潮存储系统AS Manager的官方图形化管理软件配套手册,面向企业IT运维人员、存储系统管理员及数据中心技术工程师,解决存储设备集中监控、权限管控与日常配置等核心管理问题。手册内容覆盖AS Manager的安装部署(需JR… · 2026/11/3 20:40:03
React Native Android渲染链路深度解析:从JS指令到GPU像素 1. 这不是“React Native怎么写页面”的入门课,而是带你钻进Android虚拟机里看UI怎么一帧一帧被画出来的如果你已经能用<View>和<Text>搭出一个登录页,甚至封装过几个自定义组件,但某天发现:明明JS层setState很快&… · 2026/11/3 20:40:03
集线器与交换机核心区别及交换机技术解析 1. 集线器与交换机的本质区别在早期的局域网建设中,集线器(Hub)曾经是最基础的网络连接设备。我第一次接触网络设备时,也曾困惑为什么价格更高的交换机(Switch)会逐渐取代集线器。经过多年实际网络部署和维… · 2026/11/3 20:40:03
C语言中goto模拟if-else的原理与实践 1. 为什么用goto模拟if-else?在C语言教学现场,有个学生突然举手问:"老师,既然goto是‘万恶之源’,那为什么教材里还保留这个语法?"这个问题让我想起2012年维护过的某个遗留系统——满屏的goto像蜘… · 2026/11/3 20:39:02
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46