IPv6地址表示方法

1、IPv6地址表示方法

前面我们学习了什么是IPv6以及IPv6和IPv4之间的区别。我们知道,一个完整的IPv6地址长度为128位;这个128位的地址被分成了8段,每段4个字符;也就是说完整地表示一个IPv6地址,需要写32个字母;这是相当长的,并且容易混淆和出错;所以IPv6在地址的表示方法上,是有讲究的。到目前为止,IPv6地址的表示方法分为三种,分别是:冒分十六进制表示法、零位压缩表示法、内嵌IPv4地址表示法;下面我们一起分别来看看这3种表示方法。

1.1、冒分十六进制表示法

一般二进制数不好阅读和记忆,所以推荐使用十六进制数作为首选格式;这128位的地址按每16位划分为一组,每组转换成4个十六进制数,每组之间用冒号隔开,称为冒分十六进制表示法。冒分十六进制表示法是一种逢16进1的进位制,我们一般用数字0到9和字母A到F来表示;其中A到F表示10到15,这些都被称为16进制数字。例如十进制数57,在二进制中写作111001、而在十六进制中写作39。冒分十六进制的格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16bit,以十六进制表示。例如下面的地址我们可以用二进制表示为:

(0010 0000 0000 0001):(0000 1101 1010 1000):(0001 0000 0000 0100):(0000 0000 0000 0001):(0000 0000 0000 0000):(1111 0000 0101 1111):(0000 0001 1100 0000):(1010 1011 1100 1101)

十六进制表示:2001:0DA8:1004:0001:0000:F09F:01C0:ABCD

简写表示:2001:DA8:1004:1:0:F09F:1C0:ABCD

image-20220102000727228

注:前导的0可以省略、但是中间的0不能省略;这就是我们后面要讲的零位压缩表示法。

1.2、零位压缩表示法

基于使用冒分十六进制表示法的首选格式,IPv6地址还可以进一步压缩为两种短格式。我们可以省去任意组的前导零来压缩IPv6地址,例如085b可以化简为85b,全0块0000可以化简为0。对于多个连续地址块为0的情况时,可以使用双冒号::压缩。如下:

0001:0002:0034:0005:0006:0078:0009:000A 等价于1:2:34:5:6:78:9:A

在某些情况下,一个IPv6地址中间可能包含很长的一段0,我们可以把连续的一段0压缩为::

当然、为了保证地址解析的唯一性,地址中的::只能出现一次。例如:1234:0000:0000:0000:5678:0000:0000:ABCD 等价于1234::5678:0:0:ABCD或者1234:0:0:0:5678::ABCD。之所以地址中双冒号::只能出现一次;那是因为IPv6地址始终会有8组4个十六进制数,所以可以确定有多少全0组被省略。如果出现多个连续全0块时,双冒号::要化简最长的一段,没有最长的使用就近原则,压缩最靠近左边的第一段,双冒号::可以出现在地址开头或结尾。

2001:0da8:1001:aabb:0001:0000:abcd:bbc0(压缩后格式:2001:da8:1001:aabb:1:0:abcd:bbc0
2001:da8:1001:aabb:0:0:abcd:bbc0(压缩后格式:2001:da8:1001:aabb::abcd:bbc0
2001:0:0:1:1:0:0:1(压缩后格式:2001::1:1:0:0:1
2001:0:0:1:0:0:0:1(压缩后格式:2001:0:0:1::1

image-20220102001002323

规则1:丢弃前导零;

规则2:如果两个或多个块包含连续零,则省略它们并用双冒号::替换;连续的零块只能被::替换一次。如果地址中仍有零块,它们可以缩小到一个零。

1.3、内嵌IPv4地址表示法

为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d。前96bit采用冒分十六进制表示,而最后32bit地址则使用IPv4的点分十进制表示。例如::192.168.0.1::FFFF:192.168.0.1就是两个典型的例子。

C:\Users\Administrator>ping 2001:da8:1004::192.168.1.1

正在 Ping 2001:da8:1004::c0a8:101 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

2001:da8:1004::c0a8:101 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

C:\Users\Administrator>ping -4 www.njupt.edu.cn

正在 Ping www.njupt.edu.cn [202.119.224.201] 具有 32 字节的数据:
来自 202.119.224.201 的回复: 字节=32 时间=27ms TTL=47
来自 202.119.224.201 的回复: 字节=32 时间=26ms TTL=47
来自 202.119.224.201 的回复: 字节=32 时间=29ms TTL=47
来自 202.119.224.201 的回复: 字节=32 时间=26ms TTL=47

202.119.224.201 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 26ms,最长 = 29ms,平均 = 27ms

C:\Users\Administrator>ping -6 www.njupt.edu.cn

正在 Ping www.njupt.edu.cn [2001:da8:1032:5001:202:119:224:201] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

2001:da8:1032:5001:202:119:224:201 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

C:\Users\Administrator>

注:在前96bit中,压缩0位的方法依旧适用。

1.4、子网前缀和接口ID

在IPv4中,地址是在类中创建的。IPv4地址清楚地定义了用于网络前缀的位和用于该网络上主机的位。要在IPv4中进行子网,我们使用默认的类别的网络掩码,这允许我们借用要用作子网位的主机位。这导致多个子网,但是每个子网的主机少。也就是说,当我们借用主机位来创建一个子网时,我们用较少的一点来用于主机地址。IPv6地址使用128位表示一个地址,其中包含用于子网划分的位。地址的后半部分(最低有效位64位)始终仅用于主机。因此,如果我们对网络进行子网分配,则不会有任何妥协。

image-20220104213211131

IPv6的数字太多,多到地球上每粒沙子都能分配一个。但是这么多的IP地址怎么来划分一块一块的呢、又该如何区分呢?所以这里就有了子网前缀这个概念。IPv6的子网前缀就是把IPv6的地址,转换为二进制,从左向右的个数。

例如:fe80::/10

这个/10就是fe80的子网前缀,我们把fe80转换为二进制;也就是:1111 1110 1000 0000,我们从左向右数,十位二进制分别为1111 1110 10,这十位是不能动的。这也就意味着,子网前缀是固定的不能动的,只有后面的118位是可以变动的。那么这个二进制后面就可以写为: 1111 1110 1011 1111 11111 11111 1111 1111………….。综上,fe80::/10的ip范围就是:fe80::----febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff。比如电信给我家里分配的地址为:240e:fc:b841:700::/56 .其实就是240e:00fc:b841:0700::,粗体字不能变动,粗体后面的都属于你。子网的16位相当于IPv4的B类网络。使用这些子网位,一个组织可以拥有另外65千个子网,这个IP地址数量就非常大了。

因此路由前缀是/ 64,主机部分是64位。我们可以通过借用主机位进一步将网络子网超过16位子网ID;但建议始终为主机地址使用64位,因为自动配置需要64位。IPv6子网与IPv4中的可变长度子网掩码的概念相同。/ 48前缀可以分配给一个组织,它具有最多/ 64个子网前缀的优点,这是65535个子网络,每个子网络具有264个主机。可以将A / 64前缀分配给链路上只有两个主机(或启用IPv6的设备)的点对点连接。

而接口ID为64bits,用于标识链路上的接口,在每条链路上接口ID必须唯一。接口ID有许多用途,最常见的用于就是黏贴在链路本地地址的前缀后面,形成128bits的接口链路本地地址。或者在无状态自动配置中,黏贴在获取到的IPv6全局单播前缀后面,构成接口的全局单播地址。接口ID的设置方式主要有:根据IEEE的EUI-64规范将接口的48比特MAC地址转化为64比特的接口ID;手工为接口配置接口ID;某些系统支持自动生成随机接口ID(例如Windows7);过EUI-64规范从MAC地址转换到接口ID。

image-20220104215311733

每个以太网网卡或者接口都有一个唯一的MAC地址,如果能将接口的MAC地址衍生出接口ID自然是极好的,但是MAC地址48比特,而接口ID则是64比特,怎么衍生?EUI64规范定义了如何使用MAC地址产生64位的接口ID。

将48bits的MAC对半劈开,插入“FFFE”,然后对从左数起的第7位,也就是U/L位取反。该比特位确定48bits的MAC地址的唯一性与否。一个以太网地址可以有两种含义,地址可被全球管理或本地管理。全球管理指全球唯一的例如厂商MAC,本地管理指使用自己的值临时写的MAC地址,在这种情况下,这个特殊的位=1表示本地管理;为0表示全球管理。但是在EUI-64格式中,U/L的含义正好相反,0表示本地管理,1表示全球管理,所以使用EUI-64格式的地址IPv6地址,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。这就是这里为什么要取反的原因。

EUI-64:在MAC地址中间插入特定的FFFE(16位),并将标识全球/本地范围的第7位设置为1。查看Win10和路由器的IPv6地址命令如下:

ipconfig
netsh interface ipv6 show global
netsh interface ipv6 set global randomizeidentifiers=disable store=persistent
Router#showipv6 interface e0/0
Router(config-if)#ipv6 address 2001:1::/64 eui-64

好了、今天的IPv6基础内容就写到这里了。明天我们继续学习IPv6地址的分类以及ICMPv6协议的相关内容。

推荐文章