前言
随着Internet规模的扩大,IPv4地址空间已经消耗殆尽。针对IPv4的地址短缺问题,曾先后出现过CIDR和NAT等临时性解决方案,但是CIDR和NAT都有各自的弊端,并不能作为IPv4地址短缺问题的彻底解决方案。另外,安全性、简便配置等要求也表明需要一个新的协议来根本解决目前IPv4面临的问题。
随着网络的快速发展,IPv4地址面临严重短缺
IPv6地址结构
IPv6地址长度为128比特,用于标识一个或一组接口。IPv6地址通常写作xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,其中xxxx是4个十六进制数,等同于16个二进制数;八组xxxx共同组成了一个128比特的IPv6地址。一个IPv6地址由IPv6地址前缀和接口ID组成,IPv6地址前缀用来标识IPv6网络,接口ID用来标识接口。
构成:前缀+接口标识符/长度
结构 | 地址前缀 | 接口ID | 前缀长度 |
---|---|---|---|
例如 | fe80:: | 5689:98ff:fe6f:0327 | 64 |
地址格式压缩
由于IPv6地址长度为128比特,书写时会非常不方便。此外,IPv6地址的巨大地址空间使得地址中往往会包含多个0。为了应对这种情况,IPv6提供了压缩方式来简化地址的书写。压缩规则如下:
每16比特组中的前导0可以省略。
地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替。需要注意的是,在一个IPv6地址中只能使用一次双冒号“::”,否则,设备将压缩后的地址恢复成128位时,无法确定每段中0的个数。
本示例展示了如何利用压缩规则对IPv6地址进行简化表示。
全写 | 2001:0DB8:0000:0000:0000:0000:0346:8D58 |
---|---|
省略前导零 | 2001:DB8:0:0:0:0:346:8D58 |
简写 | 2001:DB8::346:8D58 |
IPv6地址分类
单播地址
单播地址主要包含全球单播地址和链路本地地址。全球单播地址(例如2000::/3)带有固定的地址前缀,即前三位为固定值001。其地址结构是一个三层结构,依次为全球路由前缀、子网标识和接口标识。全球路由前缀由RIR和互联网服务供应商(ISP)组成,RIR为ISP分配IP地址前缀。子网标识定义了网络的管理子网。
链路本地单播地址的前缀为FE80::/10,表示地址最高10位值为1111111010。前缀后面紧跟的64位是接口标识,这64位已足够主机接口使用,因而链路本地单播地址的剩余54位为0。一般根据EUI-64格式生成。
单播地址 | 地址范围 |
---|---|
未指定地址 | ::/128 |
环回地址 | ::1/128 |
链路本地地址(类似IPv4私网地址) | fe80::/10 |
站点本地地址 | FEC0::/10 |
全球单播地址(类似IPv4公网地址) | 2000::/3 |
48bits | 16bits | 64bits |
---|---|---|
Global Routing Prefix | Subnet ID | Interface ID |
2001:0:130F: | 0: | 0:9C0:876A:130B |
10bits | 54bits | 64bits |
---|---|---|
1111111010 | 0 | Interface ID |
-
EUI-64格式生成:
MAC将第七个bit位变为1,然后在前24位与后24之间加入FFFE,再加上前缀FE80::
MAC地址 | IPv6地址 | |
---|---|---|
例1 | 54-89-98-6f-03-27 | fe80::5689:98ff:fe6f:0327 |
例2 | 54-89-98-d5-7b-22 | fe80::5689:98ff:fed5:7b22 |
例3 | 54-89-98-02-12-98 | fe80::5689:98ff:fe02:1298 |
组播地址
IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。目的地址为组播地址的报文会被该组播地址标识的所有接口接收。
一个IPv6组播地址是由前缀、标志(Flag)字段、范围(Scope)字段以及组播组ID(Group ID)4个部分组成:
前缀:IPv6组播地址的前缀是FF00::/8(1111 1111)。
标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
范围字段(Scope):长度4bit,用来限制组播数据流在网络中发送的范围。
组播组ID(Group ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0,这样,每个组播组ID都可以映射到一个唯一的以太网组播MAC地址(RFC2464)。
8bits | 4bits | 4bits | 112bits |
---|---|---|---|
11111111 | Flags | Scope | Group ID |
所有IPv6组播地址都以FF开始
IPv6为需要使用组播发送数据的协议预留了一些组播地址
地址范围 | 描述 |
---|---|
ff02::1 | 链路本地范围所有节点 |
ff02::2 | 链路本地范围所有路由器 |
任播地址
从单播地址空间中进行分配,使用单播地址的格式
任播地址用来标识一组网络接口,在给多个主机或者节点提供相同的服务时提供冗余和负载分担。
详细介绍:
任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。任播过程涉及一个任播报文发起方和一个或多个响应方。任播报文的发起方通常为请求某一服务(DNS查找)的主机或请求返还特定数据(例如,HTTP网页信息)的主机。任播地址与单播地址在格式上无任何差异,唯一的区别是一台设备可以给多台具有相同地址的设备发送报文。
企业网络中运用任播地址有很多优势。其中一个优势是业务冗余。比如,用户可以通过多台使用相同地址的服务器获取同一个服务(例如,HTTP)。这些服务器都是任播报文的响应方。如果不是采用任播地址通信,当其中一台服务器发生故障时,用户需要获取另一台服务器的地址才能重新建立通信。如果采用的是任播地址,当一台服务器发生故障时,任播报文的发起方能够自动与使用相同地址的另一台服务器通信,从而实现业务冗余。
使用多服务器接入还能够提高工作效率。例如,用户(即任播地址的发起方)浏览公司网页时,与相同的单播地址建立一条连接,连接的对端是具有相同任播地址的多个服务器。用户可以从不同的镜像服务器分别下载html文件和图片。用户利用多个服务器的带宽同时下载网页文件,其效率远远高于使用单播地址进行下载。
镜像服务器免责声明:
根据您的要求,出于检测通信传输中的故障和错误的目的,该特性可能涉及采集或存储个人用户某些通信内容。本公司无法单方采集或存储用户通信内容。建议您只有在所适用法律法规允许的目的和范围内方可启用相应的功能。在采集、存储用户通信内容的过程中,您应采取足够的措施以确保用户的通信内容受到严格保护。
IPv6无状态地址自动配置
IPv6支持无状态地址自动配置,无需使用诸如DHCP之类的辅助协议,主机即可获取IPv6前缀并自动生成接口ID。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
RA报文:每台路由器为了让二层网络上的主机和其它路由器知道自己的存在,定期以组播方式发送携带网络配置参数的RA报文。RA报文的Type字段值为134。
RS报文:主机接入网络后可以主动发送RS报文。RA报文是由路由器定期发送的,但是如果主机希望能够尽快收到RA报文,它可以立刻主动发送RS报文给路由器。网络上的路由器收到该RS报文后会立即向相应的主机单播回应RA报文,告知主机该网段的默认路由器和相关配置参数。RS报文的Type字段值为133。
IPv6无状态地址DAD检查
设备在给接口分配IPv6单播地址之前会进行重复地址检测(DAD),确认是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址,此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-nodes组播组和Solicited-node组播组。Solicited-node组播组由单播或任播地址的后24位加上地址前缀FF02:0:0:0:0:1:FF00::/104组成。例如,本示例中配置的试验地址为2000::1,该地址被加入Solicited-node组播组FF02::1:FF00:1。
IPv6重复地址检测技术和IPv4中的免费ARP类似:用于地址分配或主机连接网络时检测重复的IPv4主机地址。节点向一个自己将使用的试验地址所在的Solicited-node组播组发送一个以该试验地址为请求的目标地址的邻居请求(NS)报文,如果收到某个其它站点回应的邻居通告(NA)报文,就证明该地址已被网络上使用,节点将不能使用该试验地址进行通信。这种情况下,网络管理员需要手动为该节点分配另外一个地址。