计网专业学习笔记——认识IPv4地址的发展史
写在前面
属实无聊,就当考前复习。
开篇
初接触网络层的东西,相信不少人会有很多的疑惑,毕竟相较于物理层和数据链路层而言,网络层的东西会比较抽象。
在大学开设的这门课里我并没有遇到什么特别大的瓶颈和不理解的地方,这得益于多年来瞎折腾所学习到的知识。从身边遇到的问题入手,通过解决问题的方式学习知识,可以说是我本人最爱的学习方法。
所以,我想结合实例来讲解IPv4的相关知识,希望能对正在学习相关专业的学生以及爱好者有所帮助。
IPv4地址的结构
大家应该都知道,IPv4的地址写出来长这样:192.168.1.1
我们为了阅读的方便,将十进制格式的IP地址用.分成了四个部分。
看,只是人类为了阅读方便而设置的。对于计算机而言IPv4地址长这样11000000101010000000000100000001
其实就是二进制形式的地址。
我们也可以把二进制形式的地址拆成四份:11000000
10101000
00000001
00000001
第一段 | 第二段 | 第三段 | 第四段 | |
---|---|---|---|---|
十进制格式 | 192 | 168 | 1 | 1 |
二进制格式 | 11000000 | 10101000 | 00000001 | 00000001 |
简单看了一下格式,就可以继续往下说了。
别急,其他的诸如子网掩码
、网络号
、主机号
的概念后面会慢慢讲。
IPv4的发展历史
开始讲解IPv4地址,绕不开的话题就是要讲一讲IP发展的历史,看看IPv4是怎么样发展到现在这样的
分类编址时代
很久很久以前,IP地址被分成了五种地址类型,分别是A
、B
、C
、D
、E
五类。
他们的区分方式很简单,二进制形式的IP地址从左往右数,开头的几位数字的不同决定这个IP的分类。
在判断属于一个IP属于哪一个类别时其实不需要把它变成二进制的形式,因为区分类别的位数只占4位,也就是说只要判断第一段的十进制数是在哪个区间即可知道这个IP的类别。
可以参照以下表格进行判断:
A类地址 | B类地址 | C类地址 | D类地址 | E类地址 | |
---|---|---|---|---|---|
二进制下的开头 | 0 | 10 | 110 | 1110 | 1111 |
二进制下的地址区间 | 00000001 - 01111110 | 10000000 - 10111111 | 11000000 - 11011111 | 11100000 - 11101111 | 11110000 - 11111111 |
十进制下的地址区间 | 1 - 126 | 128 - 191 | 192 - 223 | 224 - 239 | 240 - 255 |
注:A类地址中0和127两个段为保留地址,用于特殊目的。
对照这个表,就很容易分辨IP地址的分类了。以下给出几个IP地址,大家可以对照表格判断一下:
- 192.168.66.12
- 11.43.192.30
- 11.43.192.30
网络号 & 主机号
上文我们知道了,IP地址被划分成了五个类别
A、B、C类为单播地址,是我们平时接触最多,也是正在使用的地址。D是多播地址,E是保留地址。
对于A、B、C类的地址来说,它们除了开头不一样外,网络号和主机号的长度也是不一样的。
一个IPv4地址的二进制形式有32位,在分类编址时代,IP的组成形式为<网络号> + <主机号>。
- A类地址的网络号为前8位,后面24位为主机号。也就是十进制形式的 第一段 为网络号, 第二段+第三段+第四段 为主机号
- B类地址的网络号为前16位,后面16位为主机号,也就是十进制形式的 第一段+第二段 为网络号, 第三段+第四段 为主机号
- C类地址的网络号为前24位,后面8位为主机号,也就是十进制形式的 第一段+第二段+第三段 为网络号, 第四段 为主机号
那么同为单播地址,为什么还要分成A、B、C三类呢?
前面我们知道了,IP的组成形式为<网络号> + <主机号>,这当中的网络号代表的是这个IP所在的网段,而主机号则定义了这个IP在这一个网段中的编号。打个比方:一个小区(整个IP地址库)里有很多栋居民楼(网络号),居民楼里很很多户人家(主机号)。
对于网络服务商来说,一般购买的都是一整个IP地址块,而不会购买单个IP地址。不同大小的运营商需求不同,需要的IP地址量不同,所以会需要选择购买合适数量的IP地址块。将单播地址分为三类的意义就在于,现在客户可以根据自己的需求选择IP地址块的大小了。
那么A、B、C类地址是如何做到区分地址块大小的呢?这就是<网络号> + <主机号>模式的作用了。
计算地址块容量
假设现在有八个空格,可以往里填入数字将其变为一个二进制的数,请问可以有多少个不同的数字?
其实这个问题很容易算出来,方法很简单:
这里我们可以知道最高能写8位,那么能写出的数字量就是 $2^8=256$ 个
同理,因为IPv4地址事实上是一串32位的二进制数字,所以就可以使用同样的方法计算出地址块的容量
从上面的内容中已经知道了,IP地址的组成形式为<网络号> + <主机号>,购买IP使用权的时候,购买的地址块其实是购买了<网络号>下包含的所有IP,就像网络服务商作为“包租婆”,购买了开发商的整栋楼(网络号)一样。
因为IP的长度固定,所以网络号越短,主机号越长,主机号越长,所包含的IP就越多!
再来简单做个题:黄先生购买了一个C类地址块,请问这相当于他买了多少个IP地址?
一个C类地址的前24位是网络号,后8位是主机号,主机号长度决定其拥有多少个IP。
所以黄先生拥有的IP地址块包含了 $2^8=256$ 个地址。
划分子网时代
原先的分类编址时代,我们把实际用来分配使用的IP地址分成A、B、C类。也就是说网络服务商在购买IP地址的时候可以选择三种大小:
- A类地址块:包含 个地址
- B类地址块:包含 个地址
- C类地址块:包含 个地址
但这时候问题来了,比如我现在想购入4000个地址,这个数量大于C类的同时又远远小于B类所含的数量,想要买4000个地址要不就是买16个C类地址,或者出手极其阔绰直接购买B类地址块。
这就不可避免的造成了地址的浪费。
划分子网时代,将IP变成了<网络号> + <子网号> + <主机号>的形式,以满足这样的需求。
买4000个地址,就可以选择购买 B类地址中的一个子网 来实现最大程度的不浪费。
B类地址网络号占了16位,此时我们只需要把主机号的一部分变为子网号,让主机号的位数所包含的IP地址块最接近4000个就可以最大程度避免浪费
通过计算可知:
$2^{12}=4096$
所以,我们需要12位的主机号。在网络号固定为16位的B类地址中,将主机号部分的4位占用为子网号,再购买B类地址中的这个子网就可以了。
买包含4096个地址的B类子网 网络号 子网号 主机号 二进制格式 10xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 对应位数 16位 4位 12位
无分类编址时代
随着时间的推进,计算机网络变得越来越庞大,本就不富裕的IPv4地址需求越来越大,过去的划分子网方式已经不足以满足人们的需求了。
公网IP对于一般民众而言其实不会专门进行购买,而对于网络服务商来说,其购买的需求量就挺大的。也正因为此,C类地址仅有256个IP的超小容量极易不受人待见。对于互联网而言,急需更灵活的IP分配方式。1993年,无分类域间路由选择(Classless Inter-Domain Routing, CIDR)应运而生。
在划分子网时代,IP变成了<网络号> + <子网号> + <主机号>的形式,而到了无分类编址的时代,又把这个子网号去掉了,取而代之的是子网掩码的概念。
过去网络号长度是固定的,并且被固定了长度。而到了无分类编址时代,网络号的长度不固定了,可以根据需求指定任意长度的网络号。
那如何指定网络号长度呢?
还是买4000个地址,按之前划分子网的办法,就是购买一个<网络号16位> + <子网号4位> + <主机号12位>的地址块。既然无分类编址去除了子网号,同时不限制网络号长度,那么直接把子网号的4位合并进网络号里就可以达到相同效果了
<网络号20位> + <主机号12位>
也就是说,我们买的地址块的网络号变成了20位。
因为无分类编址不依靠、也无法依靠网络类型来确定网络号长度,所以引入了子网掩码的概念。其实子网掩码的作用很简单,就是告诉我们网络号的长度。
上面我们买了一个网络号长度为20位的地址块,那么它的子网掩码长度就是20位,同时,子网掩码长度通过写1来表示,剩余位置以0填充
二进制IP地址 | 11001100 10001111 0011xxxx xxxxxxxx |
---|---|
二进制子网掩码 | 11111111 11111111 11110000 00000000 |
这一串子网掩码看着像不像IP地址?
对的,它也能变成十进制的形式:255.255.240.0
是不是还是很眼熟?
没错,在你的电脑/手机的网络设置里就有它。
一般家庭的路由器会将局域网默认设置为192.168.x.x/24
的形式,所以我们见到的地址比如192.168.1.1/24
或192.168.1.1
子网掩码:255.255.255.0
,对应的意思就是:IP地址为192.168.1.1
,同时其子网掩码长度是24
,或写作255.255.255.0
。同一地址块下能够容纳的主机数为 $2^8=256$ 台(其中包含两个特殊地址)