什么是子网掩码?如果判断两个ip是否在同一子网(网段)

原创 木鱼  2017-08-11 07:30  阅读 446 次

什么是子网掩码

它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址主机地址两部分。

上面那句话的意思就是说,子网掩码的作用就是确认一个ip地址中,那些是网络部分,那些是主机号的部分。

IP协议

现在我们使用最广泛的IP协议是IP协议的第四版IPv4。

IPv4规定了,一个ip地址是由32个二进制位组成的。

比如ip:220.181.57.217,他的二进制表示法就是:11011100 10110101 00111001 11011001

子网掩码的作用

电脑之间为了更好的通讯,从单纯的MAC地址广播通讯多了一个IP地址。

MAC地址不适合大范围的,比如北京到洛杉矶,因为MAC地址是以广播形式通信的,如果北京用户要给洛杉矶的用户发一条消息,肯定不能让全世界计算机都收到这条消息。

所以就有IP地址的产生了,IP地址分为网络号和主机号,如果两台电脑的网络号是相同的,那么他们必定是在同一个子网络内。

但是ip地址的网络号的位数是不确定的,我们还拿220.181.57.217来说,可能是前24位(220.181.57)是网络号,也可能是前16位是网络号(220.181),这个是在ip地址里面看出来的。

所以就产生了子网掩码。

理解子网掩码

子网掩码是来确定一段ip地址中那些是“网络号”,那些是“主机号”。

子网掩码的形式和ip地址一样,也是由32位的二进制来表示的。

比如我们常见的子网掩码:255.255.255.0

但是子网掩码有一个规定:

左边是网络号,必须用二进制数字“1”来表示。

右边是主机号,必须用二进制数字“0”来表示。

 

这样就很轻松的能得到这个ip地址的网络位和主机位,这样就能判断两个ip地址是否处在同一个子网络。

判断方法:

用两个地址分别和子网掩码进行&运算,如果返回值中的网络号一致,主机号都是0,那么就能确定他们是在一个子网络下了。 (&运算方法详解

 

PHP的简单计算过程

附代码

<?php

// 把ip地址和子网掩码转换成二进制
$ip1 = decbin(sprintf('%s', ip2long('172.16.254.1')));  
$ip2 = decbin(sprintf('%s', ip2long('45.78.21.53'))); 
$ip3 = decbin(sprintf('%s', ip2long('172.16.254.23'))); 
$subnetMask = decbin(sprintf('%s', ip2long('255.255.255.0'))); 
// 把二进制转成32位二进制, 不够的前面补0
$ip1 = sprintf('%032s', $ip1);
$ip2 = sprintf('%032s', $ip2);
$ip3 = sprintf('%032s', $ip3);
$subnetMask = sprintf('%032s', $subnetMask);

// 可以看出172.16.254.1和172.16.254.23在同一个子网络下
echo $ip1&$subnetMask;   // 10101100000100001111111000000000
echo $ip2&$subnetMask;   // 00101101010011100001010100000000
echo $ip3&$subnetMask;   // 10101100000100001111111000000000

本文地址:https://www.m5yu.com/subnetmask.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:木鱼博客
版权声明:本文为原创文章,版权归 木鱼 所有,欢迎分享本文,转载请保留出处!
上一篇:已经是最后一篇了
下一篇:已经是最新一篇了
相关文章

发表评论


  1. 任务易
    任务易 【农民】 @回复

    木鱼木鱼 你有公众号吗

  2. 钛客志
    钛客志 【农民】 @回复

    以前弄不清楚的东西,现在看到你博文弄明白了