不愿意透露姓名的同事反馈,在任何一台A 服务器上,mtr 另外一台B 服务器,UDP 模式,发包频率只要大于 1s/次
,会出现固定丢包,并且丢包总是在最后一跳:
mtr -u {ip} -nz --interval 0.5
但是使用mtr 默认的模式,icmp不会丢包。同事反馈不同厂商的机器,行为一致,那应该就系统内做的限制,所以怀疑我在机器上针对UDP 做了限速。
交叉测试了下, 1. 选择2台同机房的A,B ,A mtr B(公网IP),和反馈现象一致 2. A mtr B (内网IP),和反馈现象一致
当interval 是0.5 的时候,丢包率恰好是50%,在B 上抓包:
B 的回ICMP: Destination Unreachable 是间隔性的。
按照icmp ratelist 搜到了,找到了答案。
系统默认的icmp_ratelimit
是1000
,恰好是1s,那为何mtr ICMP 模式不会丢呢?
因为还有一个参数icmp_ratemask
,默认为以下几类包被限制:
icmp_ratemask (integer; default: see below; since Linux 2.4.10)
Mask made of ICMP types for which rates are being limited.
Significant bits: IHGFEDCBA9876543210
Default mask: 0000001100000011000 (0x1818)
Bit definitions (see the Linux kernel source file
include/linux/icmp.h):
0 Echo Reply
3 Destination Unreachable *
4 Source Quench *
5 Redirect
8 Echo Request
B Time Exceeded *
C Parameter Problem *
D Timestamp Request
E Timestamp Reply
F Info Request
G Info Reply
H Address Mask Request
I Address Mask Reply
IMCP 模式下回的包是G Info Reply
,未在icmp_ratemask
标记范围内。
感谢细心的同事,又学习到了。