随着互联网的快速发展,IPv4地址基本耗尽,早在2011年2月3日,互联网编号分配机构(IANA)就已经宣布最后的468万个IPv4地址平均分配给了全球5个区域互联网注册管理机构(RIR),此后IANA再也没有可分配的IPv4地址了,在2019年11月25日全球五大区域互联网注册管理机构之一的欧洲网络协调中心(RIPE NCC)宣布最后一批IPv4地址已经分配完毕,意味着欧洲区的IPv4地址池已经清空,从此之后,RIPE NCC所负责的欧洲、中东、中亚部分地区将完全停止分配IPv4地址,所以该如何有效利用IP地址呢?
进制转换
先回顾一下十进制转二进制
-
除2取余,逆向排序法
比如将
66
转为二进制,使用66除以2,直到商为1,然后将1与余数逆序排列得到的就是二进制结果,如下图所示 -
牢记常用的十进制对应的二进制,然后使用加法运算
比如将
166
转为二进制,需要先牢记1、2、4、8、16、32、64、128
对应的二进制,已知166=128+32+4+2
,将128、32、4、2
对应的二进制相加得到166
的二进制结果,如下图所示
IP地址分类
IP分为A、B、C、D、E 5个类别,工作和生活中常用到A、B、C3个类别,D类和E类基本用不到
A类地址:1.0.0.0 ~ 126.255.255.255
B类地址:128.0.0.0 ~ 191.255.255.255
C类地址:192.0.0.0 ~ 223.255.255.255
D类地址:224.0.0.0 ~ 239.255.255.255
E类地址:240.0.0.0 ~ 255.255.255.255
私有IP地址
私有IP是不能在互联网(广域网)中使用的,只能作为内网(局域网)使用,地址范围如下:
10.0.0.0 ~ 10.255.255.255(10.0.0.0/8)
172.16.0.0 ~ 172.31.255.255(172.16.0.0/12)
192.168.0.0 ~ 192.168.255.255(192.168.0.0/16)
特殊IP地址
特殊IP是具有指定用途的,比如127.0.0.1
指的就是本机,一般是用于测试的,0.0.0.0
是作为默认路由使用,255.255.255.255
是限制广播地址
IP编址
IP地址由32个二进制位组成,分为网络部分和主机部分组成,我们通常看到的IP地址是点分十进制表示法,比如IP地址为188.88.18.8
,组成部分如下图所示
网络位的作用是用来网络寻址,它决定了一个区域的网段,主机位的作用是确定区域内具体的终端
子网掩码
子网掩码的作用是区分网络位和主机位的,同样由32个二进制位组成,掩码中的1表示网络位,0表示主机位
A、B、C三类地址的默认子网掩码如下所示:
A类:255.0.0.0(/8)
网络位是255
,主机位是.0.0.0
,主机位空间较大,适用于大型网络
B类:255.255.0.0(/16)
网络位是255.255
,主机位是.0.0
,主机位空间适中,适用于中型网络
C类:255.255.255.0(/24)
网络位是255.255.255
,主机位是.0
,主机位空间较小,适用于小型网络
在Linux系统中使用命令ip a
查看IP地址时后面会带/24
,这个指的就是C类的默认子网掩码,表示24个1,二进制表示11111111.11111111.11111111.0000,知道子网掩码后就可以得到IP地址的网络位和主机位,比如:计算166.66.6.6/16
的网络位和主机位,将/16
转换为二进制掩码11111111.11111111.00000000.00000000
,网络位就是166.66
,主机位就是.6.6
IP地址类型
IPv4网络中的地址类型分为网络地址、广播地址和主机地址
-
网络地址:在网络中IPv4地址范围内,最小的地址作为网络地址,也就是把主机位全部置为
0
得到的就是网络地址。比如计算192.168.6.6/24
的网络地址① 首先通过
/24
可知是C类默认子网掩码,进而可知IP地址的网络位是192.168.6
,主机位是.6
② 然后将主机位置零,得到网络地址为
192.168.6.0
通过网络地址可以判断两个IP地址是否在同一个网段,网络地址相同则在同一网段,反之则不在同一网段
-
广播地址:用于向网络中所有主机发送数据的特殊地址,使用该网络范围内的最大地址,也就是把主机位全部置为
1
得到的就是广播地址。比如计算168.68.68.8/29
的广播地址① 将IP地址转为二进制10101000.01000100.01000100.00001000,根据子网掩码
/29
可知浅蓝色部分是网络位,后面的是主机位② 然后将主机位全部置为
1
得到10101000.01000100.01000100.00001111③ 转为十进制为
168.68.8.15
,即广播地址为168.68.8.15
-
主机地址:分配给网络中终端设备的地址,就是我们平常每个主机上查看的IP地址,一个网络中能分配多少个IP地址就是计算可用地址主机范围,因为网络地址和广播地址不能给主机使用,所以剩下的都是可用的主机地址,以广播地址中的例子为例,计算
168.68.68.8/29
的可用地址主机范围① 已经的到它的广播地址为
168.68.8.15
② 计算网络地址,将主机部分全部置为
0
得到10101000.01000100.01000100.00001000③ 转为十进制
168.68.8.8
,即网络地址为168.68.8.8
④ 去掉网络地址和广播地址,得到的可用地址主机范围是
168.68.8.9
~168.69.8.14
若只是单纯计算有多少个IP可用,可以使用公式
2^n-2
计算,n表示主机位的个数,比如例子中主机位共有2个,计算可得2^3-2=6
VLSM
假如一个公司有500台主机,C类IP地址共有254个,分配C类是不够用的,B类IP地址共有65034个,使用B类又会产生IP地址大量浪费,这是标准的A、B、C类的网络缺陷,会造成IP地址空间的极大浪费,而且一个广播域中主机数量过于庞大时网络可能会被广播报文消耗大量的资源
VLSM(可变长子网掩码)主要作用就是将IP网段进行分割细化,从而达到节省IP地址空间的目的,该如何分割网段,需要根据实际需求而定,具体分割方法如下:
通过上文已经了解子网掩码的作用是区分网络位和主机位,所以掩码变更网络位和主机位肯定也会变化,当掩码向后借位时,实际上就是网络位向主机位借位,从而使网络部分的位数变长,比如IP地址为172.18.1.0/24
,首先向右借1位,子网掩码由/24
变为/25
,此时会出现2种情况,借出去的要么是0
,要么是1
,借位后产生的子网个数=2^m
,m表示所借的位数
-
借来的是
0
时,IP转为二进制表示为10101100.00010010.00000001.00000000,即子网为172.18.1.0/25
通过计算可得网络地址为
172.18.1.0
,广播地址为172.18.1.127
,主机范围为172.18.1.1~172.18.1.126
,总个数为2^7-2=126
-
借来的为
1
时,IP转为二进制表示为10101100.00010010.00000001.10000000,即子网为172.18.1.128/25
通过计算可得网络地址为
172.18.1.128
,广播地址为172.18.255
,主机范围为172.18.1.129~172.18.1.254
,总个数同样为2^7-2=126
如果借2位,子网掩码就会变成/26
,此时会出现(2^2=)
4种情况,借出去的有00
、01
、10
、11
四种可能,可以使用上面的方法计算获得子网。下面介绍另一种方法,当子网掩码变为/26
时,说明网络位为26位,主机位为32-26=6
位,每个子网都会有6位的主机位,每个子网的总主机数就是2^6=64
个,确定第一个子网后,主机位加上64就得到另一个子网地址,实际可用地址主机范围需减二,要去掉网络地址和广播地址
-
借来的是
00
时,子网为172.18.1.0/26
,网络地址为172.18.1.0
,广播地址为172.18.1.63
,主机范围172.18.1.1~172.18.1.62
-
借来的是
01
时,子网为172.18.1.64/26
,网络地址为172.18.1.64
,广播地址为172.18.1.127
,主机范围172.18.1.65~172.18.1.126
-
借来的是
10
时,子网为172.18.1.128/26
,网络地址为172.18.1.128
,广播地址为172.18.1.191
,主机范围172.18.1.129~172.18.1.190
-
借来的是
11
时,子网为172.18.1.192/26
,网络地址为172.18.1.192
,广播地址为172.18.1.255
,主机范围172.18.1.193~172.18.1.254
依次类推,多借一位就能得到更多不同网段的子网
CIDR
CIDR(无类别域间路由)是VLSM的反向运算,是聚合操作,用于给用户分配IP地址以及路由分配IP地址的方法,消除了传统IP地址的分类边界,实现了路由缩放功能,将路由表中的多个路由汇聚为一条路由,减少路由表的规模,从而减少路由设备的负担,提高路由表查询速度
比如10.16.1.0/24
、10.16.2.0/24
、10.16.3.0/24
、10.16.4.0/24
该如何聚合呢?方法如下:
-
先把IP地址转为二进制,然后找不同点,将IP地址转为二进制
10.16.1.0/24 → 00001010.00010000.000000001.00000000
10.16.2.0/24 → 00001010.00010000.000000010.00000000
10.16.3.0/24 → 00001010.00010000.000000011.00000000
10.16.4.0/24 → 00001010.00010000.000000100.00000000
-
不同之处统一置为
0
,得到00001010.00010000.000000000.00000000
-
使用掩码减去不相同的位数得到新的掩码
24-3=21
-
转为十进制得到最终IP地址为
10.16.0.0/21
VLSM和CIDR的区别
从上文可以总结出VLSM和CIDR的不同之处:
-
VLSM和CIDR二者可以看做是逆过程
-
VLSM是把一个大网络分割细分为几个小网络(子网),实现高效划分子网,可以充分利用IP地址,解决IP地址被浪费的问题
-
CIDR是把几个小网络汇聚成一个大网络(超网),实现路由地址聚合,能够有效减少路由器中的路由条目
-
VLSM是掩码右移,变长了网络位,缩短了主机位
-
CIDR是掩码左移,变长了主机位,缩短了网络位
NAT网关
NAT即网络地址转换,是在路由器中使用的服务,目的是将IP数据报文头中的原始IP地址转换为另一个IP地址的过程,可以使得内网和公网之间相互访问,NAT的产生同样是为了节约数量有限的IP地址
上文已经介绍私有IP是不能直接访问互联网的,只能在内部使用,比如企业内,家庭内等,当有一台电脑需要上网,就必须要有一个公网IP,我们可以购买一个公网IP供这台电脑使用,当有多个电脑时可以为每台电脑都申请公网IP,但是此方式不仅要花更多的钱,还会造成公网IP的浪费,所以可以让路由器为家庭或企业内部的设备分配私有IP地址,当这些设备需要访问互联网时,在路由器内部将它们的私有IP转换成公网IP地址,就可以访问外网啦!这个IP转换功能就是由NAT网关控制的
至于NAT网关是怎么知道需要转换成哪个IP的,是需要设置NAT规则的,NAT网关会根据设置的规则进行转换,NAT规则包括匹配条件、转换方式和转换结果
-
匹配条件包括:源IP地址、目的IP地址、出入安全组、服务
-
转换方式包括:源地址转换(SNAT)、目的地址转换(DNAT)
-
转换结果包括:固定IP、地址组
比如,当一台外部的网络设备需要访问内网中的设备时,会先发出请求报文,到达网关路由器后,会根据设置的NAT规则,进行转换,转换成功后网关服务器会重新封装请求报文,转发给内部的网络设备,过程如下图所示

当一台内网中使用的设备需要访问外部的网络设备时,同样会先发出请求报文,然后网关路由器转换地址后重新封装报文,转发给外部网络设备,如下图所示

现如今,已经有了新一代的IPv6地址,并且很多应用设备已经支持IPv6,IPv6可供世界上每台设备都拥有自己的公网IP地址,在未来,就不需要区分公有IP和私有IP了,也就不再需要VLSM、CIDR、NAT服务啦
