我目前正在努力了解更高级的网络概念。我这样做的方法是在我作为系统管理员管理的其中一台服务器上运行网络捕获以查看和理解数据。(我运行此捕获的机器是 serveriamon.networkname.local,IP 为 172.16.2.7)
这让我在网络上进行了这次交流:
1127 11:46:55 12/10/2012 30.2960887 172.16.3.30
serveriamon.networkname.local ARP ARP:Request, 172.16.3.30 asks for 172.16.2.7
1128 11:46:55 12/10/2012 30.2961939 serveriamon.networkname.local 172.16.3.30 ARP ARP:Response, 172.16.2.7 at 78-2B-CB-23-8D-07
我能理解这种交流。位于 172.16.3.30 的机器想要找出 172.16.2.7 的 MAC 在哪里以及它是什么。该地址的服务器(本服务器)以其包含 Mac 地址的 ARP 响应进行回复。
紧接着此帧出现:
1129 11:46:55 12/10/2012 30.2964210 172.16.3.30 serveriamon.networkname.local SNTP SNTP:NTPv3 Request, Leap = 0, Mode = 3, RID = 5154 {SNTP:377, UDP:376, IPv4:375}
据我所知,这是对服务器时间的请求。没关系。下一帧让我感到困惑:
1130 11:46:55 12/10/2012 30.2972641 serveriamon.networkname.local 172.16.3.30 ARP ARP:Request, 172.16.2.7 asks for 172.16.3.30
源地址嵌入在 SNTP 请求的第 1129 帧中。为什么服务器会立即进行广播以找出 IP 地址在哪里?
我怀疑我只是误解了它是如何工作的,但我真的很感兴趣。在应该已经有信息的情况下推出 ARP 似乎“浪费”和“嘈杂”?
这是我以前从未注意到的一个有趣的观察结果。此行为表明服务器在收到 arp 请求时没有将硬件地址放入其 arp 表中。这是什么类型的操作系统?
原始的ARP RFC 826确实就“合并标志”讨论了这一点:
不过,我无法找到有关合并标志的更多信息。
对此行为原因的猜测:
我猜你这样做的一个原因是为了防止有人溢出你的 arp 缓存。换句话说,“为了安全起见,如果我要求的话,我只会缓存它”。
否则,人们可能会使用许多不同的 IP 来制作一堆 arp 请求并填满表格(您可以使用许多其他方法来防止这种情况发生,但这似乎是一种可行的简单方法)。