- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道如果两个 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/
我是一名优秀的程序员,十分优秀!