简述 IPv4 的组成和划分。

IP地址

IP地址是用于标识网络中主机或路由器的一个接口的标识符,有v4和v6两个版本,本文暂时只讨论IPv4。IPv4 长度为32位 (4-byte),总数为 2³²≈43亿。由高位的网络号和低位的主机号组成。

为了便于阅读 (human readable), 将ip地址按每8位 (1-byte) 的长度,使用.字符进行分隔,即为点分十进制,例如a.b.c.d

IP地址的本质是一个二进制的无符号整数(v4为32位,v6为128位),点分十进制只是方便阅读和交流而已,相当于“网名”。理论上IPv4也可以使用十六进制的方式进行表示。

在同一个网段内,即网络号相同的情况下,主机号为全0和全1这两种情况分别表示“当前网段”和“广播地址”,并不会用于分配(即对于主机或路由器来说是不可用的)。

分类网络

分类网络 (Classful network) 是一种已过时的分类方式,将ip地址分为 A/B/C/D/E 五种类型。

A类IP地址的网络号为8位,以0作为网段标识,即最高位固定为0,余下31位可用。由于前8位是网络号,且首位固定为0,因此A类地址的网络号范围是 0000 0000 - 0111 1111, 即 (0-127)₁₀,其中网络号为 127 的地址用作本地软件的环回测试地址。A类地址数量占IPv4总量的50%(2³¹/2³²)。

B类IP的网络号为16位,以10作为网段标识,即最高位固定为10,余下30位可用,数量占IPv4总量的25%(2³⁰/2³²)。

C类IP的网络号为24位,以110作为网段标识,即最高位固定为110,余下29位可用,数量占IPv4总量的12.5%(2²⁹/2³²)。

D类以1110作为网段标识,该类地址用于广播。

E类以1111作为网段标识,用法保留。

CIDR 编址

Classless Inter-Domain Routing (CIDR, 无分类域间路由, 发音同 “sider”), 其编址方式同样是把ip分为网络号和主机号两部分。与分类网络编址的区别在于CIDR地址的网络号长度是可变的,而不是固定的8/16/24位,提高了网段分配的灵活性。

SIDR的网络号长度通过 SIDR notion 显示,即/20的方式,例如某个SIDR地址为a.b.c.d/20,则其网络号长度为20.

SIDR可视为分类地址的超集,后者可视为前者的网络号长度依次为8/16/24的特例。

一些特殊地址:

网络号长度n=32: 主机路由(或特定主机路由)

用于路由器的转发表。由于该ip地址的32位全是网络地址,所以对应的子网掩码为32个1。根据最长前缀匹配,路由器在转发时会固定将分组发往该目的地ip。该记录位于转发表的最前。

网络号长度n=0: 默认路由,写作 0.0.0.0/0

由于没有网络号,因此子网掩码也是32个0,任何目的地ip地址与32个0进行AND运算后的结果必然为32个0,与路由器转发表的 0.0.0.0/0 匹配,从而实现默认路由的功能(位于转发表最后)。

网络号长度n=31:

主机号的digit只有1位,用于点对点链路的两端使用(甚至不用分配IP地址)。

子网掩码

子网掩码是一个高位全1,低位全0、长度为32位的标识。它的作用相当于 SIDR notion, 毕竟/20的方式是人类的阅读方式。

主机或路由器通过目的地ip与子网掩码进行AND运算,得到目的地ip地址的网络号,进而决定分组的发送方向。

私有网络

为了缓解互联网增长导致的IP地址资源的压力,IANA在1996年将以下三个ip地址块划为私有网络地址:

10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

参考