个人理解,欢迎指正。
一、要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果-->网络号,如果网络号相同,
就在同一子网,否则,不在同一子网。
例:假定选择了子网掩码255.255.254.0,把IP地址和子网掩码转换为二进制,分别将上述两个IP地址分别与掩码做与运算,如下所示:
211.95.165.24 11010011 01011111 10100101 00011000
255.255.254.0 11111111 11111111 111111110 00000000
与的结果是: 11010011 01011111 10100100 00000000
211.95.164.78 11010011 01011111 10100100 01001110
255.255.254.0 11111111 11111111 111111110 00000000
与的结果是: 11010011 01011111 10100100 00000000
可以看出,得到的结果(这个结果就是网络地址)都是一样的,因此可以判断这两个IP地址在同一个子网。
一、互联网的地址
互联网上的每个接口必须有个唯一的Internet地址(也称作IP地址),IP地址长32bit,Internet地址并不采用平面形式的地址空间,如1,2,3等。
五类不同的互联网复制格式如图所示:
五类互联网IP地址
这些32位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称为"点分十进制表示法"。如:192.168.10.11。
① IP地址 和 子网掩码相与得到得到网络号
② 子网掩码先取反,在 和 IP地址相与得到主机号
判断两个Ip是否在同一网段的方法,前提是两个ip的子网掩码相同;(子网掩码,ip1,ip2)
public static bool CheckIPAndMask(string mask,string ip1,string ip2){ string[] maskList=mask.Split('.'); string[] ip1List=ip1.Split('.'); string[] ip2List=ip2.Split('.'); for(int j=0;j<maskList.length;j++) { if((int.Parse(ip1List[j])&int.Parse(maskList[j]))!= (int.Parse(ip1List[j])&int.Parse(maskList[j]))) { return false; } } return true; }