判断IP地址段的归属问题算法
问题描述:
判断IP地址段的归属问题算法
最近在研究一个问题,已知我们规定了路由器上宣告了 几段IP地址段,如1.96.0.0/12;1.120.0.0/13;1.192.0.0/13等等,那么如何判断即将进入路由表的IP地址段1.100.0.0/14 是否就在这些已经宣告地址段中呢?这里的问题是指算法的实现,不是说路由器如何识别,纯数学研究内容.呵呵.各位只要有思路提供就非常感激,希望得到更多的意见!
例一:
已知:112.0.0.0/10这个ip地址段,那么如何判断112.21.0.0/16 是在这个地址段中?
例二:
已知:1.96.0.0/12这个ip地址段,那么如何判断1.100.0.0/14 是在这个地址段中?
例三:
已知:125.166.0.0/15这个ip地址段,那么如何判断125.166.112.0/23是在这个地址段中?
其实上面这三种情况,我们用笔算算能算出来,但是从算法角度上,却始终没有共同的规律可循,还请朋友们指点迷津!有点乱乱啊
答
我告诉你一个非常简单的算法
每个网段都是可以转化为一段整数
也就是起始地址和终止地址 ,可以转换为用整数来表达,而且是连续的
用整数来判断,比大小,比区间,这样就容易了吧
例如1.96,0,0= 1*256*256*256+96*256*256+0*256+0=一个整数
转换为整数是最快捷的方式,速度最快,也最清晰