gpt4 book ai didi

math - 确定两个 IP 地址是否在同一子网上 - 是否从 IP 地址中删除前导或尾随 0?

转载 作者:行者123 更新时间:2023-12-04 17:22:58 24 4
gpt4 key购买 nike

我知道如果两个 IP 地址与子网掩码进行“与”运算,如果结果相同,那么它们就在同一网络上。如果结果不同,则它们位于不同的网络上。我的问题是,当给定一个省略了一些 0 的 IP 地址时,额外的 0 放在哪里?

例如,如果子网掩码是 255 。 128。 0。 0 ,您的 IP 为 126 。 1. 0。 10 和 IP 126。 127。 0。 1 如果您只是盲目地使用子网掩码对 IP 进行运算,即使它们位于同一网络上,您也会得到不同的结果。

126.1.0.10 会变成 126.100.000.100 还是 126.001.000.100?

阅读回复后编辑:

255128000000 和 126001000010 = 1085496376*32* 但是 255128000000 和 126127000001 = 1085276323*84*
我错过了什么吗?

最佳答案

IPv4 地址写成四个普通十进制数字(每个适合一个字节),用点分隔。

普通的十进制数1是“一”,也可以写成001。而100是一个不同的数,即“百”。


AND 运算始终是按位 AND,因此要理解它,您必须首先了解点分十进制地址和网络掩码如何对应于原始二进制 32 位地址:

        126   .    127   .     0    .    1
01111110 01111111 00000000 00000001

255 . 128 . 0 . 0
AND 11111111 10000000 00000000 00000000
-----------------------------------------------
01111110 00000000 00000000 00000000
126 . 0 . 0 . 0

所以 126.127.0.1 和网络掩码 255.128.0.0 在子网 126.0.0.0/9

在软件中,人们通常存储 IPv4 地址在一个 32 位变量中——所以 126.127.0.1 是 01111110011111110000000000000001 二进制(它也编码 2122252289 十进制,除了没人关心 32 位 IP 地址的十进制值是多少),只有在需要向人类用户显示时才将其转换为点分十进制。这种表示就是 glglgl 描述的乘以 256 几次。

如果您还有一个 32 位变量(11111111100000000000000000000000 二进制或 4286578688 十进制)中的网络掩码,您可以在一条机器指令中将它们与运算以获得网络地址 011111100000000000000000000000000。

关于math - 确定两个 IP 地址是否在同一子网上 - 是否从 IP 地址中删除前导或尾随 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com