看到不完整的ARP的原因是什么?
对于三层交换机来说,交换机中的三层模块就是一个路由器,它的工作原理就像一个路由器,它的工作原理和其他任何主机的ARP一样。三层交换机仍然主要是二层交换机,二层交换机仍然像二层交换机一样工作。第 3 层交换机的第 3 层和第 2 层部分实际上是分开的。第 3 层接口(虚拟接口和任何配置为第 3 层接口的物理接口)将使用 ARP 表,但第 2 层接口将使用 MAC 地址表。
当主机(包括路由器或三层交换机中的路由模块)发送 ARP 请求但未收到回复时,将 ARP 表项标记为incomplete
。
但是如果服务器向交换机发送 ARP 请求但没有收到回复怎么办?服务器会不会在自己的ARP表中显示ARP不完整,交换机不显示任何条目?
那要看。如果主机向另一台主机(包括路由器)发送 ARP 请求,但尚未收到回复,则主机 ARP 表条目将标记incomplete
为路由器 IPv4 地址。
路由器在其 ARP 表中的内容取决于路由器是否收到 ARP 请求,以及路由器是否已具有主机的 ARP 表条目。
具有主机现有 ARP 表条目的路由器将继续拥有该条目,直到路由器因超时将其清除。超时不是由 RFC 强制要求的,但 RFC 确实有一个部分处理对 ARP 表条目使用超时的可能性,大多数主机都这样做:
可能需要表老化和/或超时。这些的实现超出了本协议的范围。
如果路由器从未收到 ARP 请求,并且它没有主机的条目,则路由器 ARP 表中将没有条目。
如果路由器收到主机的 ARP 请求,但返回给主机的回复丢失,则路由器将拥有主机的完整 ARP 表条目。
要了解 ARP 的工作原理,您应该阅读RFC 826,以太网地址解析协议 - 或 - 将网络协议地址转换为 48 位以太网地址以在以太网硬件上传输。请记住,ARP 适用于 IPv4,但不适用于 IPv6,它具有 ND(邻居发现)而不是 ARP。
两个 IPv4 节点在公共第 2 层网段(通常是以太网)上进行通信需要成功的 ARP 解析。
不完整的 ARP 请求有两个基本原因。
ARP 请求尚未得到答复。目标节点没有收到 ARP 请求,或者没有收到其响应。目标节点可能已关闭。
源节点的网络掩码配置不正确。源节点将其子网中的所有目的地视为本地或链路上的:它希望能够直接通过其以太网接口与它们对话,而无需网关路由器的帮助。
当例如在192.168.0.0/24子网内的节点被错误地设置了192.168.0.10/ 16它认为像192.168.16.1目的地本地。它不会尝试使用网关,而是尝试使用不完整的直接 ARP。
源节点或目标/下一跳节点是路由器、多层交换机还是端节点都无关紧要。
交换机的 ARP 表仅由交换机管理接口用于交换机本身生成的 IP 流量。
否则,交换机只查看第 2 层信息。他们不懂ARP。
另一个可能的原因 - dhcpcd 设置不正确
我添加了这个答案,虽然它(可能)与上面的具体问题没有直接关系,但在某些情况下是相关的
如果系统静态 ip / dhcp 设置不正确,这可能会显示为间接副作用。
在我的特定情况下,我有一台 Linux 机器,我移动了位置并更改了网络设置。
/etc/dhcpcd.conf
当我再次将机器移回时,我忘记在 中更新它们。
这是我的 dhcpcd.conf
interface eth0
static ip_address=192.168.1.8/24
static routers=192.168.1.254
#static routers=192.168.1.1
static domain_name_servers=127.0.0.1
当它被“破坏”时,我把这行static routers=192.168.1.254
注释掉了,下面的那行#static routers=192.168.1.1
没有注释。
这随后导致arp
显示地址的无效条目(“不完整”)192.168.1.1
。
尽管我一周前才搬了这个系统,几天前又搬回来了,但我完全不知道它出了什么问题。据我所知,我可以将它连接到我的本地网络,通过 ssh 正常连接,并且没有出现任何问题ip addr
。traceroute
也没有显示任何有用的信息,它只是建议所有查询都通过单跳到达“机器主机名”。显然,这毫无意义并且是错误的,但它并没有给我任何关于问题是什么的迹象——它暗示所有查询都在同一台机器上(以某种方式)得到解决。顺便说一下,这台机器做DNS。
与 OP 问题没有直接关系,但可能对将来遇到此问题的其他人非常有用,这是迄今为止您找到的唯一诊断方法,因为其他似乎没有什么错误!
只是关于我如何诊断这个的一些说明
- 当使用本机作为网络上其他机器的 DNS 服务器时,这些机器无法解析外部 DNS 请求
- 我可以通过 ssh 进入 DNS 服务器(这是预期的,因为它的 IP 设置为静态,并且交换机/路由器还希望看到一台具有此静态 IP 的机器通过交换机连接到本地以太网)。
- 表明某些问题的第一件事
sudo apt update
失败了。(由于这是一个 DNS 服务器,它没有图形界面,因此虽然运行像 Web 浏览器这样的东西会更快地指出这个问题,或者从网络桌面托盘图标,它没有任何这些东西。) ping 8.8.8.8
也失败了,但是 ssh 和 ping 本地机器很好/etc/network/interfaces[.d]
但是我检查了这些目录中的所有文件都是空白的/设置为默认值,因为 DNS 软件管理这些- 通过提供的 Web 界面连接到 DNS 服务器时,DNS 软件中没有错误/警告
- 我开始检查诸如
ip addr
(没有问题)和arp
. 我已经说过traceroute
没有表明问题可能是什么,但确实表明发生了一些奇怪的事情。 - 寻找
arp
可能有不完整条目的原因引导我走正确的路线 - 我发现了这个问题(https://serverfault.com/questions/765380/when-do-stale-arp-entries-become-failed-when-never-used)并开始研究如何删除 arp 条目
- 我删除了条目
arp -d 192.168.1.1
- 然而它一直回来
- 我试图
192.168.1.1
从另一台机器连接到我的本地网络,但是我并不感到惊讶我无法这样做或 ping 它,因为我的网络上没有具有此地址的机器 - 通常,此地址将是您的网关地址/家庭应用程序中的 ISP 路由器
- 这提醒我,我已经在另一个位置设置了一个网络适配器来获取地址
192.168.1.1
,并且连接到该地址的计算机被用作连接网络192.168.0.X
和192.168.1.X
- 原来的位置在网络上
192.168.1.X
,我搬到的位置在192.168.0.X
- 由于大多数
192.168.1.X/24
网络192.168.1.1
都是作为默认网关使用的,看到这个IP最初并没有引起任何怀疑,也没有因为任何原因而显得“奇怪” - 但是我
dhcpcd.conf
如上所述更改了默认网关并解决了问题 - 吸取的教训,当临时在异地创建一个奇怪的计算机到计算机网络时,给路由器适配器/网卡一个奇怪的静态 IP,比如
192.168.1.50
- 这可能有助于提醒自己或表明在某处的设置文件中设置了一些不寻常的东西