为什么局域网内“子网地址”相同的两台主机可以ping通?

网络工程 ipv4 通讯协议 协议理论
2021-07-09 21:56:38

TCP/IP 的子网寻址图解,卷。1: The Protocols , 有描述: This makes sense because class A and class B addresses have too many bits allocated for the host ID: 16384 - 2 and 65536 - 2, respectively., 我想这是 的原因Subnet Addressing,但我不知道在哪里可以找到协议,它描述了任何两个主机只有在它们具有相同network idsubnet id? 这是相对于Ethernet? 但我没有找到关于它的描述。我知道一定有什么我错过了!

例如, 在此处输入图片说明

这里,网关有1.4,aix有1.92,solaris有1.32,上面粗线,有一个1.0 不知道能不能总结一下我的问题,为什么在LAN,如果第一个主机要ping第二个主机,第一个是140.252.1.4,然后第二个必须是140.252.1.x

为了让我的问题更清楚,我做了一个测试,我通过电缆直接连接了我的 mac 和 Fedora linux,然后:

在mac下:

 ~ » sudo ifconfig en0 192.168.90.104                          

在 Fedora Linux 下:

[abelard@bogon ~] ifconfig eno1 192.168.90.197

并在mac下执行以下命令:

~ » ping 192.168.90.197                                          abelard@localhost
PING 192.168.90.197 (192.168.90.197): 56 data bytes
64 bytes from 192.168.90.197: icmp_seq=0 ttl=64 time=0.803 ms
64 bytes from 192.168.90.197: icmp_seq=1 ttl=64 time=0.602 ms
64 bytes from 192.168.90.197: icmp_seq=2 ttl=64 time=0.606 ms

但是当我将 mac 的 ip 更改为192.168.91.104

     ~ » sudo ifconfig en0 192.168.91.104                          

然后

~ » ping 192.168.90.197                                       abelard@localhost
PING 192.168.90.197 (192.168.90.197): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2

为什么?

1个回答

IPv4 地址实际上只是一个 32 位的二进制数。整个 32 位对于主机地址都是重要的。

从概念上讲,地址分为两部分:网络部分和主机部分。分隔线可以通过网络掩码移动,该掩码确定地址的哪些位用于网络部分。最近,网络掩码被替换为掩码长度(地址和掩码长度是网络前缀),您可以通过将最高有效位的长度数设置为 1 来轻松地将掩码长度转换为掩码。

在您的例子掩码长度似乎是24,但假设你使用16,这将使面具255.255.0.0,这意味着可用的网络主机地址是从.0.1.255.254如果掩码长度为17,则最后一个可用的主机号为.127.254,而对于18则为,以此类推.63.254

您必须将点分十进制表示法(仅用于人类可读性)转换为二进制以执行计算。当你这样做时,一切都变得显而易见。完成计算后转换回点分十进制。请记住,IPv4 地址实际上是 32 位二进制数,尝试以点分十进制形式执行此操作会导致混淆和错误。

请参阅此答案以了解如何进行所有 IPv4 计算。


假设您有一个知道如何访问所有其他网络的路由器,您实际上可以 ping 任何主机地址,甚至是不在您网络上的主机。流量通过 LAN 上的第 2 层(例如以太网)直接从主机到主机传送,但它需要第 3 层(例如 IPv4)才能从一个 LAN 到达另一个 LAN。

主机将屏蔽其地址和目标地址,以查看两者是否在同一个 LAN 上。如果是,它让第 2 层直接交付到目的地。如果没有,它会将第 2 层发送到它配置的网关。然后由网关将数据包转发到目的地。