ARP 超时。为什么要固定周期?

2023-12-23

这个问题多年来一直困扰着我。

基本问题:ARP有什么原因吗has要在 ARP 缓存条目上实现固定超时吗?

我在实时圈子里做了很多工作。如今,我们的大部分系统间通信都是通过专用 UDP/IP 链路进行的。这在很大程度上可以实时可靠地工作,但有一点是:ARP 条目超时。

典型的 ARP 实现方式如下:

  • 当客户端请求将 IP 数据包发送到 MAC 地址未知的 IP 地址时,堆栈不会发送该 IP 数据包,而是发出 ARP 请求。如果上层 (TCP) 确实重新发送,那没问题。但由于我们使用UDP,原始消息丢失了。在启动时这是可以的,但在操作过程中这是一个坏事™.
  • (动态)ARP 表条目会定期从 ARP 表中删除,即使我们在一毫秒前刚刚从该系统收到一个数据包。这意味着坏事™我们的系统经常发生这种情况。

显而易见的解决方案(我们虔诚地使用它)是使所有 ARP 条目静态。然而,这是一个皇家 PITA(特别是在 RTOS 上,查找接口的 MAC 地址并不总是只需单击几次 GUI 即可)。

当我们编写自己的 IP 堆栈时,我通过从不使 ARP 表条目超时来解决这个问题。这有明显的缺点。更稳健且完全合理的解决方案可能是每当看到来自同一 MAC/IP 组合的数据包时刷新条目超时。这样,只有在一段时间内没有与堆栈通信的条目才会超时。

但现在我们使用供应商的 IP 堆栈,并且又回到了愚蠢的 ARP 超时。我们对这个供应商有足够的影响力,我也许可以让他们使用一个不那么不方便的方案。然而,这种脑死亡超时算法的普遍性让我相信它可能是实现的必需部分。

这就是问题所在。这种行为在某种程度上是必需的吗?


RFC1122 对互联网主机的要求 http://www.ietf.org/rfc/rfc1122.txt讨论这个。

     2.3.2.1  ARP Cache Validation

        An implementation of the Address Resolution Protocol (ARP)
        [LINK:2] MUST provide a mechanism to flush out-of-date cache
        entries.  If this mechanism involves a timeout, it SHOULD be
        possible to configure the timeout value.

      ...

       DISCUSSION:
             The ARP specification [LINK:2] suggests but does not
             require a timeout mechanism to invalidate cache entries
             when hosts change their Ethernet addresses.  The
             prevalence of proxy ARP (see Section 2.4 of [INTRO:2])
             has significantly increased the likelihood that cache
             entries in hosts will become invalid, and therefore
             some ARP-cache invalidation mechanism is now required
             for hosts.  Even in the absence of proxy ARP, a long-
             period cache timeout is useful in order to
             automatically correct any bad ARP data that might have
             been cached.

网络可以非常动态;当旧的租用时间到期时(使当前的 ARP 数据无效),DHCP 服务器可以将相同的 IP 地址分配给不同的计算机,可能会出现 IP 冲突,除非定期发出 ARP 请求,否则永远不会注意到这些冲突。

它还提供了一种检查主机是否仍在网络上的机制。想象一下,您正在通过 UDP 将视频流式传输到某个 IP 地址 192.168.0.5。如果您永远缓存该机器的 MAC 地址,即使主机出现故障,您也只会继续发送 UDP 数据包。时不时地发出 ARP 请求会因目标无法到达错误而停止流,因为没有人响应该 IP 的 MAC。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARP 超时。为什么要固定周期? 的相关文章

  • Dart 是否有 socket.io 端口?

    我使用这个简单的示例了解了 Dart 中的基本 websocket 功能 https github com financeCoding chat websocket dart https github com financeCoding c
  • 使用 pyqtgraph 和 LiDAR 快速实时绘制点

    我想创建一个实时的点图 GUI 我正在使用 Scanse Sweep LiDAR 每次扫描该 LiDAR 工作频率为 1 10Hz 时 我都会收到大约 1000 个描述 LiDAR 周围环境的点 x y 这是一个 2D 激光雷达 我到处寻找
  • 用于接收 UDP 数据包的可变大小缓冲区

    我有一个 UDP 套接字 它将接收一些可能不同大小的数据包 并且我异步处理它 socket async receive from boost asio buffer buffer 65536 senderEndpoint handler 这
  • 接收来自 N 个客户端的响应,以回复通过 UDP 的广播请求

    我正在为特定类型的网络多媒体设备实现一种 IP 查找器 我想找出 LAN 中该类型的所有活动设备及其 IP 地址和其他详细信息 设备有自己的设备发现方式 其工作原理如下 客户端通过 UDP 通过 LAN 发送广播请求 目的端口号是固定的 作
  • 内核模块和SCHED_RR线程的优先级

    我有一个嵌入式 Linux 平台 Beagleboard 运行 Angstrom Linux 连接了两个设备 通过 USB 连接的激光测距仪 Hokuyo UTM 30 通过 SPI 连接的定制外部板 我们编写了一个Linux内核模块 负责
  • 使用 Java RealTime 的生产者-消费者架构

    我正在使用 Java Realtime Sun JRTS 2 2 设计交易系统 并且想问一些有关最佳实践的问题 因为我担心发明轮子 并且非常确定我的任务已经解决了 所以我有一个线程不断读取套接字 解析字节并提取消息 二进制协议 之后 我应该
  • 如何在QT中发送和接收UDP数据包

    我正在 QT 中编写一个小型应用程序 它通过本地网络发送广播 UDP 数据包 并等待来自网络上的一个或多个设备的 UDP 响应数据包 创建套接字并发送广播数据包 udpSocketSend new QUdpSocket this udpSo
  • 为什么我们可以将 sockaddr 转换为 sockaddr_in

    我明白为什么强制转换很有用sockaddr to sockaddr in 但我不明白这怎么可能 据我所知 它们的大小相同sockaddr in添加了sin zero使其大小相同 我想知道编译器如何知道从哪里获取信息sockaddr in如果
  • 为什么通过UdpClient发送会导致后续接收失败?

    我正在尝试创建一个 UDP 服务器 它可以向所有向其发送消息的客户端发送消息 真实情况要复杂一些 但最简单的方法是将其想象为一个聊天服务器 之前发送过消息的每个人都会收到其他客户端发送的所有消息 所有这一切都是通过UdpClient 在单独
  • Android:实时图像处理

    我有一个应用程序 它进行相机预览 对每一帧执行一些基本的图像处理功能 例如边缘检测 颜色变化 图像扭曲等 并 实时 将修改后的帧显示到屏幕上 类似于Android Market中的 Paper Camera 应用程序 我的方法总结 我也做过
  • 接收UDP数据包

    假设我的程序通过网络 UDP 发送 1000 字节 它是否保证接收方将 一批 接收 1000 个字节 或者他可能需要执行多次 读取 直到收到完整的消息 如果后者为真 我如何确保同一消息的数据包顺序不会 混淆 按顺序 或者协议可能保证这一点
  • 在 macOS 10.12 上绑定到套接字时出现 NSPOSIXErrorDomain

    我正在玩CocoaAsyncSocket https github com robbiehanson CocoaAsyncSocket在 Swift 中绑定到 UDP 套接字并通过本地网络接收消息 我正在初始化一个套接字 并尝试绑定到一个端
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 在 PowerShell 中通过 UDP 发送和接收数据

    我正在尝试编写一个脚本来使用 PowerShell 进行测试和应用 测试应包括通过 UDP 向远程服务器发送字符串 然后读取该服务器的响应并对结果执行某些操作 我需要的唯一帮助是脚本的中间两个步骤 发送字符串 然后 接收响应 在端口 UDP
  • 使用 Boost.Asio 进行广播的问题

    如果问题之前已得到解答 我提前表示歉意 但我已经搜索并没有找到任何对我有帮助的东西 正如问题标题所示 我正在尝试将包从服务器广播到一组侦听任何消息的客户端 客户端将计算一秒钟内收到的消息数 服务器端的事情是这样的 class Server
  • 使用服务器发送事件进行双向客户端-服务器通信(而不是 WebSocket)的缺点

    最近 我发现服务器发送事件是 WebSocket 的一种更简单的替代方案 用于从服务器进行推送 大多数比较它们的地方 例如here https stackoverflow com questions 5195452 websockets v
  • 嵌入式+实时开发培训的建议[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在学习嵌入式实时工程职业 但发现找到好的培训材料有些困难 特别是因为您无法像桌面应用程序开发那
  • 为什么 SNMP 通常在 UDP 上运行而不是 TCP/IP 上?

    今天早上 工作中出现了大问题 因为 SNMP 陷阱没有 通过 因为 SNMP 是通过 UDP 运行的 我记得在大学网络课上 UDP 不能像 TCP IP 那样保证传输 维基百科说 SNMP 可以在 TCP IP 上运行 但 UDP 更常见
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是

随机推荐

  • 获取导致异常的异常描述和堆栈跟踪,全部作为字符串

    如何转换捕获的Exception 其描述和堆栈跟踪 到str外用 try method that can raise an exception params except Exception as e print complete exce
  • OL3:缩放到地图上的矢量图层

    我有一张带有 openlayers 3 和矢量图层的地图 我想将地图调整为该矢量图层的大小 但到目前为止 我所能得到的只是将地图集中在该矢量的最后一个点上 因为在创建地图时无法访问矢量图层的点 if trackMap null for va
  • GWT RPC - 每个应用程序多个 RPC 服务

    我目前正在使用一个具有大型 RPC 服务的 GWT 应用程序 它有 100 多个方法 所有方法都做不同的事情 如果我将其拆分为多个 RPC 服务 我会获得什么样的性能优势 障碍 我相信我必须为每一个创建一个新的 servlet 所以我的主要
  • iframe onmouseout 捕获

    目前 我的父页面中有一个 iframe 我想知道当用户单击或移动到 iframe 边框之外 即返回父页面 时 是否可以捕获 onmouseout 事件来捕获 您应该能够在 iframe 页面中执行 document body onmouse
  • 圆角桌 LESS

    经过一番挖掘后我发现this https stackoverflow com questions 628301 css3s border radius property and border collapsecollapse dont mi
  • 当我们不需要主外键关系就可以加入时,为什么还需要主外键关系?

    当我们不需要主外键关系就可以加入时 为什么还需要主外键关系 test1 id lname fname dob no primary and foreign key and not unique no constraints test2 id
  • JEP 145 发生了什么(由于编译代码重用,jvm 启动速度更快)?

    在2012年 捷普 145 http hg openjdk java net jep jeps rev a16daa94ba0f创建的目的是 缓存编译后的本机代码在java中用于更快的 jvm 启动 当时 它已被正式宣布 https twi
  • Tensorflow,在 RNN 中保存状态的最佳方式?

    我目前有以下代码 用于张量流中一系列链接在一 起的 RNN 我没有使用 MultiRNN 因为我稍后要对每一层的输出做一些事情 for r in range RNNS with tf variable scope recurent d r
  • 适用于 iOS15 和 iOS16 的 NavigationLink

    我正在开发一个以 iOS 15 作为最低目标的应用程序 这意味着它还需要支持较新版本的 iOS 对于屏幕导航 我使用 NavigationView NavigationLink destination isActive label 我正是需
  • 无法在 Visual Studio 2013 中同步 Git

    我正在与另一位开发人员合作 我们似乎陷入了 GIT 困境 我定期提交代码并定期推送到远程主机 我的同事 虽然是一个很棒的人和开发人员 还没有养成这样做的习惯 当我今天早上去 Pull the Head 修订时 这是我的习惯 我遇到了以下错误
  • Asp.net MVC 核心中 Ajax.BeginForms 的替代方案是什么

    我认为在 asp net MVC 核心中 我们不再可以选择使用 Ajax BeginForms 那么 Ajax BeginForm 的替代方案是什么 您可以使用内联data ajax 属性
  • ASP.NET LINQ 查询用于过滤和循环多个表

    我有两个单独的域模型类 App 和 AgeGroup App 类包含一些基本的整数和字符串属性 AgeGroup 类也是如此 我想要实现的是 AppOrder 及其属性的所有应用程序的 JSON 输出 嵌套在按其 GroupOrder 属性
  • JQuery - 查找任何级别的所有后代,但不查找这些后代的后代

    问题 我正在尝试使用 JQuery find 查找元素内的所有后代在任何级别具有给定属性的后代 但不是具有相同属性的后代的后代 帮助理解 JQuery 下面查询的预期目标是查找元素内的所有后代 some id 在任何级别 有some att
  • 如何在 PHP 中检查域名服务器?

    我需要检查域名服务器正在使用什么 但在 PHP 中找不到正确的解决方案 我努力了checkdnsrr and dns get record 对于某些正在运行的域 它们都不会显示 NS Whois也不是解决办法 我的目的是过滤已设置名称服务器
  • 当您使用 C++ 中的 asm 代码操作寄存器时,会发生什么情况?

    一些代码 int x 1 for int i 1 i lt 10 i x i asm mov eax x 如果这个程序使用eax为了增加价值i 当我操纵时会发生什么eax 编译器会保存之前的寄存器吗 asm在执行 asm 代码后调用并使用它
  • 如何将 SQL 作为带有参数的文件传递给 Airflow Operator

    我在 Airflow 中有一个操作员 import orders op MySqlToGoogleCloudStorageOperator task id import orders mysql conn id con1 google cl
  • Firebase,以“孩子存在”为条件进行查询?

    我有一个这样的数据库 附照片 行程有BIDS and awardedBid I use awardedBid null作为确定该行程是否仍可竞标的一种方式 但是 我不知道如何查询该条件 所以我必须通过创建另一个字段来进行破解bidDone所
  • 插入具有唯一列的 sqlite 表

    我将值插入到我的表中 来自 python 代码 如下所示 cur execute insert into t a b c values a b c 有一个unique constraint在 c 列上 常见的方式是什么insert如果我想涵
  • 是否有通用的 CIL 代码可以将任何类型实例转换为字符串?

    是否可以编写通用 CIL 指令来将任何类型 值和引用 的实例转换为 System String 我特别对 Mono Cecil 代码感兴趣 它将这些指令注入到方法中 分析通用方法时 我提出了这些 Mono Cecil 调用 它应该将第 i
  • ARP 超时。为什么要固定周期?

    这个问题多年来一直困扰着我 基本问题 ARP有什么原因吗has要在 ARP 缓存条目上实现固定超时吗 我在实时圈子里做了很多工作 如今 我们的大部分系统间通信都是通过专用 UDP IP 链路进行的 这在很大程度上可以实时可靠地工作 但有一点