1-ipv6基础知识之-地址
1.ipv6地址表示
1.1 首选IPv6地址表示
首选表示法也称为IPv6地址的完全形式,由一系列冒号(:)分开的8个16bit 二进制组成。为了书写方便,每个16bit的二进制以文本形式表示为十六进制字符。
image.png
首选格式的IPv6地址范例:
0000:0000:0000:0000:0000:0000:0000:0001
2001:0410:0000:1234:FB00:1345:7000:78AB
3FFE:0B00:0C18:0001:0000:1234:AB34:0002
FE80:0000:0000:0000:0000:0000:0000:0009
FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
1.2 压缩表示
IPv6中,经常见到一长串的0地址。为书写方便,在IPv6地址的连续16比特字段为0和16比特字段中的前导0,可以使用一种特定语法来压缩连续的0。
一般有以下两个规则:
- 连续16比特字段为0用::表示这些字段的0,但是::在IPv6地址中只能出现一次。IPv6地址压缩表示意味同一地址可能有多种表示。
- 16比特字段中的前导0每个字段中的前导0可以去掉。但如果16比特每个十六进制都为0,至少保留1个0
首选格式 压缩格式
2001:0000:0000:1234:FDBD:1200:3000:36FF 2001::1234:FDBD:1200:3000:36FF
3FFE:0000:0000:0000:1017:0000:0000:0002 3FFE:: 1017:0000:0000:2
FE80:0000:0000:0000:0000:0001:0000:0008 FE80::1:0:8
2.ipv6地址分类
IPv6地址分为三种类型:
-
单播地址:
单播地址是每个网络接口的唯一的标识符,多个接口不能分配相同的单播地址,去往某个单播地址的数据包,被发送到单一的接口,即实现一对一的通信。 -
多播/组播地址:
多播地址被分配给一组节点,组中所有成员拥有同样的组播地址,去往某个组播地址的数据包,被发送到该地址所标识的所有接口,即实现一对多的通信。 -
任意播地址:
任意播地址取自单播地址,当一个单播地址分配给多个接口,就变成了任意播地址。去往某个任意播地址的数据包,被发送到所有配置为该地址就接口中,距离源最近的那个接口。任意播实现的是一对多中之一的通信。
2.1 单播-本地链路地址
可以理解为网络层的MAC地址,所有的IPv6接口都有一个链路本地地址,即便它们同时还有一个全局单播地址。
这个概念类似于ipv4中,当DHCP分配失败时自动生成的169.254.XXX.XXX这样的地址,凡是源地址或目的地址中含有link-local address的报文,路由器都不应当转发它。这样的报文只能在一个LAN中互通。
本地链路地址前缀固定为FE80::开始
一个典型的IPv6主机单播地址由3部分组成:全局路由前缀、子网ID和接口ID(64位)
本地链路地址由MAC地址根据EUI算法生成,生成64位接口标识的算法如下:
首先取出48bit的MAC地址: DC:4B:DD:1D:FA:49
将高24位于低24位分开,中间插入FFFE DC:4B:DD:FF:FE:1D:FA:49
第一个字节二进制形式 1101 1100 (DC)
将第一个字节的第7位反转 1101 1110 (DE)
DE:4B:DD:FF:FE:1D:FA:49
加上特定前缀 fe80::DE4B:DDFF:FE1D:FA49/64
2.2 单播-可聚合全球地址
可聚合全球单播地址是用于IPv6因特网的IPv6地址,类似于ipv4的公网地址。最高的3个bit固定为001。
范围 | 2xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/3 |
---|---|
第一个地址 | 2000::0 |
最后一个地址 | 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF |
- 2002::/16 为使用6-TO-4过渡机制的节点保留
- 3ffe::/16 用于6bone测试目的的前缀
2.3 单播-本地站点地址
本地站点地址:site-local address
IPV6的私网地址,就像IPV4中的私网保留地址一样
只占用到整个IPV6地址空间的0.1%
前缀:FEC0::/10 其后的54比特用于子网ID 最后64位用于主机ID
范围:只能在本站点内使用,不能在公网上使用
例如:在本地分配十个子网
1、FEC0:0:0:0001::/64
2、FEC0:0:0:0002::/64
3、FEC0:0:0:0003::/64
10、FEC0:0:0:000A::/64
本地站点地址被设计用于永远不会与全球IPV6因特网进行通信的设备,比如:打印机、内部网服务器、网络交换机等
2.4 单播-未指定地址Unspecified address
形式:0:0:0:0:0:0:0:0
表示地址未指定,或者在写默认路由时代表所有路由
2.5 单播-回环地址Loopack address
形式:0:0:0:0:0:0:0:1
同IPV4中127.0.0.1地址的含义一样,表示节点自已
2.6 单播-内嵌IPV4地址的IPV6地址 IPv4 Compatible Address
1、IPV4兼容的IPV6地址--用于在IPV4网络上建立自动隧道,以传输IPV6数据包。
其中高96bit设为0,后面跟32bit的IPV4地址
0000:0000:0000:0000:0000:0000:206.123.31.2
0000:0000:0000:0000:0000:0000:ce7b:1f01
由于这种机制不太好,现在已经不再使用,转而采用更好的过渡机制
2、映射IPV4的IPV6地址--仅用于拥有IPV4和IPV6双协议栈节点的本地范围
其中高80bit设为0,后16bit设为1,再跟IPV4地址
0000:0000:0000:0000:0000:ffff:206.123.31.2
0000:0000:0000:0000:0000:ffff:ce7b:1f01
2.6 组播-分配的地址
- ipv6多播地址格式为:FF00::/8
- 标志位为0时,指示多播地址是已由 Internet 号码分配机构 (IANA)永久分配的已知多播地址。标志位为 1 时,指示 IANA 尚未永久分配的临时多播地址.
- 作用域为1(接口本地作用域)、2(链路本地作用域)和 5(站点本地作用域)。
- 组ID,标识多播组,在作用域内是唯一的。
RFC2327在多播范围内为IPv6协议操作定义和保留了几个IPv6地址,这些保留地址称为多播指定地址,如下所示.
- FF01::1(接口本地作用域所有节点的多播地址)
- FF02::1(链路本地作用域所有节点的多播地址)
- FF01::2(接口本地作用域所有路由器的多播地址)
- FF02::2(链路本地作用域所有路由器的多播地址)
- FF05::2(站点本地作用域所有路由器的多播地址)
例:
- ff02::2 (作为路由请求报文(RS)的目标地址)
- ff02::1 (作为路由宣告报文(RA)报文的目标地址, 但回应RS的RA是单播)
- ff02::1:2 (作为DHCPv6 Solicit报文的目标地址)
2.7 组播-被请求节点的多播地址
一种特殊的组播地址,对于节点或路由器的接口上分配的每个单播和任意播地址,都会自动生成一个对应的被请求节点组播地址,并侦听。
image.png- 如何产生: 被请求节点组播地址的前104位固定(FF02::1:FFxx:xxxx/104),将IPv6地址的后24位移下来填充到后面。
例: 目标地址: FF02::1234:5678
请求节点地址:FF02::1:FF34:5678 - 工作范围:只在本地链路上有效
- 特点 :只要知道一个接点的ipv6地址,就能计算出他的被请求节点的组播地址.
- 用途:地址解析,重复地址检测DAD。
2.8 任意播地址
在IPv6 中,任意播地址加入IP 的唯一一种新地址类型,IPv6 的实现基于RFC1546“主机任播服务”的内容。任播地址可以看作是单播和多播寻址在概念上的交叉。其中单播为“发往一个地址”,多播为“发往本组的每个成员”,任意播由为“发往本组的任意一个成员”。
在选择向哪个成员发送数据时,出于效率的考虑,我们通常将发往最近的那个,即选路最近。所以我们也可认为任意播意思是“发往本组中最近的成员”。
任意播的基本想法是提供 TCP/IP 以前很难实现的功能。任意播具体倾向于在如下场合提供灵活性:我们需要的服务可由许多不同的服务器或路由器提供,但我们并不关心是哪个提供的服务。选路时,任意播允许数据报发往一组等价路由器中最近的一个,允许在路由器之间分担负载并在某些特定的路由器退出服务时提供动态的灵活性,发往任意播地址的数据报将自动传递给最容易到达的设备。
任意播没有专门的寻址方案,任意播地址和单播地址相同,当一个单播地址被分给多个接口时,全自动创建一个任意播地址。
3. ipv6地址总结
主机的IPv6地址:
主机的接口会分配到如下单播地址:
- 自动生成的链路本地地址
- 分配到单个/多个唯一的本地地址和聚合全球地址
- 环回接口分配到的环回地址(::1)
主机的接口会监听如下组播地址:
- 接口本地范围内所有节点的组播地址(FF01::1)
- 链路本地范围内所有节点的组播地址(FF02::1)
- 环每个单播地址的请求节点组播地址
- 已加入组的组播地址
路由器的IPv6地址:
主机的接口会分配到如下单播地址:
- 自动生成的链路本地地址
- 接口分配到单个或多个唯一的本地地址和聚合全球地址
- 环回接口分配到的环回地址(::1)
此外,路由器还会收到如下任意播地址: - 自动生成的链路本地地址
- 接口分配到单个或多个唯一
主机的接口会监听如下组播地址:
- 接口本地范围内所有节点的组播地址(FF01::1)
- 链路本地范围内所有路由器的组播地址(FF01::)
- 链路本地范围内所有节点的组播地址(FF02::1)
- 链路本地范围内所有路由器的组播地址(FF02::2)
- 站点本地范围内所有节点的组播地址(FF02::1)
- 环每个单播地址的请求节点组播地址
- 已加入组的组播地址
IPv4地址 | IPv6地址 |
---|---|
组播地址(224.0.0.0/4) | IPv6组播地址(FF00::/8) |
广播地址 | IPv6中无此概念 |
未指定的地址是0.0.0.0 | 未指定的地址是:: |
环回地址是127.0.0.1 | 环回地址是::1 |
公有IP地址 | 全局单播地址 |
私有IP地址(10.x.x.x,172.16.x.x,192.168.x.x) | 唯一本地(FD00::/8)或站点本地地址(FEC0::/10)(不推荐) |
APIPA地址(169。254.x.x) | 链路本地地址(FE80::/64) |
地址表示法:点分十进制表示法 | 文本表示法:前导0压缩,0压缩的十六进制冒号表示法 |
前缀表示法:点分十进制表示的子网掩码或者是前缀长度的表示法 | 前缀表示法:仅有前缀长度的表示法 |