Vue学习笔记-校验IP是否在同一网段

一.IP地址分类

D和E不对民用组织开放,所以我们能使用IP地址的只有ABC三类。

A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是0,B类地址的前两位总是10,C类地址的前三位总是110。

主机号:用于识别该网络中的主机。

A类地址

(1)A类地址第1字节为网络地址,其它3个字节为主机地址。它的第1个字节的第一位固定为0.

(2)A类地址网络号范围:1.0.0.0—126.0.0.0

(3)A类地址中的私有地址和保留地址:

① 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。 

范围(10.0.0.0—10.255.255.255) 

② 127.X.X.X是保留地址,用做循环测试用的。 

B类地址

(1) B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。它的第1个字节的前两位固定为10.

(2) B类地址网络号范围:128.0.0.0—191.255.0.0。

(3) B类地址的私有地址和保留地址

① 172.16.0.0—172.31.255.255是私有地址 

② 169.254.X.X是保留地址。

如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。

就会得到其中一个IP。 

191.255.255.255是广播地址,不能分配。

C类地址

(1)C类地址第1字节、第2字节和第3个字节为网络地址,第4个字节为主机地址。另外第1个字节的前三位固定为110。

(2)C类地址网络号范围:192.0.0.0—223.255.255.0。

(3)C类地址中的私有地址: 192.168.X.X是私有地址。(192.168.0.0—192.168.255.255)

判断四组IP的第一个数组来确定是哪类。

【注意:127.0.0.1不再里面,是因为它代表当前计算机自己】

二.判断每一类IP是否属于一个网段

1.A类

A类IP用第一个数字来表示不同网段。

例如:1.0.0.0和2.0.0.0是不同的网络。

不同的网络之间要使用路由器,路由器是用来跨网络通信。

但是在同一个网络通信,只用使用交换机就可以。

A类IP的第一个数字相同,而后三个不同,表示在一个网络中的不同的主机。

A类的网段数量只有126个,但是主机数有2^24-2

主机数为什么要减去2? : 因为1.0.0.0代表网络本身,不能分配。而1.255.255.255代表当前网络的广播地址。

2^24是从哪里来的? : 第一个数是8位,后面的是24位。

2.B类

B类IP是前两个数字来表示不同网段。

例如:191.224.0.0和191.154.0.0是不同的网络。

但是191.224.0.0和191.224.255.255是同一个网段中的不同主机。

所以能用的主机数是2^16-2

3.C类

C类IP是前三个数代表不同网段,最后一个数组代表同一个网段中的不同主机。

例如:192.224.0.0和192.224.1.0是不同的网络。

但是192.224.0.0和192.224.0.1是同一个网段中的不同主机。

所以能用的主机数是2^8-2。

三.校验两个IP是否在同一网段

1)基本思路:
要判断两个IP地址是否在同一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,如果网络号相同,就在同一子网,否则,不在同一子网。

2)具体实现:

    /**
     * [isEqualIPAddress 判断两个IP地址是否在同一个网段]
     * @param  {[String]}  addr1 [地址一]
     * @param  {[String]}  addr2 [地址二]
     * @param  {[String]}  mask  [子网掩码]
     * @return {Boolean}         [true or false]
     */
    function isEqualIPAddress (addr1,addr2,mask){
        if(!addr1 || !addr2 || !mask){
            console.log("各参数不能为空");
            return false;
        }
        var 
        res1 = [],
        res2 = [];
        addr1 = addr1.split(".");
        addr2 = addr2.split(".");
        mask  = mask.split(".");
        for(var i = 0,ilen = addr1.length; i < ilen ; i += 1){
            res1.push(parseInt(addr1[i]) & parseInt(mask[i]));
            res2.push(parseInt(addr2[i]) & parseInt(mask[i]));
        }
        if(res1.join(".") == res2.join(".")){
            console.log("在同一个网段");
            return true;
        }else{
            console.log("不在同一个网段");
            return false;
        }
    }

你可能感兴趣的:(Vue学习笔记-校验IP是否在同一网段)