UDP包导致大量ARP报文的问题处理
现象:
监控系统中需要采用轮寻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报文的问题处理相关推荐
- Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持.MAC泛洪)及数据流追踪和图像抓取(二) 2019年09月22日 21:55:44 Eastmount 阅读数 3515 文章标签: ...
- PHP 接收 UDP包_UDP详解(广播,组播)(转)
先转载一位大佬对UDP的解说.再测试一下广播和多播 原文:https://www.cnblogs.com/HPAHPA/p/7737531.html 广播多播测试代码 链接: https://pan. ...
- tcpdump显示udp包_TCPdump抓包命令详解
TCPdump抓包命令 tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具. tcpdu ...
- linux下通过伪造udp包来实现指定网卡发送数据
1.包含头文件 #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #includ ...
- UDP包的大小与MTU
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一类的发送聊天消息的情况 ...
- 以太网数据包、IP包、TCP/UDP 包的结构(转)
源:以太网数据包.IP包.TCP/UDP 包的结构 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6). IP包头长度(Head ...
- java发送接收组播(多播)数据包(UDP包)
全栈工程师开发手册 (作者:栾鹏) java教程全解 java发送组播(多播)数据包.首先要加入组播组,然后才能向组播组发送组播数据包和接收组播数据包. 以下代码,在局域网中测试有效. 测试代码 pu ...
- 一文详解ARP报文格式及工作原理
ARP(地址解析协议) 作用: 将目的IP解析为目的MAC,用于二层帧结构的目标MAC封装,数据必须封装为帧才能够被网卡发送出去,帧中必须包含MAC. 报文格式: ARP报文不能穿越路由器,不能被转发 ...
- packet tracer 学习ARP报文请求
实现四种效果 转发异网帧 丢弃同网帧 学习源地址 广播未知帧 拓扑如上,配置主机端口IP与网关 路由ARP为空 广播未知帧&学习源地址&转发异网帧 如图所示通信,打开ARP报文,在路由 ...
- 计算机网络数据通信部分之网络层ARP报文分析
ARP (地址解析协议) 即(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有 ...
最新文章
- 20位程序员关于求职的疑问,以及我给出的参考答案
- 数据分层/ODS/DW/DM
- 干货:TensorFlow1.2~2.1各个GPU版本CUDA和cuDNN对应版本整理
- python mysql example_Python_Example_ Pycharm(python) 与 数据库(MySQL) 连接学习/示例
- python qt designer 重定向_Python+PyQt5+QtDesigner+PyUic+PyRcc环境安装与配置
- list 根据某个数字所在位置_富玩车穷玩表,一个案例轻松认识python列表List——计算Hadamard 乘积...
- php对接钉钉_PHP使用POST方法与钉钉对接无返回结果的问题
- 基本矩阵运算的Java实现
- 开源cms系统:We7 CMS 2.5版内测版发布啦!
- WebEx Recorder:性能最好的录屏软件
- python标准库需不需要导入_Python标准库需要导入吗_后端开发
- 基于html+css房地产销售系统设计与实现-计算机毕业设计源码+LW文档
- c# .net PayPal支付验证
- 删除烦人的微软拼音输入法
- USB PD快充协议详解(待续)
- 新浪微博技术架构分析-转载
- 360浏览器强制使用极速模式
- 大张伟侮辱了恩克,优酷侮辱了世界杯
- Python 注册表作业制作
- 服务器防火墙 配置端口号