一、 IPV6基础
IPv6:是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址 。
国际IP地址分配方式:
1)ICANN的IANA部门负责将IP地址分配给5个区域性的互联网注册机构RIR ,比如APNIC,它负责亚太地区的IP分配
2)RIR将地址进一步分配给当地的ISP,比如:中国电信和中国移动
3)ISP再根据自己的情况,将IP地址分配给机构或者直接分配给用户,比如将IPv4 A类地址分配给一个超大型机构,而将IPv4 C类地址分配给一个中型企业。
1. 与IPV4相比,IPV6具有以下优势
1.1 与IPV4对比优势
1)IPv6具有更大的地址空间
IPv4中规定IP地址长度为32,即有2^32-1(符号^表示升幂,下同)个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。1
2)IPv6使用更小的路由表
IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
3)IPv6增加了增强的组播(Multicast)支持以及对流的支持(Flow Control)
使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS,Quality of Service)控制提供了良好的网络平台。
4) IPv6加入了对自动配置(Auto Configuration)的支持
对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。
5) IPv6具有更高的安全性
在使用IPv6网络中,用户可以对网络层的数据进行加密,并对IP报文进行校验,极大增强了网络安全性。
1.2 IPv6和IPv4协议对比
2. IPv6地址介绍
IPv6地址长度为128位,是IPv4地址长度的4倍。IPv4点分十进制格式不再适用,IPv6采用十六进制表示。
IPv6地址用冒号分隔为8段,每一段16位,每一段用十六进制表示。
与IPv4地址类似,IPv6也用"IPv6地址/掩码长度"的方式来表示IPv6地址,例如:
2001:0db8:85a3:08d3:1319:8a2e:0370:7344/64
2.1 IPv6的3种表示方法
2.1.1 冒号分隔(简称:冒分)十六进制表示法
格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16bit(16位二进制数),以十六进制表示,例如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789/64
这种表示法中,每个X的前导0是可以省略的,例如:
2001:0DB8:0000:0023:0008:0800:200C:417A >> 2001:DB8:0:23:8:800:200C:417A
2.1.2 0位压缩表示法
有时候一个IPv6地址中间可能连续多个0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:
FF01:0:0:0:0:0:0:1101>>FF01::1101
0:0:0:0:0:0:0:1 >> ::1
0:0:0:0:0:0:0:0 >> ::
2.1.3 内嵌IPv4地址表示法
IPv4地址会嵌入IPv6地址中,表示格式为:X:X:X:X:X:X:d.d.d.d,即IP地址前96位采用IPv6冒分十六进制表示,IP地址最后32位使用IPv4点分十进制表示,例如:
::192.168.0.1
::FFFF:192.168.0.1
注意在前96位,前导0省略和压缩0位的方法依旧适用。
2.2 IPv6地址结构
IPv6地址分为如下两部分:网络前缀+接口标识
网络前缀:nbit,相当于IPv4地址中的网络ID
接口标识:(128 - n)bit,相当于IPv4地址中的主机ID
示例:
2001:0DB8:6101:0001:5ED9:98FF:FECA:A298/64
2.2.1 IPv6地址前缀
鉴于IPv4地址在规划和分配上的局限性,IETF对IPv6地址类型进行了精细划分,不同类型的IPv6地址被赋予了不同的前缀,且受地址分配机构的严格管理。
现阶段常用的IPv6地址或前缀
2.2.2 IPv6地址接口标识
接口ID可以通过三种方式生成:
- 手工配置
- 系统自动生成
- 基于IEEE EUI-64规范生成
基于IEEE EUI-64的规范生成IPv6接口标识
转换算法:将第7位取反,即0变为1,或者1变为0,在MAC地址的中间(24bit处)插入两个字节:FFFE。
3. IPv6地址分类
IPv6协议主要定义了三种地址类型:单播地址(Unicast Address)、组播地址(Multicast Address)和任播地址(Anycast Address)。
单播地址:用来唯一标识一个接口,发送到单播地址的数据报文将被传送给此地址所标识的一个接口。
组播地址:用来标识一组接口(通常这组接口属于不同的节点),发送到组播地址的数据报文被传送给此地址所标识的所有接口。
任播地址:用来标识一组接口(通常这组接口属于不同的节点),发送到任播地址的数据报文被传送给此地址所标识的一组接口中距离源节点最近(根据使用的路由协议进行度量)的一个接口。
IPv6地址类型是由地址前缀部分来确定,主要地址类型与地址前缀的对应关系如下:
3.1 单播地址
IPv6单播地址包括四个类型:全局单播地址、本地单播地址、兼容性地址、特殊地址。
3.1.1 全局单播地址(GUA---Global Unicast Address)
也被成为可聚合全球单播地址,相当于IPv4中的公网地址,用于IPv6 Internet上进行全局路由和访问。这种地址类型允许路由前缀的聚合,从而限制了全球路由表项的数量。
注:由于全局单播地址前3bit固定为001,因此全球单播地址在用冒分十六进制表示时,是以2000或3000开头,如,2000:X:X:X:X:X:X:X或者3000:X:X:X:X:X:X:X
3.1.2 本地单播地址
链路本地地址和唯一本地地址都属于本地单播地址,在IPv6中,本地单播地址就是指本地网络使用的单播地址。每个接口上至少要有一个链路本地单播地址,另外还可分配任何类型(单播、任播和组播)或范围的IPv6地址。
3.1.2.1 链路本地地址(LLA---Link-Local Address)
链路本地地址网络前缀为FE80::/10,仅用于单个链路(链路层不能跨网段),不能在不同子网中路由。结点使用链路本地地址与在同一个链路上的相邻结点进行通信。例如,在没有路由器的单链路IPv6网络上,主机使用链路本地地址与该链路上的其他主机进行通信。
注:由于链路本地地址前10bit固定为1111 1110 10,因此链路本地地址在用冒分十六进制表示时,是以FE8、FE9、FEA和FEB开头,如,FE80:X:X:X:X:X:X:X、FE90:X:X:X:X:X:X:X、FEA0:X:X:X:X:X:X:X或者FEB0:X:X:X:X:X:X:X
3.1.2.2 唯一本地地址(ULA---Unique Local Address)
唯一本地地址网络前缀为FC00::/7,是IPv6私网地址,只能够在内网中使用。该地址空间在IPv6公网中不可路由,因此不能用于访问公网(Internet)。
注:由于唯一本地地址前7bit固定为1111 110,因此唯一本地地址在用冒分十六进制表示时,是以FC或FD开头,如,FC00:X:X:X:X:X:X:X或者FD00:X:X:X:X:X:X:X
3.2 组播地址
IPv6组播地址可识别多个接口,对应于一组接口的地址(通常分属不同节点)。发送到组播地址的数据包被送到由该地址标识的每个接口。使用适当的组播路由拓扑,将向组播地址发送的数据包发送给该地址识别的所有接口。任意位置的IPv6节点可以侦听任意IPv6组播地址上的组播通信。IPv6节点可以同时侦听多个组播地址,也可以随时加入或离开组播组。
IPv6组播地址q前8位固定为1111 1111,即以FF开始的IPv6地址为组播地址。
组播地址由前缀(FF::/8)、标志(Flag)字段、范围(Scope)字段以及组播组ID(Group ID)4个部分组成。最后112位为组ID( Group ID ),标识不同的组播组,前面的80位为0 ,只使用最后32位。
Flags(标记):第一位为零,格式为|0|r|p|t|,通常0000或者0001。
r位:取0表示内嵌RP,取1表示内嵌RP。
p位:取0表示非基于单播前缀的组播地址,取1表示基于单播前缀的组播地址。
t位:取0表示永久分配组播地址,取1表示临时分配组播地址。
Scope(范围):4bit,标识传播范围。
0001 node(节点):本地接口范围,仅用于Lookback。
0010 link(链路):本地链路范围。
0101 Site(站点):本地站点范围。
发送组播数据包通常是单台设备,可以是组播组成员,也可以是其它主机,数据包的目的地址是组播地址。
被请求节点组播地址:当一个节点具有了单播和任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。该地址主要用于邻居发现机制和地址重复检测功能。被请求节点组播地址的有效范围为本地链路范围。被请求节点组播地址格式如下:
被请求节点组播地址的前104位是固定的,后24位根据单播地址的后24来进行填充。
例如:全球单播地址:2001:172:16:12::1
对应被请求节点组播地址为:FF02::1:FF00:01
其中FF02::1表示所有主机,FF02::2表示所有路由器。
如下示例:
PC1发送数据至PC2前,首先需要获取其MAC地址。PC1将发起类似IPv4中ARP的解析流程,IPv6使用ICMPv6的NS和NA报文来实现地址解析过程,NS报文的目的IPv6地址为目标IPv6单播地址对应的被请求节点组播地址。
组播IPv6报文的目的IP为组播IPv6地址,同样,目的MAC为组播MAC地址。组播MAC的前16bit为"33:33",是专门为IPv6组播预留的MAC地址前缀。后32bit从组播IPv6地址的后32bit直接映射而来。
3.3 任播地址
在IPv6中没有广播的概念,但是有任播地址,它的范围和全球单播地址一致,只不过可以重复配置,无法根据地址判断是单播地址还是任意播地址。通过合适的路由拓扑,目的地址为任播地址的数据包将被发送到单个接口(该地址识别的最近接口,最近接口定义的根据是路由距离最近,而且当最近的路由器故障时,根据路由指向下一台最近的路由器。),一个任播地址绝不能用作IPv6数据包的源地址;也不能分配给IPv6主机,仅可以分配给IPv6路由器 。
4. IPv6报文结构
IPv6报文一般由三个部分组成:
基本报头:提供报文转发的基本消息,路由器通过解析基本报头就能完成绝大多数额报文转发任务(长度固定为40字节)
扩展报头:提供一些扩展的报文转发信息,如分段、加密等,该部分不是必需的,也不是每个路由器都需要处理,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头
上层协议数据单元:一般由上层协议报头和它的有效载荷构成,该部分与IPv4上层协议数据单元相似
4.1 IPv6基本报头
4.2 IPv6扩展报头
Extension Header Length:扩展报头长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)
Extension Header Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合
逐跳选项报头:该扩展报头被每一条处理,可包含多种选项,如路由器告警选项
目的选项报头:目的地处理,可包含多种选项,如Mobile IPv6的家乡地址选项
路由报头:指定源路由,类似IPv4 源路由选项,IPv6源节点用来指定信息报到达目的地的路径上所必须经过的中间节点。IPv6基本报头的目的地址不是分组的最终目的地址,而是路由扩展头中所列的第一个地址。
分段报头:IP报文分片信息,只由目的地处理
认证报头:IPsec用扩展头,只由目的地处理
封装安全净载报头:IPsec用扩展头,只由目的地处理
二、 IPV6基本功能
1. IPv6邻居发现协议 (类似v4的arp协议,拿对端的mac地址)
IPv6邻居发现协议与IPv4中的ARP协议类似,用于获取同一链路中其他设备的MAC地址,IPv6邻居发现只要一次报文交互就可以互相学习到对方的链路层地址,与ARP协议不同的是,IPv6邻居发现协议是工作于网络IP层的。IPv6邻居发现功能由邻居请求和邻居通告机制实现。
1.1 邻居请求
当一个节点需要得到同一本地链路上另外一个节点的链路本地地址时,就会发送邻居请求报文。此报文类似于IPv4中的ARP请求报文,不过使用多播地址而不使用广播,只有被请求节点的最后24比特和此组播相同的节点才会收到此报文,减少了广播风暴的可能。源节点使用目的节点的IPv6地址的最右24比特形成相应的多播地址,然后在相应链路上发送ICMPv6类型为135的报文。目的节点在响应报文中填充其链路地址。为了发送邻居请求报文,源节点必须首先知道目的节点的IPv6地址。邻居请求报文也用来在邻居的链路层地址已知时验证邻居的可达性。图3-1为IPv6邻居请求的报文:
图3-1
1.2 邻居通告
IPv6邻居通告报文是对IPv6邻居请求报文的响应。收到邻居请求报文后,目的节点通过在本地链路上发送ICMPv6类型为136的邻居通告报文进行响应。收到邻居通告后,源节点和目的节点可以进行通信。当一个节点的本地链路上的链路层地址改变时也会主动发送邻居通告报文。图3-2为IPv6邻居通告的报文:
图3-2
图3-3为IPv6邻居发现的整个过程:
图3-3
IPv6邻居发现协议还可用于检测同一链路中是否存在相同IP地址的设备,该功能与IPv4中的无故ARP类似。当一台设备需要检测同一链路中是否存在设备与自己的IP地址相同时,只需要发送一个邻居请求报文,且目的组播地址为自己IP地址对应的被请求节点组播地址,如果他受到了其他设备发送的邻居通告报文,则说明链路上有设备与自己的IP地址存在冲突,发出告警。
2. IPv6路由发现协议 (拿ip地址)
IPv6路由器发现用来定位邻居路由器,同时学习和地址自动配置有关的前缀和配置参数。IPv6路由器发现由下路由请求和路由通过两种机制实现。
2.1 路由器请求
当主机没有配置单播地址(例如系统刚启动)时,就会发送路由器请求报文。路由器请求报文有助于主机迅速进行自动配置而不必等待IPv6路由器的周期性IPv6路由器通告报文。IPv6路由请求也是ICMP报文,类型为133。
IPv6路由器请求报文中的源地址通常为未指定的IPv6地址(0::0)。如果主机已经配置了一个单播地址,则此接口的单播地址可在发送路由器请求报文时作为源地址填充。IPv6路由器请求报文中的目的地址是所有路由器多播地址(FF02::2),作用域为本地链路。如果路由器通告是针对路由器请求发出的,则其目的地址为相应路由器请求报文的源地址。需要注意的是:路由器请求在启动期间发送并只发送三次以避免网络上没有路由器时拥塞网络。
图3-4为IPv6路由请求报文:
图3-4
2.2 路由器通告
每个IPv6路由器的配置接口会周期发送路由器通告报文。在本地链路上收到IPv6节点的路由器请求报文后,路由器也会发送路由器通告报文。IPv6路由器通告报文发送到所有节点的链路本地多播地址(FF02 ::1)或发送路由器请求报文节点的IPv6单播地址。
路由器通告为ICMP报文,类型为134,包含以下内容:
- 是否使用地址自动配置
- 标记支持的自动配置类型(无状态或有状态自动配置)
- 一个或多个本地链路前缀―――本地链路上的节点可以使用这些前缀完成地址自动配置
- 通告的本地链路前缀的生存期
- 是否发送路由器通告的路由器可作为缺省路由器,如果可以还包括此路由器可作为缺省路由器的时间(用秒表示)
- 和主机相关的其它信息,如跳数限制,主机发起的报文可以使用的最大MTU。
图3-5为IPv6路由通告报文:
图3-5
图3-6为IPv6路由发现的整个过程:
图3-6
3. IPv6无状态地址自动配置
在一个IPv6网络中,可通过使用路由器通告报文(和针对每一前缀的标记),路由器可以通知主机如何进行地址自动配置。例如,路由器可以指定主机是使用有状态(DHCPv6)地址配置还是无状态地址自动配置进行地址配置。
主机收到路由器通告报文后,使用其中的前缀信息和本地接口ID自动形成IPv6地址,同时还可以根据其中的默认路由器信息设置默认路由器。
使用无状态地址配置可以使IPv6节点很容易完成地址重新编址,降低了网络重新部署的复杂性。进行重新编址时,路由器通告报文中既包括旧的前缀也包括新的前缀。旧前缀的生存期减少,促使节点使用新的前缀,同时保证现有连接可以继续使用旧的前缀。在此期间,节点同时具有新旧两个单播地址。当旧的前缀不再使用时,路由器只通告新的前缀。
4 IPv6路径MTU发现协议
IPv4中也定义了路径MTU发现协议,不过是可选支持的。在IPv6中为了简化报文处理流程、提高处理效率,限定IPv6路由器不处理分片,分片只在源节点在需要的时候进行。因此IPv6的路径MTU发现协议是必须实现的。IPv6使用路径MTU发现得到源和目的节点之间路径的最大MUT。源节点在发现报文前进行路径MTU发现处理。如果路径上的MTU不足以传输整个报文,则源节点分片后重新发送。
路径MTU发现协议使IPv6节点能够动态发现并调整以适合给定数据路径上的MTU变化。在IPv4中最小链路MTU值是68字节(推荐最小值为576字节),而在IPv6中最小MTU值为1280字节(推荐最小值为1500)。IPv6基本头支持的最大报文长度是64000字节。更大的报文(jumbograms)通过逐跳扩展头选项处理。
图3-7为IPv6路径MTU发现协议的工作过程:
图3-7
三、 DHCPv6协议
DHCP协议(即动态主机配置协议)曾设计用来处理向计算机分配IP地址和其他网络信息,以便计算机可以在网络上自动通信。通过使用 IPv6 网络,实际上不需要使用DHCP来配置地址。但是DHCP协议本身具有一定的优势,我们还是有充分的理由在IPv6网络中使用它。
DHCPv6(Dynamic Host Configuration Protocol for IPv6,支持IPv6的动态主机配置协议)是针对IPv6编址方案设计的、为主机分配IPv6地址和其他网络配置参数的协议。
与其他IPv6地址分配方式(手工配置、通过路由器公告消息中的网络前缀无状态自动配置等)相比,DHCPv6具有以下优点:
(1)更好地控制地址的分配。通过DHCPv6不仅可以记录为主机分配的地址,还可以为特定主机分配特定的地址,以便于网络管理。
(2)除了IPv6地址外,还可以为主机提供DNS服务器、域名等网络配置参数。
1. DHCPv6基本概念
(a) 所有DHCPv6服务器和中继服务器的组播地址
IPv4网络中设备使用广播的手段发送DHCP Discover报文来发现网络中所有的DHCP服务器和DHCP中继服务器。而在IPv6中,组播已经取代了广播,因此设备使用组播来发现网络中所有的DHCPv6服务器和中继服务器。DHCPv6中采用组播地址FF02::1:2来表示链路范围内所有的DHCPv6服务器和中继。
(b) DUID
DUID(DHCP Unique Identifier,DHCP唯一标识符)是唯一标识一台DHCPv6设备(包括客户端、中继和服务器)的标识符,用于DHCPv6设备之间的相互验证。目前,设备采用RFC3315规定的DUID-LL(DUID Based on Link-layer Address,基于链路层地址的DUID)作为DHCPv6设备的标识。DUID-LL的结构如图4-1所示:
图4-1
各字段意义如下:
DUID type:DUID类型。DUID-LL类型取值为0x0003。
Hardware type:硬件类型。设备支持的硬件类型为以太网,取值为0x0001。
Link layer address:链路层地址。取值为设备的桥MAC地址。
图4-2为一台DHCP Client的DUID字段:
图4-2
(C) DHCPv6典型应用场景
DHCPv6客户端通过链路范围的组播地址与DHCPv6服务器通信,以获取IPv6地址和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6中继来转发报文,这样可以避免在每个链路范围内都部署DHCPv6服务器,既节省了成本,又便于进行集中管理。图4-3为存在DHCPv6中继服务器的应用场景:
图4-3
2. RA中M位、O位与DHCPv6的关系
IPv6主机可以通过多种方式配置地址:
(1)无状态地址自动配置 用于对链接本地地址和其他非链接本地地址两者进行配置,方法是与相邻路由器交换路由器请求和路由器公告消息;
(2)有状态地址自动配置 通过使用如DHCP的配置协议,用来配置其全球地址;
(3)手工配置静态地址。
IPv6主机自动执行无状态地址自动配置,并在相邻路由器发送的路由器公告消息中使用基于以下标记的配置协议(如DHCPv6):
托管地址配置标记(也称为M标记):设置为1时,此标记指示主机使用配置协议(DHCPv6)来获取有状态地址;设置为0时,此标记指示主机使用RA消息获取无状态地址。
其他有状态配置标记(也称为O标记):设置为1时,此标记指示主机使用配置协议来获取其他配置设置(如DNS、NTP等信息);设置为0时,此标记指示主机不获取其他信息。
图4-4为RA报文中的M位和O位:
图4-4
结合M位和O位的值可以产生以下组合:
M位和O位均设置为0:此组合对应不具有DHCPv6基础结构的网络。主机使用非链接本地地址的路由器公告以及其他方法(如手动配置)来配置其他设置。
M位和O位均设置为1:DHCPv6用于这两种地址(链接本地地址和其他非链接本地地址)和其他配置设置。该组合称为 DHCPv6 有状态,其中 DHCPv6将有状态地址分配给IPv6主机。
M位设置为0,O位设置为1:DHCPv6不用于分配地址,仅用来分配其他配置设置。相邻路由器配置为通告非链接本地地址前缀,IPv6主机从中派生出无状态地址。此组合称为DHCPv6无状态:DHCPv6不为IPv6主机分配有状态地址,但分配无状态配置设置。
M标记设置为1,O标记设置为0: 在此组合中,DHCPv6用于地址配置,但不用于其他设置。因为IPv6主机通常需要使用其他设置(如域名系统 DNS服务器的IPv6地址)进行配置,所以这是一种不太可能的组合。
3. DHCPv6无状态配置
DHCPv6无状态配置是指设备通过地址无状态自动配置获取IPv6地址后,利用DHCPv6服务器获取除地址以外的其他网络配置参数,如DNS服务器、域名等。在DHCPv6无状态配置过程中,DHCPv6服务器不需要保存客户端的状态信息,因此称为DHCPv6无状态配置。
设备通过地址无状态自动配置功能成功获取IPv6地址,且接收到的RA(Router Advertisement,路由器通告)报文中M标志位(Managed address configuration flag,被管理地址配置标志位)为0、O标志位(Other stateful configuration flag,技术介绍其他配置标志位)为1,则设备会自动启动DHCPv6无状态配置功能,以获取除地址外的其他网络配置参数。
DHCPv6无状态配置过程只需要两种报文:客户端发出的Information-request报文和服务器回应的Reply报文。
图4-5为DHCPv6地址无状态自动配置过程中客户端发出的Information-request报文:
图4-5
图4-6为DHCPv6地址无状态自动配置过程中服务器发出的Relay报文:
图4-6
4. DHCPv6有状态配置
DHCPv6有状态配置的过程与DHCPv4的过程类似,也是4步过程:DHCPv6 Solicit、DHCP Advertise、DHCPv6 Request和DHCPv6 Reply。在IPv4网络中,DHCP Discover和DHCP Request以广播形式发送,而IPv6网络中以组播形式发送,目的地址为ff02::1:2。图4-7为DHCPv6有状态配置地址的交互过程。
图4-7
在DHCPv6分配地址的过程中,DHCPv6 Advertise报文除了会提供DNS信息外,还会提供IA_NA(Identity Association for None-temporary Address)和IA_PD(Identity Association for Prefix Delegation)两个信息。由于IPv6地址空间相当充足,因此弃用了NAT技术,所以我们的网关可以给LAN侧PC分配公网地址。IA_NA信息中存放的是一个全球地址,该地址是一个非临时地址,用于分配给网关Wan侧接口。IA_PD信息中存放的是一个地址前缀,该前缀给予网关通过无状态方式分配给LAN侧PC,使其加上本身接口ID自动生成全球地址。图4-8为DHCPv6 Advertise报文中的IA_NA和IA_PD:
图4-8
5. DHCPv6报文类型
下表为DHCPv6所有报文类型:
四、 PPPoEv6协议
1. PPPoEv6交互过程
事实上PPPoEv6协议与PPPoEv4协议从发现阶段至会话阶段的协议交互基本相同,唯一的区别是PPPoEv4在认证完成后,服务器直接通过IPCP向客户端分配公网IP、网关、DNS等信息。而PPPoEv6在认证完成后,服务器只会通过IPv6CP给客户端分配一个接口ID,客户端根据这个接口ID生成LinkLocal地址,并将这个地址分配给PPP逻辑接口,然后该逻辑接口在通过RA、DHCPv6等手段获取IP地址、DNS、网关等信息。图5-1为PPPoEv6交互过程
图5-1
2. PPPoE-DHCPv6获取地址过程详解
以下报文为一台设备通过PPPoEv6+DHCPv6方式获取一个全球地址的详细过程
整个过程如下:
2.1 PPPoE发现阶段
图5-2
2.2 PPPoE协商阶段
图5-3
2.3 PPPoE认证过程
图5-4
2.4 PPPoEv6中的IPv6CP过程
图5-5
2.5 客户端根据服务器分配的接口ID,生成的LinkLocal地址,并使用此地址发送路由器请求,如图5-6所示:
图5-6
2.6 后续通过DHCPv6协议获取地址、DNS等信息,如图5-7所示:
图5-7
3. PPPoE-SLAAC获取地址过程详解
以下报文为一台设备通过PPPoEv6+DHCPv6方式获取一个全球地址的详细过程
PPPoE+SLAAC获取地址的过程与PPPoE+DHCPv6获取地址的整个过程类似,不同之处在于服务器发送的RA报文中M位为0,客户端则通过RA报文自动生成地址。因此不在这里做详细说明。
三、IPV6组播之组播地址详细图解
1. IPV6组播地址
RFC4291定义组播地址格式如下;
| 8 | 4 | 4 | 112 |
+---------------+----+------+---------------------------------------------+
|11111111|flgs|scop| group ID |
+--------------+-----+-------+--------------------------------------------+
组播地址高8bit为固定值FF,此高8个bit中4bit为flgs位,4bit为组播组的泛洪范围。
flgs位为4bit: |0|R|P|T|
flgs位的高1bit为保留,必须设置为0
T位如果为置0表示永久分配或者是well-known组播地址,如果置1表示临时分配动态的地址,不固定。
P位如果置1的话表示此组播地址是一个基于单播前缀的ipv6组播地址。默认为0,如果P位设置为1,那么T位必须为1。
R位如果置1的话表示此组播地址是一个内嵌RP地址的ipv6组播地址。默认为0。
4bitscope位来限制组播组的传播范围。
0 reserved
1 Interface-Local scope
2 Link-Local scope--链路本地范围
3 reserved
4 Admin-Local scope-管理本地范围
5 Site-Local scope--站点本地范围
6 (unassigned)
7 (unassigned)
8 Organization-Local scope-组织本地范围
9 (unassigned)
A (unassigned)
B (unassigned)
C (unassigned)
D (unassigned)
E Global scope--全局范围的
F reserved
低112bit为组播地址的可用组ID。
举例:link-local范围的组播地址,并且是well-known地址;
所有节点的组播地址: FF02:0:0:0:0:0:0:1
所有路由器的组播地址:FF02:0:0:0:0:0:0:2
Solicited-Node组播地址: FF02:0:0:0:0:1:FFXX:XXXX
所有OSPF路由器组播地址: FF02:0:0:0:0:0:0:5
所有OSPF的DR路由器组播地址: FF02:0:0:0:0:0:0:6
所有RIP路由器组播地址: FF02:0:0:0:0:0:0:9
所有PIM路由器组播地址: FF02:0:0:0:0:0:0:D
注:FF02开头,FF固定格式,flgs位都为0,表示此组播地址不是一个基于单播的组播地址也不是一个内嵌RP的组播地址,而是一个固定的well-know的组播地址。传播范围为类型2 link-local范围。
2. IPV6组播地址的新格式:基于单播前缀的组播地址(RFC3306)
| 8 | 4 | 4 | 8 | 8 | 64 | 32 |
+--------------+-----+------+------------+--------+---------------------+------------+
|11111111|flgs|scop|reserved| plen | network prefix | group ID |
+--------------+-----+------+------------+--------+---------------------+------------+
高8bit为FF固定值
4bit flgs,P为和T位必须为1,表示此组播地址是一个基于单播前缀的组播地址。
scop,限制范围同上。
8bit保留位,必须为0。
plen位,8bit。表示前缀的具体长度。(最长长度为64)
Network prefixt,表示具体的前缀长度。
Group id,32bit的组播组ID。
举例:比如现在有IPV6地址2002::2/64地址,那么它所用上面方法得到的组播地址为;
FF3X:0040:2002::Y(X为组播限制的范围,Y为组ID。)用这种方法可以实现全internet网组播地址的不冲突,原因在于没有机构去分配组播地址,但是由IANA分配单播前缀,这样通过单播前缀融入到组播地址中就可以实现不冲突。
3. SSM地址格式:RFC3306定义
基于单播前缀的组播地址也定义了SSM地址的格式;固定SSM地址的flag位里P=1,plen=0,network prefix=0、所以SSM地址的格式如下;
| 8 | 4 | 4 | 8 | 8 | 64 | 32 |
+--------------+-----+------+------------+--------+---------------------+------------+
|11111111|flgs|scop|reserved | 0 | 0 | group ID |
+--------------+-----+------+------------+--------+---------------------+------------+
得到SSM组播地址的范围为FF3X::/32,X为组播限制的范围。每个SSM地址格式为FF3X::/96。
4. 内嵌RP地址的IPV6组播地址;
内嵌RP地址的IPV6组播地址,当组播路由器收到这样组播组的数据包就可以检测出该组的RP地址;
| 20 bits | 4 | 8 | 64 | 32 |
+---------+----+----+----------------------+----------+
|xtra bits|RIID|plen| network prefix | group ID |
+---------+----+----+----------------------+----------+
高8bit,FF
flgs位必须设置为0111。也就是R P Tbit都设置为1。所以高20bit固定值为FF7X:00.
RIID,4bit RIID表示此内嵌RP的ipv6地址接口ID。
plen,8bit长度,表示此RP地址的前缀长度。
Network prefix,表示RP的前缀。
低32bit为组播组ID。
举例:比如一个RP地址为2022::2/64,那么依据上面的原则得到内嵌此RP地址的组播地址为;
FF7X:0240:2022::Y(x为组播限制范围,y为组播ID)