目前我们见到的ip格式是为了便于填写、便于识别才写成十进制加三个“.”的样式,其实ip地址是一个32位的二进制数,比如说127.0.0.1是01111111000000000000000000000001,其十进制是2130706433,此时ping 2130706433效果和ping 127.0.0.1是一样的,任何可通的ip都是一样的效果


二进制看我


ip:用来标识网络中的每一台主机,它是由网络id和主机id组成,ip分为A类、B类、C类、D类和E类,但我们使用的是ABC三类,只说这三类

A类:1-127.X.X.X,前8位为网络id,子网掩码255.0.0.0,该网段内共16777214台主机

B类:128-191.X.X.X,前16位为网络id,子网掩码255.255.0.0,该网段内共65534台主机

C类:192-223.X.X.X,前24位为网络id,子网掩码255.255.255.0,该网段内共254台主机

举例:192.168.1.1/24,24是网络id


子网掩码:用来规则无类域名路由,确定网络id位数,高位为1,低位为0,共32位,只能出现连续的1或者连续的0,不可出现1或者0交叉出现,这也就是常见子网掩码为什么是255.255.255.0、255.255.0.0等,这里255二进制里是8个1,这里列出常用子网掩码填写的数字


子网掩码只会出现

00000000    0

10000000    128

11000000    192

11100000    224

11110000    240

11111000    248

11111100    252

11111110    254

11111111    255


子网掩码表示的含义是网络id数,比如说255.0.0.0展开是8个1后面跟24个0,此时就是8个网络id,但知道了网络id又如何?知道网络id就能知道主机id,因为ip=网络id+主机id,ip是32位,网络id位数是8,所以可以得知主机id是24,从而得出该网段主机数是2^24 -2=16777214,(2^24表示2的24次方),有公式主机数=2^主机数id -2,这里不禁要问,为什么要减2?打个比方说给主机使用的ip是从192.168.1.1-192.168.1.254,而192.168.1.0代表该段网络id,192.168.1.255代表该段的多播地址,这两个地址网段内主机不可用,因此需要减去2。


为便于理解,现举例子203.110.0.163/22,子网掩码是多少?有多少主机?网络id又是多少?

答:

1、203.110.0.163/22,表明有22个网络id,因此子网掩码中有22个1,因此子网掩码是11111111.11111111.11111100.00000000,也就是255.255.252.0;

2、题目中给出22个网络id,因此主机id是32-22=10,从而得到id数是2^10 -2=1022台;

3、网络id:203.110.0.0,这就是说为什么主机不能用203.110.0.0这个ip了。网络id具体算法是ip和子网掩码进行逻辑与运算,而且还要将地址二进制展开进行每位相与,此例特殊,可直接得到答案。

与运算:

            11111111.11111111.11111100.00000000

                   203.       110.          0            .163

结果:------------------------------------------------

                   203.       110.          0             .0


现在我们仔细看看子网掩码另一作用,假设我们有

  ip           netmask        gateway

220.78.168.0 255.255.255.0 220.78.168.1

220.78.169.0 255.255.255.0 220.78.168.1

220.78.170.0 255.255.255.0 220.78.168.1

220.78.171.0 255.255.255.0 220.78.168.1

220.78.172.0 255.255.255.0 220.78.168.1

220.78.173.0 255.255.255.0 220.78.168.1

220.78.174.0 255.255.255.0 220.78.168.1

220.78.175.0 255.255.255.0 220.78.168.1


按照常规C类地址,此8个ip需要连接路由器8个接口,现在我们按照无类域名路由划分,得到二进制地址

220.78.10101 000.0

220.78.10101 001.0

220.78.10101 010.0

220.78.10101 011.0

220.78.10101 100.0

220.78.10101 101.0

220.78.10101 110.0

220.78.10101 111.0

这里我们可以看到10101这段是共有前缀,因此我们可以将这段作为网络id,网络id减去3位,因此原来第三个子网掩码255的8个1变成了5个1,此时子网掩码变成255.255.248.0,这8个地址就变成了一个地址220.78.168.0/21,从而减少了路由,节省了成本。


就拿银行或者运营商的ip来说,它们ip也是从A类逐级分布下来的,A类ip1-127.X.X.X,子网掩码是255.0.0.0,接下来分给各省,子网掩码是255.255.0.0,再分给地级市,此时又变成255.255.255.0,或者255.255.248.0(这时候就是为了减少路由子网掩码变成255.255.248.0,减少路由可以减少数据包生命周期损耗(即ping命令中显示的ttl)),紧接着继续分给区县,就成了我们能看到的255.255.255.248或者255.255.255.240等等,这么做既减少了成本,又降低了数据包损耗,因此无类域名路由结合子网掩码被广泛应用。不过这么做但ip依然是有限的,相对于ipv4而言,我们还有ipv6,ipv4和ipv6都是国外人研究的,因此我们的网络闸门在人家手里,存在不安全性。不过我们也有自己研发的ipv9,虽说现在还在实验阶段,不过还是希望早日出来,让我们自己的数据安全掌握在自己人手里。


注:ipv4地址数:2^32个ip地址,ipv6地址数:2^128个ip地址,ipv9地址数:2^2048个ip地址