TCP/IP(三)——IP地址及其分类

发布时间 2023-12-11 15:32:18作者: 暮颜

IP地址及其表示方法

IP地址是给连接到互联网上的每一台主机(或路由器)的每一个接口,分配一个在全世界范围内是唯一32位的标识符。IP 地址现在由互联网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。

IPv4地址通常采用点分四组或点分十进制表示法表示。把32位的IP地址中的每隔8位插入一个空格,为了便于书写和记忆,常用其等效的十进制数字表示,并在每段数字之间加上一个小数点。

点分十进制表示法

在IPv6 中,地址的长度是128 位,是1Pv4 地址长度的4倍。IPv6 地址的传统表示方法是采用称为块或字段的四个十六进制数,这些被称为块或字段的数由冒号分隔。例如,一个包含8个块的 IPv6 地址可写为 5f05:2000:80ad:5800:0058:0800:2023:1d71。以下是一些已取得共识的、已被标准化[RFC4291]的IPv6地址简化表示法:

  1. 一个块中前导的零不必书写。在前面的例子中,地址可写为 5f05:2000:80ad:5800:58:800:2023:1d71
  2. 全零的块可以省略,并用符号::代替。例如,IPv6地址0:0:0:0:0:0:0:1可简写为::1。同样,地址2001:0db8:0:0:0:0:0:2可简写为2001:db8::2。为了避免歧义,一个IPv6地址中符号::只能使用一次。
  3. 在IPv6格式中嵌人IPv4 地址可使用混合符号形式,紧接着 IPv4 部分的地址块的值为ffff,地址的其余部分使用点分四组格式。例如,IPv6 地址::ffff:10.0.0.1可表示 IPv4 地址10.0.0.1。它被称为 IPv4 映射的 IPv6 地址。
  4. IPv6 地址的低32 位通常采用点分四组表示法。因此,IPv6 地址::0102:f001相当于地址::1.2.240.1。它被称为IPv4 兼容的 IPv6 地址。需要注意,IPv4 兼容地址与 IPv4 映射地址不同;它们只是在能用类似 IPv4 地址的方式书写或由软件处理方面给人以兼容的感觉。这种地址最初用于 IPv4 和 IPv6 之间的过渡计划,但现在不再需要 [RFC4291]

在某些情况下(例如表示一个包含地址的 URL时),IPv6地址中的冒号分隔符可能与其他分隔符混淆,例如IP地址和端口号之间使用的冒号。在这种情况下,用括号字符 [ 和 ] 包围IPv6 地址。例如,URL
http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:443/
是指 IPv6 主机 2001:0db8:85a3:08d3:1319:8a2e:0370:7344中的端口号 443 使用 HTTP、 TCP
和 IPv6 协议。

[RFC4291]提供的灵活性造成了不必要的混淆,这是因为能用多种方式表示相同的 IPv6地址。为了弥补这种情况,[RFC5952]制定了一些规则,以缩小选择范围,同时与[RFC4291]保持兼容。这些规则如下:

  1. 前导的零必须压缩(例如2001:0db8::0022变成2001:db8::22)。
  2. ::只能用于影响最大的地方(压缩最多的零),但并不是针对16位的块。如果多个块中包含等长度的零,顺序靠前的块将被替换为::
  3. a~f的十六进制数字应该用小写表示。

IP地址分类

32 位的IP地址采用两级结构,由两个字段组成。第一个字段是网络号,它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。第二个字段是主机号,它标志该主机(对路由器来说,就是标志该路由器)。一个主机号在所连接的网络(即前面的网络号所指明的网络)中必须是唯一的。由此可见,一个 IP 地址在整个互联网范围内是唯一的。因此,IP 地址可以记为:

\[\mathrm{IP}地址 ::= \{<网络号>,<主机号> \} \]

IP地址中网络号和主机号的具体规定是:IP地址中的前\(n\)位是主机所连接的网络号,而IP地址中后面的\((32-n)\)位是主机号。

IP地址中的网络号和主机号字段

在互联网发展早期采用的是分类的IP 地址。分类的方法如图下图所示。分类的方法非常简单。这里A类(n=8)、B类(n=16)和C类(n=24) 地址都是单播地址(一对一通信),是最常用的。D类是多播地址(一对多通信),而E类是保留地址。

IP地址分类

32 位的 IP 地址空间共有\(2^{32}\)(即 4294967296,接近 43 亿)个地址。A类地址空间共有\(2^{31}\)个地址,占整个IP 地址空间的50%。B 类地址空间共有\(2^{30}\)个地址,占整个 IP 地址空间的 25%。整个C 类地址空间共有\(2^{29}\)个地址,占整个 IP 地址的12.5%。D 类和 E 类地址各占整个 IP 地址的 6.25%。

地址范围 高序位 用途 百分比 网络数 主机数
A 0.0.0.0~127.255.255.255 0 单播/特殊 1/2 128 16777216
B 128.0.0.0~191.255.255.255 10 单播/特殊 1/4 16384 65536
C 192.0.0.0~223.255.255.255 110 单播/特殊 1/8 2097152 256
D 224.0.0.0~239.255.255.255 1110 组播 1/16 / /
E 240.0.0.0~255.255.255.255 1111 保留 1/16 / /

A 类地址的网络号字段占 1 个字节,只有7位可供使用(该字段的第一位已固定为0)。但要注意,第一,网络号为全0的IP地址有特殊的用途,它表示“本网络”;第二,网络号为127(即01111111) 保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如127.0.0.1)的 IP 数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。因此A 类地址可指派的网络号是126个(即\(2^7-2\))。

A 类地址的主机号占3个字节。但全0和全1的主机号一般不指派。全0的主机号表示该IP地址是“本主机”所连接到的单个网络地址(例如,若主机的 IP 地址为5.6.7.8,则该主机所在的网络的网络号是5,而该网络的网络地址就是 5.0.0.0)。全1表示 “所有的”,因此全1的主机号字段表示该网络上的所有主机。因此每一个 A 类网络中的最大主机数是\(2^{24}-2\),即16777214。

B类地址的网络号字段有2个字节。因此B类地址可指派的网络数为\(2^{14}\),即16384.B类地址的每一个网络上的最大主机数是\(2^{16}-2\),即65534.这里需要减2是因为要扣除全0和全1的主机号。

C类地址有3个字节的网络号字段。因此C类地址可指派的网络总数是\(2^{21}\),即2097152.每一个C类地址的最大主机数是\(2^8-2\),即254。

下表给出了一般不指派的特殊IP地址:

网络号 主机号 源地址使用 目的地址使用 代表的意思
0 0 可以 不可 在本网络上的本主机
0 X 可以 不可 在本网络上主机号为X的主机
全1 全1 不可 可以 只在本网络上进行广播
(个路由器均不转发)
Y 全1 不可 可以 对网络号为Y的网络上的所有主机进行广播
127 非全0或全1的任何数 可以 可以 用于本地软件环回测试