目录
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地址简化表示法:
- 一个块中前导的零不必书写。在前面的例子中,地址可写为
5f05:2000:80ad:5800:58:800:2023:1d71
。 - 全零的块可以省略,并用符号
::
代替。例如,IPv6地址0:0:0:0:0:0:0:1
可简写为::1
。同样,地址2001:0db8:0:0:0:0:0:2
可简写为2001:db8::2
。为了避免歧义,一个IPv6地址中符号::
只能使用一次。 - 在IPv6格式中嵌人IPv4 地址可使用混合符号形式,紧接着 IPv4 部分的地址块的值为
ffff
,地址的其余部分使用点分四组格式。例如,IPv6 地址::ffff:10.0.0.1
可表示 IPv4 地址10.0.0.1
。它被称为 IPv4 映射的 IPv6 地址。 - IPv6 地址的低32 位通常采用点分四组表示法。因此,IPv6 地址
::0102:f001
相当于地址::1.2.240.1
。它被称为IPv4 兼容的 IPv6 地址。需要注意,IPv4 兼容地址与 IPv4 映射地址不同;它们只是在能用类似 IPv4 地址的方式书写或由软件处理方面给人以兼容的感觉。这种地址最初用于 IPv4 和 IPv6 之间的过渡计划,但现在不再需要 [RFC4291]。
在某些情况下(例如表示一个包含地址的 URL时),IPv6地址中的冒号分隔符可能与其他分隔符混淆,例如IP地址和端口号之间使用的冒号。在这种情况下,用括号字符 [ 和 ] 包围IPv6 地址。例如,URLhttp://[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]保持兼容。这些规则如下:
- 前导的零必须压缩(例如
2001:0db8::0022
变成2001:db8::22
)。 ::
只能用于影响最大的地方(压缩最多的零),但并不是针对16位的块。如果多个块中包含等长度的零,顺序靠前的块将被替换为::
。- a~f的十六进制数字应该用小写表示。
IP地址分类
32 位的IP地址采用两级结构,由两个字段组成。第一个字段是网络号,它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。第二个字段是主机号,它标志该主机(对路由器来说,就是标志该路由器)。一个主机号在所连接的网络(即前面的网络号所指明的网络)中必须是唯一的。由此可见,一个 IP 地址在整个互联网范围内是唯一的。因此,IP 地址可以记为:
\[\mathrm{IP}地址 ::= \{<网络号>,<主机号> \} \]IP地址中网络号和主机号的具体规定是:IP地址中的前\(n\)位是主机所连接的网络号,而IP地址中后面的\((32-n)\)位是主机号。
在互联网发展早期采用的是分类的IP 地址。分类的方法如图下图所示。分类的方法非常简单。这里A类(n=8)、B类(n=16)和C类(n=24) 地址都是单播地址(一对一通信),是最常用的。D类是多播地址(一对多通信),而E类是保留地址。
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的任何数 | 可以 | 可以 | 用于本地软件环回测试 |