我想知道为什么我得到以下结果:
如果我尝试访问我的本地networking上的一个不存在的主机,例如使用命令ping,我可以看到tcpdump arp命令每秒都有一个由我的计算机发送的请求,但是我得到三个消息Destination Host Unreachable每三秒钟连续Destination Host Unreachable 。
你能解释我为什么吗?
从http://linux-ip.net/html/ether-arp.html :
如果所请求的目标IP不存在ARP高速caching条目,则内核将生成mcast_solicit ARP请求,直到收到答复。 在此发现期间,ARPcaching条目将以不完整状态列出。 如果在指定数量的ARP请求之后查找失败,则ARPcaching条目将被列为失败状态。 如果查找成功,则内核将响应input到ARPcaching中,并重置确认和更新定时器。
您可以在/proc/sys/net/ipv4/neigh/eth0/mcast_solicit 。 我不确定重传arp请求之前的超时是否是可调的,但经验上是1秒。
由于需要3次重试才能断定主机不可达,因此ping数据包排队等待3秒,然后它们全部被拒绝,因为状态为“不可达”。 然后,故事再次开始,解释错误消息的3秒钟集群。
主机不存在响应ARP查询。 所以你的客户端甚至无法制作一个ICMP数据包,注定要尝试ping的IP的“将会”MAC地址。 事实上,如果无法通过ARP来parsingMAC地址,则您的计算机无法执行的任何操作都将使其能够制作这样的数据包。 因此,该目的地主机是明确无法到达的 。
如果该主机存在,它将响应ARP请求,然后您的客户端将能够形成ICMP Echo数据包。 如果主机然后select不回应(可能是因为它正在丢弃ICMPstream量),您的客户端将成功发送ICMP回应,但从未收到ICMP回应回复。 然后你的Ping会根据请求超时的方式报告一些事情。