我读过主机之间如何通信的规则。假设主机A和主机B。主机A通过按位与自己的IP地址和掩码来获取自己的网络ID,然后通过按位与主机B的IP地址和主机A的掩码来获取主机B的网络ID。如果结果相同,则它们位于同一网段中。
假设主机A不知道主机B的MAC地址:如果它们在同一个网段,主机A向交换机发送ARP请求,最终获取主机B的MAC地址;如果它们不在同一个网段,主机A使用网关的MAC地址作为目标MAC地址,主机B的IP地址作为目标IP地址,并将帧发送到网关。这就是它的工作原理。
我可以理解当两个主机的 IP 地址为 192.168.1.1/24 和 192.168.1.2/24 时的情况。但是当它们如下所示时会发生什么:
如果 hostA 是 192.168.0.1/16 而 hostB 是 192.168.1.1/24,则 hostA 获取自己的网络 ID:
192.168.0.1 & 255.255.0.0 -> 192.168.0.0
然后 hostA 获取 hostB 的网络 ID:
192.168.1.1 & 255.255.0.0 -> 192.168.0.0
因此主机 A 认为它们在同一个网段。但是对于主机 B,主机 B 获得自己的网络 ID:
192.168.1.1 & 255.255.255.0 -> 192.168.1.0
然后 hostB 获取 hostA 的网络 ID:
192.168.0.1 & 255.255.255.0 -> 192.168.0.0
因此主机 B 认为主机 A 位于不同的段中。
在这种情况下它们如何通信?例如,它们不知道彼此的 MAC 地址,主机 A 使用一种方法找到主机 B,而主机 B 使用另一种方法找到主机 A?
谢谢,
答案1
它的工作原理与您描述的完全一样。HostA 将认为 HostB 位于同一网络段,因此 HostB 的 MAC 地址的 ARP 也将如此。它根本不会让路由器参与其中。
当 HostB 发起对话时,它可能会看到 HostA 位于不同的网段上,并将其流量发送到路由器,并且路由器可能能够将其传递,但这并不重要,因为当 HostA 尝试回复时,它会再次相信 HostB 位于同一网段上,并且 ARP 为其 MAC 地址。
简而言之,IP 寻址方案不起作用,需要更改其中一个段。更改 HostA 所在段的网络 ID 为 192.168.0.0/24 即可。