现象:

监控系统中需要采用轮寻udp包的方式,对系统配置内的节点发送UDP包,并根据返回的UDP报文确定目标节点的状态。测试环境中未发现异常,但在实际工程应用时发现使用节点判断功能后,交换机出现故障报警,tcpdump观察发现大量的ARP报文,最终导致网络处理速度较慢的现地设备出现网络异常。

UDP与ARP的关系:

在《TCP/IP详解  卷2:实现》21章ARP:地址解析协议中,找到相关的描述:

当某主机要向以太网中另一台主机发送IP数据时,它首先根据目的主机的IP地址在ARP高速缓存中查询相应的以太网地址,ARP高速缓存是主机维护的一个IP地址到相应以太网地址的映射表。如果查到匹配的节点,则相应的以太网地址被写入以太帧首部,数据报被加入输出队列等候发送。如果查询失败,ARP会先保留待发送的IP数据报,然后广播一个询问目的主机硬件地址的ARP报文,等收到回答后再将IP数据报发送出去。

结合工程实际情况和上述描述,可以确认:

1. ARP数据包,是因为UDP消息的目标节点在本机ARP表中不存在而产生的;

2. UDP为了判断目标节点情况按照200ms的间隔进行发送,但由于存在大量不在线的目标节点,导致ARP包大量产生。

在该书的561页,描述了防止ARP洪泛的机制:

RFC1122要求ARP避免在收到ARP回答前以过高的速度对一个以太网地址重发ARP请求。Net/3采用以下方法来避免ARP洪泛:

  • Net/3不在同一秒内发送多个对应统一目标地址的ARP请求;
  • 如果在连续5个ARP请求后还没有收到回答,路由节点的RTF_REJECT标志置为1,时间设为往后的20秒。这会在20秒内拒绝发往该目标地址的IP数据报。
  • 20秒后,arpresolve会继续发送该目标地址的ARP请求。

该文字所描述的机制和实际情况存在略微出入,但是大致机制相同。本机会对所有的数据发送做统一的控制,如果主机信息在ARP表中不存在,则进行ARP请求;该请求存在请求次数和请求失败延时的控制,以避免ARP洪泛。

为了深入理解ARP包的发送,查询了系统内核参数:

可以看到,失败重试的参数为3,发送间隔为1000ms。这与tcpdump观察的结果吻合。

解决方案:

知道了原因,下一步就是处理。考虑有如下处理方法:

  • 修改发送策略

大量ARP包是向不在线设备发送UDP报文而导致的,因此考虑对不在线节点,间隔较长时间发送UDP。这里不能不发送,因为该UDP机制存在的目的就是为了判断节点的工作状态,如果不在线节点不进行发送,就意味着永远无法判断重新上线节点的状态。

  • 修改内核参数

修改ucast_solicit或retrans_time参数,ucast_solicit代表尝试的次数,retrans_time代表重试的间隔时间。增加 retrans_time参数,就可以防止ARP洪泛。

UDP包导致大量ARP报文的问题处理相关推荐

  1. Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)

    [网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持.MAC泛洪)及数据流追踪和图像抓取(二) 2019年09月22日 21:55:44 Eastmount 阅读数 3515 文章标签:  ...

  2. PHP 接收 UDP包_UDP详解(广播,组播)(转)

    先转载一位大佬对UDP的解说.再测试一下广播和多播 原文:https://www.cnblogs.com/HPAHPA/p/7737531.html 广播多播测试代码 链接: https://pan. ...

  3. tcpdump显示udp包_TCPdump抓包命令详解

    TCPdump抓包命令 tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具. tcpdu ...

  4. linux下通过伪造udp包来实现指定网卡发送数据

    1.包含头文件 #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #includ ...

  5. UDP包的大小与MTU

    在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一类的发送聊天消息的情况 ...

  6. 以太网数据包、IP包、TCP/UDP 包的结构(转)

    源:以太网数据包.IP包.TCP/UDP 包的结构 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6). IP包头长度(Head ...

  7. java发送接收组播(多播)数据包(UDP包)

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java发送组播(多播)数据包.首先要加入组播组,然后才能向组播组发送组播数据包和接收组播数据包. 以下代码,在局域网中测试有效. 测试代码 pu ...

  8. 一文详解ARP报文格式及工作原理

    ARP(地址解析协议) 作用: 将目的IP解析为目的MAC,用于二层帧结构的目标MAC封装,数据必须封装为帧才能够被网卡发送出去,帧中必须包含MAC. 报文格式: ARP报文不能穿越路由器,不能被转发 ...

  9. packet tracer 学习ARP报文请求

    实现四种效果 转发异网帧 丢弃同网帧 学习源地址 广播未知帧 拓扑如上,配置主机端口IP与网关 路由ARP为空 广播未知帧&学习源地址&转发异网帧 如图所示通信,打开ARP报文,在路由 ...

  10. 计算机网络数据通信部分之网络层ARP报文分析

    ARP (地址解析协议) 即(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有 ...

最新文章

  1. 20位程序员关于求职的疑问,以及我给出的参考答案
  2. 数据分层/ODS/DW/DM
  3. 干货:TensorFlow1.2~2.1各个GPU版本CUDA和cuDNN对应版本整理
  4. python mysql example_Python_Example_ Pycharm(python) 与 数据库(MySQL) 连接学习/示例
  5. python qt designer 重定向_Python+PyQt5+QtDesigner+PyUic+PyRcc环境安装与配置
  6. list 根据某个数字所在位置_富玩车穷玩表,一个案例轻松认识python列表List——计算Hadamard 乘积...
  7. php对接钉钉_PHP使用POST方法与钉钉对接无返回结果的问题
  8. 基本矩阵运算的Java实现
  9. 开源cms系统:We7 CMS 2.5版内测版发布啦!
  10. WebEx Recorder:性能最好的录屏软件
  11. python标准库需不需要导入_Python标准库需要导入吗_后端开发
  12. 基于html+css房地产销售系统设计与实现-计算机毕业设计源码+LW文档
  13. c# .net PayPal支付验证
  14. 删除烦人的微软拼音输入法
  15. USB PD快充协议详解(待续)
  16. 新浪微博技术架构分析-转载
  17. 360浏览器强制使用极速模式
  18. 大张伟侮辱了恩克,优酷侮辱了世界杯
  19. Python 注册表作业制作
  20. 服务器防火墙 配置端口号

热门文章

  1. 仿苹果官网产品页面效果特效
  2. 《葬经》郭璞 高清彩色版手抄欣赏
  3. Windows NTSTATUS Values 进程终止消息标识符
  4. Google Draco 源码解析
  5. PCIE实现PIO模式寄存器读写调试记录
  6. MongoTemplate地理位置查询(标准)
  7. word excel如何用印章生成器软件在线制作电子印章 电子公章图片
  8. 如何在excel中输入身份证号
  9. ZenCart facebook 登陆
  10. JAVA试练塔之试炼技能图