IPv6基础介绍
1、IPv6是Internet工程任务组(IETF)设计的一套规范,它是网络层协议的第二代标准协议,也是IPv4(Internet Protocol Version 4)的升级版本。
2、IPv6与IPv4的最显著区别:IPv4地址采用32比特标识,而IPv6地址采用128比特标识。128比特的IPv6地址可以划分更多地址层级、拥有更广阔的地址分配空间,并支持地址自动配置;近乎无限的地址空间是IPv6的最大优势。
3、IPv6基本报头:
(1)IPv6报文由IPv6基本报头、IPv6扩展报头以及上层协议数据单元三部分组成。
(2)IPv6的基本报头在IPv4报头的基础上,增加了流标签域,去除了一些冗余字段,使报文头的处理更为简单、高效。
(3)关键字段:
Traffic Class:流类别,长度为8bit,它等同于IPv4报头中的TOS字段,表示IPv6数据报文的类或优先级,主要应用于QoS。 Flow Label:流标签,长度为20bit,它用于区分实时流量。流可以理解为特定应用或进程的来自某一源地址发往一个或多个目的地址的连续单播、组播或任播报文。IPv6中的流标签字段、源地址字段和目的地址字段一起为特定数据流指定了网络中的转发路径。这样,报文在IP网络中传输时会保持原有的顺序,提高了处理效率。随着三网合一的发展趋势,IP网络不仅要求能够传输传统的数据报文,还需要能够传输语音、视频等报文。这种情况下,流标签字段的作用就显得更加重要。
跳数限制(Hop Limit):长度为8bit,该字段类似于IPv4报头中的Time to Live字段,它定义了IP数据报文所能经过的最大跳数。每经过一个路由器,该数值减去1;当该字段的值为0时,数据报文将被丢弃。
(4)IPv6为了更好支持各种选项处理,提出了扩展头的概念。
4、IPv6扩展报头:
(1) IPv6扩展报头是跟在IPv6基本报头后面的可选报头,可以有一个或多个。
(2) 除了目的选项扩展报头外,每个扩展报头在一个报文中最多只能出现一次。目的选项扩展报头在一个报文中最多也只能出现两次,一次是在路由扩展报头之前,另一次是在上层协议扩展报头之前。
5、IPv6地址格式:
(1)IPv6地址长度为128比特,每16比特划分为一段,每段由4个十六进制数表示,并用冒号隔开——冒分十六进制。
(2)IPv6地址包括网络前缀和接口标识(接口ID)两部分。
6、IPv6地址压缩方式:
(1)每一组中的前导“0”都可以省略。
(2)地址中包含的连续全为0的组,可以用双冒号“::”来代替。强调:在一个IPv6地址中只能使用一次双冒号“::”,否则,设备将压缩后的地址恢复成128位时,无法确定每段中0的个数。
7、IPv6地址分类:分为单播地址、任播地址、组播地址三种类型。
(1)链路本地地址:只能在连接到同一本地链路的节点之间使用。可以在自动地址分配、邻居发现和链路上没有路由器的情况下使用链路本地地址。以链路本地地址为源地址或目的地址的IPv6报文不会被路由器转发到其他链路。链路本地地址的前缀是FE80::/10。
(2)组播地址的前缀是FF00::/8。组播地址范围内的大部分地址都是为特定组播组保留的。跟IPv4一样,IPv6组播地址还支持路由协议。IPv6中没有广播地址。组播地址替代广播地址可以确保报文只发送给特定的组播组而不是IPv6网络中的任意终端。 IPv6还包括一些特殊地址,比如未指定地址::/128。如果没有给一个接口分配IP地址,该接口的地址则为::/128。需要注意的是,不能将未指定地址跟默认IP地址::/0相混淆。默认IP地址::/0跟IPv4中的默认地址0.0.0.0/0类似。环回地址127.0.0.1在IPv6中被定义为保留地址::1/128。
8、IPv6单播地址:主要包含全球单播地址和链路本地地址。
(1)全球单播地址(例如2000::/3)带有固定的地址前缀,即前三位为固定值001。其地址结构是一个三层结构,依次为全球路由前缀、子网标识和接口标识。全球路由前缀由RIR和互联网服务供应商(ISP)组成,RIR为ISP分配IP地址前缀。子网标识定义了网络的管理子网。
(2)链路本地单播地址的前缀为FE80::/10,表示地址最高10位值为1111111010。前缀后面紧跟的64位是接口标识,这64位已足够主机接口使用,因而链路本地单播地址的剩余54位为0。
9、IPv6组播地址:由前缀、标志(Flag)字段、范围(Scope)字段以及组播组ID(Group ID)4个部分组成。
(1)所有IPv6组播地址都以FF开始。
(2)IPv6为需要使用组播发送数据的协议预留了一些组播组。
(3)前缀:IPv6组播地址的前缀是FF00::/8(1111 1111)。
(4)标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
(5)范围字段(Scope):长度4bit,用来限制组播数据流在网络中发送的范围。
(6)组播组ID(Group ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0,这样,每个组播组ID都可以映射到一个唯一的以太网组播MAC地址(RFC2464)。
10、IPv6任播地址:
(1)任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。任播过程涉及一个任播报文发起方和一个或多个响应方。任播报文的发起方通常为请求某一服务(DNS查找)的主机或请求返还特定数据(例如,HTTP网页信息)的主机。任播地址与单播地址在格式上无任何差异,唯一的区别是一台设备可以给多台具有相同地址的设备发送报文。
11、IPv6无状态地址自动配置:
(1)无需使用诸如DHCP之类的辅助协议,主机即可获取IPv6前缀并自动生成接口ID。路由器发现功能是IPv6地址自动配置功能的基础,
(2)主要通过以下两种报文实现:
RA报文:每台路由器为了让二层网络上的主机和其它路由器知道自己的存在,定期以组播方式发送携带网络配置参数的RA报文。RA报文的Type字段值为134。
RS报文:主机接入网络后可以主动发送RS报文。RA报文是由路由器定期发送的,但是如果主机希望能够尽快收到RA报文,它可以立刻主动发送RS报文给路由器。网络上的路由器收到该RS报文后会立即向相应的主机单播回应RA报文,告知主机该网段的默认路由器和相关配置参数。RS报文的Type字段值为133。
网络节点向相连的路由器发送RS,请求地址前缀信息。 路由器通过发送路由器通告RA,回复地址前缀信息。
12、EUI-64规范——采用扩展唯一标识符(EUI-64)格式生成接口ID:
(1)就实用性而言,EUI-64格式是IPv6生成接口ID的最常用方式。IEEE EUI-64标准采用接口的MAC地址生成IPv6接口ID。MAC地址只有48位,而接口ID却要求64位。MAC地址的前24位代表厂商ID,后24位代表制造商分配的唯一扩展标识。
(2)MAC地址的第七高位是一个U/L位,值为0时表示MAC地址全局唯一,值为1时表示MAC地址本地唯一。
(3)在MAC地址向EUI-64格式的转换过程:在MAC地址的前24位和后24位之间插入了16比特的FFFE,并将U/L位的值从0变成了1,这样就生成了一个64比特的接口ID,且接口ID的值全局唯一。接口ID和接口前缀一起组成接口地址。
13、IPv6无状态地址DAD检查:
(1)当为接口配置IPv6地址时,DAD用来在本地链路范围内检测将要使用的IPv6地址是否唯一。
(2)设备在给接口分配IPv6单播地址之前会进行重复地址检测(DAD),确认是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。
(3)一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址,此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-nodes组播组和Solicited-node组播组。Solicited-node组播组由单播或任播地址的后24位加上地址前缀FF02:0:0:0:0:1:FF00::/104组成。
(4)IPv6重复地址检测技术和IPv4中的免费ARP类似:用于地址分配或主机连接网络时检测重复的IPv4主机地址。节点向一个自己将使用的试验地址所在的Solicited-node组播组发送一个以该试验地址为请求的目标地址的邻居请求(NS)报文,如果收到某个其它站点回应的邻居通告(NA)报文,就证明该地址已被网络上使用,节点将不能使用该试验地址进行通信。这种情况下,网络管理员需要手动为该节点分配另外一个地址。
二、IPv6路由基础
1、OSPFv3协议:是运行在IPv6网络的OSPF协议。
运行OSPFv3的路由器使用物理接口的链路本地单播地址为源地址来发送OSPF报文。相同链路上的路由器互相学习与之相连的其它路由器的链路本地地址,并在报文转发的过程中将这些地址当成下一跳信息使用, IPv6中使用组播地址ff02::5来表示AllSPFRouters,而OSPFv2中使用的是组播地址224.0.0.5。
需要注意的是,OSPFv3和OSPFv2版本互不兼容。
2、ff02::5是为OSPFv3路由协议预留的IPv6组播地址。 OSPFv3中的路由条目下一跳地址是链路本地地址。
3、DR & BDR的选举:
(1)Router ID在OSPFv3中必须手动配置。
(2)在NBMA和广播型网络中OSPFv3选举DR和BDR的过程与OSPFv2相似。
(3)IPv6使用组播地址FF02::6表示AllDRouters,而OSPFv2中使用的是组播地址224.0.0.6。
4、OSPFv2是基于网段运行的, OSPFv3的实现是基于链路的。
在配置OSPFv3时,不需要考虑路由器的接口是否配置在同一网段,只要路由器的接口连接在同一链路上,就可以不配置IPv6全局地址而直接建立联系。
5、OSPFv3认证:
OSPFv3协议本身不提供认证功能,而是通过使用IPv6提供的安全机制(IPv6的扩展头部:AH、ESP)来保证OSPFv3报文的合法性。
6、OSPFv3的配置命令总结:
*** ipv6 命令——用来使能路由器的IPv6功能。要在路由器上运行OSPFv3协议,首先必须使能IPv6功能。
*** ospfv3 +进程号 命令——用来创建并运行OSPFv3进程,process-id 取值范围是1~65535。如果不指定进程号,缺省使用进程号1。
*** router-id X.X.X.X 命令——用来设置运行OSPFv3协议的路由器ID号。
*** ipv6 enable 命令——用来在路由器接口上使能IPv6,使得接口能够接收和转发IPv6报文。接口的IPv6功能默认是去使能的。*** ipv6 address +链路本地地址 link-local 命令(例如:ipv6 address fe80::1 link-local)——用来手动为接口配置链路本地地址。
*** ospfv3 +进程号 area +区域号 命令——用来在接口上使能OSPFv3的进程,并指定所属区域。
*** display ospfv3 命令——可以验证OSPFv3配置及相关参数。
三、DHCPv6原理与配置
1、主机在运行IPv6时,可以通过使用无状态地址自动配置或DHCPv6协议来获取IPv6地址。
2、IPv6动态主机配置协议DHCPv6采用了客户端/服务器通信模式,是针对IPv6编址方案设计的、为主机分配IPv6地址和其他网络配置参数的协议。
3、DHCPv6能够为主机分配IPv6地址以及其他网络配置参数,并能够实现这些参数的集中管理。
4、IPv6的缺点:
(1)可管理性差:主机使用无状态地址自动配置方案来获取IPv6地址时,路由器并不记录主机的IPv6地址信息;
(2)可用性差:IPv6主机无法获取DNS服务器地址等网络配置信息;
5、DHCPv6属于一种有状态地址自动配置协议。在有状态地址配置过程中,DHCPv6服务器为主机分配一个完整的IPv6地址,并提供DNS服务器地址等其他配置信息。此外,DHCPv6服务器还可以对已经分配的IPv6地址和客户端进行集中管理。
6、DHCPv6服务器与客户端之间使用UDP协议来交互DHCPv6报文,客户端使用的UDP端口号是546,服务器使用的UDP端口号是547。
7、DHCPv6基本协议架构中,主要包括的角色有:客户端、服务器、中继;
(1)DHCPv6客户端:通过与DHCPv6服务器进行交互,获取IPv6地址/前缀和网络配置信息,完成自身的地址配置功能。
(2)DHCPv6中继:负责转发来自客户端方向或服务器方向的DHCPv6报文,协助DHCPv6客户端和DHCPv6服务器完成地址配置功能。只有当DHCPv6客户端和DHCPv6服务器不在同一链路范围内,或者DHCPv6客户端和DHCPv6服务器无法单播交互的情况下,才需要DHCPv6中继的参与。
(3)DHCPv6服务器:负责处理来自客户端或中继的地址分配、地址续租、地址释放等请求,为客户端分配IPv6地址/前缀和其他网络配置信息。
(4)客户端发送请求报文向DHCPv6服务器申请IPv6地址,目的地址为组播地址ff02::1:2 。ff02::1:2表示的是所有DHCPv6服务器和中继,这个地址是链路范围的。
8、DHCP设备唯一标识符DUID(DHCPv6 Unique Identifier)用来标识一台DHCPv6服务器或客户端。每个DHCPv6服务器或客户端有且只有一个DUID。
DUID采用以下两种方式生成:
(1)基于链路层地址(LL):即采用链路层地址方式来生成DUID。
(2)基于链路层地址与时间组合(LLT):即采用链路层地址和时间组合方式来生成DUID。
9、DHCPv6分配地址时又分为:
(1)DHCPv6有状态自动分配:DHCPv6服务器为客户端分配IPv6地址及其他网络配置参数(如DNS、NIS、SNTP服务器地址等)。
(2)DHCPv6无状态自动分配:主机的IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数(如DNS、NIS、SNTP服务器等)。
路由通告RA中的M和O为被置位为1。
在RA报文中包含管理地址配置标记(M)和有状态配置标记(O)。
当M=1时,启用DHCPv6有状态地址配置,即DHCPv6客户端需要从DHCPv6服务器获取IPv6地址;
当M=0时,启用IPv6无状态地址自动分配方案。
当O=1时,用来定义客户端需要通过有状态的DHCPv6来获取其它网络配置参数,如DNS、NIS、SNTP服务器地址等;
当O=0则启用IPv6无状态地址自动分配方案。
DHCPv6有状态自动分配:
DHCPv6四步交互地址分配过程如下:
*** DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IPv6地址和网络配置参数。
*** DHCPv6服务器回复Advertise报文,该报文中携带了为客户端分配的IPv6地址以及其它网络配置参数。
*** DHCPv6客户端如果接收到了多个服务器回复的Advertise报文,则会根据Advertise报文中的服务器优先级等参数来选择优先级最高的一台服务器,并向所有的服务器发送Request组播报文。
*** 被选定的DHCPv6服务器回复Reply报文,确认将IPv6地址和网络配置参数分配给客户端使用。
DHCPv6无状态自动分配:
DHCPv6无状态工作过程如下:
*** DHCPv6客户端以组播方式向DHCPv6服务器发送Information-Request报文,该报文中携带Option Request选项,用来指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。
*** DHCPv6服务器收到Information-Request报文后,为DHCPv6客户端分配网络配置参数,并单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。
*** DHCPv6客户端根据收到的Reply报文中提供的参数完成DHCPv6客户端无状态配置。
10、相关配置命令总结:
** dhcpv6 duid { ll | llt } 命令——可以用来指定DUID格式为DUID-LL或DUID-LLT。
** display dhcpv6 duid 命令——来验证当前使用的DUID格式以及DUID值。
** dhcpv6 pool +地址池名 命令——用来创建IPv6地址池或进入到IPv6地址池视图。
** address prefix +网络前缀+前缀长度 命令——用来在IPv6地址池视图下绑定IPv6地址前缀。
** excluded-address start-ipv6-address 命令——用来配置IPv6地址池中不参与自动分配的IPv6地址范围。
** dns-server ipv6-address 命令——用来配置DNS服务器的IPv6地址。
** dns-domain name +域名 命令——用来配置为DHCPv6客户端分配的域名后缀。
** dhcpv6 server +地址池名 命令——用来在接口下配置DHCPv6服务器功能;
** display dhcpv6 pool 命令——用来查看DHCPv6服务器上配置的地址池信息。