尽管我在研究生院选修过计算机网络课,但我对计算机网络的了解很差。
我总是忘记子网和掩码等等!
目前,我正在玩Docker
并Erlang
尝试进行分布式编程。
我启动了 4 个 docker 容器
([email protected]) # also known as Server
([email protected])
([email protected])
([email protected])
后面的数字@
分别是IP
从命令中获取的ifconfig
。
现在有了这些IP
地址,我如何判断它们是否在同一个 LAN/网络上
如果问题问得不正确或者很愚蠢,我很抱歉,但我被难住了!
多谢
答案1
您需要知道子网掩码。子网掩码告诉您地址的哪些位代表子网,哪些位代表子网内的主机。如果您的子网是 /24 (255.255.255.0),那么前三个八位字节匹配的任何地址都将位于同一子网中。
在您的示例中,如果您的子网掩码为 /26 或更长(255.255.255.192 或更高),那么这些地址将不是位于同一子网,因为 63 是某个子网的广播地址,而 64 是另一个子网的“网络”地址(0 表示主机号)。因此,如果您的子网掩码为 /26 或更长,那么这些地址甚至可能无法可靠地用作单播主机地址。
答案2
仅凭 IP 不足以确定是否在同一个网络上。您还需要使用子网掩码。
IP 地址由四个 8 位八位字节组成;一个八位字节是 8 个二进制位的序列。因此,每个位可以是 0 或 1,所以每个八位字节可以表示 2^8 个不同的值,即 256 (0-255)。由于有四个这样的八位字节,因此地址组合可以等于 28+8+8+8,即 232,即 4,294,967,296 个可能的地址。每个二进制位都有一个值:128、64、32、16、8、4、2、1,因此,根据该二进制位是打开还是关闭,我们可以添加或不添加该位的值。
掩码表示我们忽略的地址数量。基本上,凡是 1 的地方,就表示这些地址不属于我们的地址所在组。对于 /24 网络(或掩码为 255.255.255.0 的网络),这意味着在 2^32 个可能的地址中,我们要减去 2^24 个地址,因此我们的组中剩下 2^8 个地址,即 256 个地址。
因此,如果您的地址是 172.17.0.0/24,则意味着您在该网络中将拥有 256 个地址,即 172.17.0.0-172.17.0.255,尽管其中一些地址将保留为网络地址(172.17.0.0),一个地址将保留为广播地址(172.17.0.255),并且您还需要一个网关(通常为 172.17.0.1)。