Ubuntu 22.04
我有一条IPv6
标记为INCOMPLETE
:的记录
$ip neigh
xxxx::xxxx dev eth0 INCOMPLETE
尝试将其删除为
$sudo ip neighbo del xxxx::xxxx dev eth0
实际上并没有删除它,因为ip neigh
报告方式相同。有没有办法删除INCOMPLETE
邻居记录?
Ubuntu 22.04
我有一条IPv6
标记为INCOMPLETE
:的记录
$ip neigh
xxxx::xxxx dev eth0 INCOMPLETE
尝试将其删除为
$sudo ip neighbo del xxxx::xxxx dev eth0
实际上并没有删除它,因为ip neigh
报告方式相同。有没有办法删除INCOMPLETE
邻居记录?
不,我 98% 确定它确实删除了该记录,但在您再次检查的非零时间内
ip neigh
,系统已经为同一地址添加了一条新ip neigh
记录。您在报告中看到的不是旧记录;而是具有相同值的新记录。如果您观察
ip monitor neigh
(或者可能watch -d -n .1 "ip neigh | grep $addr"
),您可能会看到旧记录被删除,并且几乎立即创建一个具有相同参数的新记录。系统为什么要重新添加该记录?原因和添加原始记录的原因相同:有一些 IP 数据包需要传送到该地址。
为什么记录添加时处于“未完成”状态?这是系统等待邻居发现响应(在本例中是请求 ICMPv6 邻居通告)时的正常状态。如果有主机具有此地址,则在收到 ICMPv6 NA 后,它会立即转换为“可访问”状态。
如果没有这样的主机,则该条目将在几秒钟内转换为“失败”,并且所有排队的数据包都将被刷新。但是,只要操作系统继续接收发往该地址的新数据包,它就会立即重新启动该过程,因此您几乎会立即看到一个新的“不完整”条目。
这看起来像是 XY 问题。几乎没有理由删除此条目。
该
ip neighbor
命令正在显示系统 ARP 缓存。不完整的条目表示已发出 ARP 广播请求来查询目标 IP 地址的以太网地址,但尚未收到答复。删除不完整条目的正常方式是:
这个过程非常快,所以不需要删除不完整的条目。不完整的条目不会阻止 IP 地址——收到回复后,它会自动解析。
当出现 IP 冲突(两台物理机器响应一个 IP)而我想要另一个 IP 时,我偶尔会删除完整的条目,但这种情况实际上永远不会发生。
据推测内核保留了不完整的条目,以便它有地方存储与发送 ARP 重试相关的计时器,并防止它对发往该未知 IP 地址的每个数据包发送大量 ARP 请求。
因此,删除该条目的唯一原因是您想要立即发送另一个 arp...并且重试计时器足够短,这应该没有必要,而且人力也不可能以比重试计时器更快的速度手动删除该条目。
所以你修复了错误的问题。不要费心删除此条目,找出远程计算机在网络上没有响应的原因!或者找出为什么本地进程试图连接不存在的 IP 地址。