首页/系统/Linux 内核与性能调优速查/net.ipv4.icmp_ratelimit 响应限速
网络栈调优98 条

net.ipv4.icmp_ratelimit 响应限速

限制内核发送 ICMP 响应的频率(默认 1000ms 的间隔基数,配合 icmp_msgs_per_sec),用于抑制 ICMP 放大与滥用。

什么是 ICMP 响应限速

net.ipv4.icmp_ratelimit 与 net.ipv4.icmp_msgs_per_sec 一起限制内核向外发送 ICMP 响应的速率:前者设定同一目标地址两次响应之间的最小间隔(毫秒,默认 1000),后者设定每秒最多发送的 ICMP 报文数(默认 1000)。它同时约束目标不可达、超时等差错报文,用于抑制 ICMP 被放大滥用以及报文风暴。副作用是网络诊断工具在高频探测时读数会失真。

基本信息

参数路径net.ipv4.icmp_ratelimit / net.ipv4.icmp_msgs_per_sec
默认值1000(毫秒)/ 1000(每秒报文数)
约束对象内核发出的 ICMP 差错与响应报文
易受影响ping、traceroute、路径 MTU 探测的观测结果
相关项icmp_echo_ignore_all、icmp_echo_ignore_broadcasts
生效范围内核全局

典型使用场景

  • 大批量 ping 探测出现丢包,确认是否为内核限速导致
  • traceroute 中间跳显示不完整时排除限速因素
  • 安全加固:抑制 ICMP 放大与滥用带来的带宽消耗
  • 丢包排查时避免把限速造成的丢包误判为链路故障
  • 与其他 ICMP 开关一起核对,确认整体行为符合基线

查看与调整

查看与调整
sysctl net.ipv4.icmp_ratelimit net.ipv4.icmp_msgs_per_sec
sysctl net.ipv4.icmp_echo_ignore_all net.ipv4.icmp_echo_ignore_broadcasts
ping -c 20 -i 0.2 <目标>                  # 高频探测观察是否大量丢失
ping -c 20 -i 1 <目标>                    # 放慢间隔对照结果
traceroute -n <目标> | head -10           # 中间跳是否有响应
# 排查期临时放宽(记录原值):sysctl -w net.ipv4.icmp_ratelimit=0

现象归因

现象可能原因验证方式
高频 ping 大量丢包触发内核限速放慢间隔或临时放宽后复测
traceroute 中间跳缺失中间设备或本机限速换协议探测、对比不同目标
只有某类目标不可达限速与目标地址相关核对 ratelimit 与目标对应关系
探测结果稳定丢同比例限速统一丢包看是否与速率成正比
排障期间临时把 icmp_ratelimit 设为 0 会关闭该限速,属于临时手段;记录原始值并在排查结束后恢复,否则会把诊断噪声留在生产配置里。
限速过严会让网络诊断工具读数失真:把限速造成的丢包当成链路故障,可能触发不必要的设备更换或链路调整。

易错点

  • 限速过严会让网络诊断工具读数失真,排查期临时放宽并记录原值,事后务必恢复
  • 与 icmp_echo_ignore_* 的组合行为要一并评估,只看一个参数会得到片面结论
  • 把高频 ping 的丢包直接判定为链路质量差,忽略本机或中间设备的 ICMP 限速
  • 在不同内核版本上默认行为可能不同,跨版本迁移后网络诊断表现差异要用本机实测确认

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/net.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌