一周前遇到一个问题,比较简单但值得推敲。到底什么时候创建arp邻居项呢?是在查路由的时候呢,还是在实际走路由的时候?
  我们知道,在2.6.32的内核里,在查路由操作的最后,会有一个arp bind neighbour的操作,这个时候就会创建arp表项,即便只是查一下路由,并没有数据包会发送,也会创建这个表项,比如调用一下UDP的connect操作。
  然而在3.5内核之后,路由查找子系统发生了比较大的重构,neighbour管理和路由表管理彻底分开了,因此在查找路由的时候,也就不再会bind neighbour了,只有在实际的数据包发送的时候,在ip_finish_output2才会实际去bind neighbour。虽然这个改动看似没有什么影响,但是却可能带来一些诡异的问题。
  一般而言,系统不会为收到的那些“免费ARP”创建表项,这种ARP进行的只是一些初始化操作,并不是以通信为目的的,因此在Linux系统中会设置arp_accept为0,它的含义表示,如果收到一个ARP回应,该ARP回应在本地找不到任何与其对应的ARP表项,那就不处理它。
  在使用arping的时候,2.6.32内核和3.5以后的内核在行为出现了差异。我们知道arping使用的是packet套接字发包的,也就是说数据包不走IP路由,直接由dev发送出去,这意味着在3.5以后的内核中,ARP表项在使用arping的时候是始终不会被创建的,那么2.6.32内核呢?这要看情况。
  如果在arping的数据包发送前,曾经有查找路由表的操作,那么ARP表项就会被创建(此时必须用ip neigh ls nud none才能看得到),如果arping命令加上了-s选项指定了源IP地址,就不会调用connect,不会查找路由表自然也就不会创建ARP表项了。
  因此,在arp_accpet参数为0的情况下,对于2.6.32内核使用arping的时候,如果指定了-s选项,那么当ARP Reply到达的时候,是不会创建ARP条目的,如果没有指定-s选项,那么当ARP Reply到达的时候,便会创建ARP条目(因为connect调用已经创建了ARP表项)。
  哪个更合理?到底是查找路由时创建ARP表项还是走路由时创建ARP表项,这是一个问题。

到底什么时候创建的ARP表项相关推荐

  1. 进程创建fork--文件表项继承

    进程创建fork–文件表项继承 子进程继承父进程的文件描述表,不继承共享文件表项和iNode. 父进程创建一个子进程后,文件表项中的引用计数器加1变为2,当父进程操作close操作后,计数器减1,子进 ...

  2. 配置基于接口的ARP表项限制和端口安全(限制用户私自接入傻瓜交换机或非法主机接入)

    应用场景:为了防止未授权用户接入网络.用户私自接入交换机.路由器等设备,给公司网络管理带来安全隐患.通过相关技术手段给予禁止,方法有如下二种:配置端口安全和配置基于接口的ARP表项限制 分别介绍二种方 ...

  3. OSPF P2P接口配置arp静态ARP表项

    一.题目拓扑及要求 实验拓扑如上所示,现在要求在AR1和AR2之间配置OSPF(要求使用OSPFv2)实现路由信息交换,最终实现AR1和AR2的互通.实验拓扑非常简单,但是问题的关键在于AR1和AR2 ...

  4. 华为网络设备交换机路由器查看ARP表项命令方法

    描述:华为网络设备交换机路由器查看ARP表项命令方法 命令: display arp

  5. java导出的文件名带正斜杠_如何在名称中创建带正斜杠的注册表项

    我需要创建以下注册表项 HKLM:\software\bmc software\control-m/agent 但由于在"agent"之前的正斜杠而出现问题 创建没有正斜杠的条目我 ...

  6. 如何刷新mac、arp地址表项?

    Switch#show mac address-table //查看MAC地址表项 Switch#clear mac address-table dynamic //清除动态MAC地址表项 组网拓扑 ...

  7. windows10 修复print spooler无法启动问题 错误代码:0x8007076b 无法创建终结点映射表数据库项

    问题: 打印东西的时候发现打印机找不到了,后来发现是print spooler没有启动. 输入win+R,输入services.msc,找到print spooler点击启动, 报错显示无法启动,错误 ...

  8. 邻居表项的mcast_solicit数量

    mcast_solicit和mcast_resolicit控制使用多播发送邻居地址探测报文的次数,对于arp协议,内核默认的mcast_solicit为3. 通过PROC文件mcast_solicit ...

  9. HCIE面试题之交换机和路由器收到未知表项数据包如何处理

    交换机和路由器收到未知表项数据包如何处理 一.交换机是依据数据帧中DMAC查找设备表项进行转发的. 那么此时就会涉及对于未知单播,未知组播,未知广播的处理方式 收到未知单播数据帧,泛洪并接口记录下MA ...

最新文章

  1. 如何获得Oracle系统性能统计? Oracle大型数据库系统在AIXUNIX上的实战详解 集中讨论 14...
  2. openFeign 服务接口的调用03—— OpenFeign 超时控制
  3. aix oracle 10.2.0.1 升级 10.2.0.4,install oracle 10r2 for aix
  4. vb6如何判断文件是否存在_使用boost.filesystem检查文件是否存在的正确姿势
  5. Android中的onWindowFocusChanged()方法详解
  6. 哇撒!这几个SpringBoot前后端分离项目(附源码),star过千,快去收藏夹吃灰吧。。。...
  7. ARC070D No Need
  8. python爬网页html乱码问题
  9. 服务器极光推送消息怎么设置,服务器极光推送消息
  10. python中snip_Snip滚动截屏_腾讯Snip For Mac官方下载-华军软件园
  11. C#调用usb摄像头的实现方法
  12. Compose主题切换——让你的APP也能一键换肤
  13. c 语言代替字母,【c语言】将“China”译成密码,密码规律:用原来字母后边第4个字母代替原来的字母。...
  14. 国家4A级旅游风景区安化云台山欢迎您的到来
  15. Python学习(1)OpenCV读取图片
  16. FinalSub手拍唱词字幕软件
  17. N78接班N73的九大显著改进
  18. 一种基于区块链的场外交易平台
  19. 【玩转CSS】一文带你了解浮动
  20. 【譯】11種不同的糖

热门文章

  1. 苏州经贸学院计算机,苏州经贸职业技术学院教务管理系统入口https://www.szjm.edu.cn/jwc/...
  2. i3 10100Y怎么样 相当于什么水平
  3. 软件测试方式应该倾向哪一种?
  4. linux模式docker中使用mysql
  5. python计算机二级相关操作
  6. Rails源代码分析(22):ActionController::Caching(6) Sweeping
  7. 亚太融媒 |「APEC双碳」数据集成与直观显现提升管理效率 | APEC数据+
  8. ubuntu高效简单安装NVIDIA显卡驱动
  9. 利用cesiumlab将倾斜摄影osgb数据转换成cesium加载需要的b3dm数据
  10. ubuntu root 设置