判断ip国内外地址_如何判断两个IP段(IP地址/子网掩码位数)是否是包含关系?...

首先,我们如果将每一个IP地址看做一粒沙子的话,不妨将所有的IP地址依次排列在一个横轴上,那么,IP段就可以看做这个横轴上的一个区间段

根据子网掩码的定义,理论上,合法IP段中所包含的IP地址数量只可能是1、2、4、8、16、32、64、128……(2的n次方,n≥0)。

f06581109ef46e412c584d409ecf2d7a.png
子网掩码对应CIDR值

所以,对于任意两个合法IP段,在这个横轴上不会存在“部分相交”的可能,而只可能是“相等”、“真包含”或者“完全不相交”这三种关系中的一种。

首先,对于两个IP段是否“相等“的情况,这个很好判断。

不妨将IP段格式写做:ipAddr/maskBit,其中,ipAddr为IP地址,maskBit为子网掩码位数,令maskmaskBit展开之后的子网掩码(公式就略过了)。

那么,在这个横轴上,maskBit实际决定了IP区间段的宽度,ipAddr则实际决定了这个IP区间段的相对位置。

根据计算机基础知识,一个IP地址由高位的网络地址和低位的主机地址构成,对ipAddrmask进行与运算(ipAddr & mask),即可得到网络地址

显然网络地址就位于这个IP区间段的最左侧

因此,要判断两个IP段是否“相等“,只需要同时满足下面两个条件即可:

  • 子网掩码位数maskBit相同
  • 网络地址(ipAddr & mask)相同

接下来讨论“真包含”这种情况。

很显然,只可能是宽的IP区间段去包含窄的IP区间段。

我们知道,子网掩码位数越大则IP区间段越窄,所以,在子网掩码位数不相等的情况下,我们所要解决的问题实际上就转换成了:

子网掩码位数较大的那个IP地址,是否属于子网掩码位数较小的那个IP地址段?

这个问题那就好办多了……

不妨令:

子网掩码位数较大的那个IP地址段的IP地址为ipAddr1

子网掩码位数较小的那个IP地址段的IP地址为ipAddr2,子网掩码为mask2

那么:

只要

(ipAddr1 & mask2) == (ipAddr2 & mask2)

成立,就说明包含关系成立!

证毕。

PS:不管对于IPv4地址还是IPv6地址,上面的思路都适用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值