网工干货知识

网工技术详解
当前位置:首页 > 干货知识

IPv6核心知识

更新时间:2021年11月11日   作者:spoto   标签(Tag):

一、简介

IPv6(Internet Protocol Version 6)是网络层协议的第二代标准协议,也被称为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套规范,是IPv4(Internet Protocol Version 4)的升级版本。

IPv4协议是目前广泛部署的因特网协议。在因特网发展初期,IPv4以其协议简单、易于实现、互操作性好的优势而得到快速发展。但随着因特网的迅猛发展,IPv4设计的不足也日益明显,IPv6的出现,解决了IPv4的一些弊端。相比IPv4,IPv6具有如下优势:
1.更大的地址空间
2.扩展性更好的报文格式
3.内置支持自动配置地址
4.便于路由聚合
5.网络层的认证和加密
6.新增流标记,提供QoS保证。
7.更加支持移动网络。
 

二、IPv6原理描述

2.1 IPv6地址

2.1.1 IPv6地址的表示方法

IPv6地址总长度为128比特,通常分为8组,每组为4个十六进制数的形式,每组十六进制数间用冒号分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B,这是IPv6地址的首选格式。

为了书写方便,IPv6还提供了压缩格式,以上述IPv6地址为例,具体压缩规则为:
•每组中的前导“0”都可以省略,所以上述地址可写为:FC00:0:130F:0:0:9C0:876A:130B。
•地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替,所以上述地址又可以进一步简写为:FC00:0:130F::9C0:876A:130B。
需要注意的是,在一个IPv6地址中只能使用一次双冒号“::”,否则当计算机将压缩后的地址恢复成128位时,无法确定每个“::”代表0的个数。
 

2.1.2 IPv6地址的结构

一个IPv6地址可以分为如下两部分:
网络前缀:n比特,相当于IPv4地址中的网络ID
接口标识:128-n比特,相当于IPv4地址中的主机ID
接口标识可通过三种方法生成:手工配置、系统通过软件自动生成或IEEE EUI-64规范生成。其中,EUI-64规范自动生成最为常用。
IEEE EUI-64规范是将接口的MAC地址转换为IPv6接口标识的过程。如图1所示,MAC地址的前24位(用c表示的部分)为公司标识,后24位(用m表示的部分)为扩展标识符。从高位数,第7位是0表示了MAC地址本地唯一。转换的第一步将FFFE插入MAC地址的公司标识和扩展标识符之间,第二步将从高位数,第7位的0改为1表示此接口标识全球唯一。

 IPv6地址的结构


例如:MAC地址:000E-0C82-C4D4;转换后:020E:0CFF:FE82:C4D4。
这种由MAC地址产生IPv6地址接口标识的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时,只需要获取一个IPv6前缀就可以与接口标识形成IPv6地址。但是使用这种方式最大的缺点是任何人都可以通过二层MAC地址推算出三层IPv6地址。
 

2.1.3 IPv6的地址分类

IPv6地址分为单播地址、任播地址(Anycast Address)、组播地址三种类型。和IPv4相比,取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。
2.1.3.1 IPv6单播地址 IPv6单播地址标识了一个接口,由于每个接口属于一个节点,因此每个节点的任何接口上的单播地址都可以标识这个节点。发往单播地址的报文,由此地址标识的接口接收。
IPv6定义了多种单播地址,目前常用的单播地址有:未指定地址、环回地址、全球单播地址、链路本地地址、唯一本地地址ULA(Unique Local Address)。
1.未指定地址
IPv6中的未指定地址即 0:0:0:0:0:0:0:0/128 或者::/128。该地址可以表示某个接口或者节点还没有IP地址,可以作为某些报文的源IP地址(例如在NS报文的重复地址检测中会出现)。源IP地址是::的报文不会被路由设备转发。
2.环回地址
IPv6中的环回地址即 0:0:0:0:0:0:0:1/128 或者::1/128。环回与IPv4中的127.0.0.1作用相同,主要用于设备给自己发送报文。该地址通常用来作为一个虚接口的地址(如Loopback接口)。实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址。
3.全球单播地址
全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。
全球单播地址由全球路由前缀(Global routing prefix)、子网ID(Subnet ID)和接口标识(Interface ID)组成,其格式如图所示:

全球单播地址


Global routing prefix:全球路由前缀。由提供商(Provider)指定给一个组织机构,通常全球路由前缀至少为48位。目前已经分配的全球路由前缀的前3bit均为001。
Subnet ID:子网ID。组织机构可以用子网ID来构建本地网络(Site)。子网ID通常最多分配到第64位。子网ID和IPv4中的子网号作用相似。
Interface ID:接口标识。用来标识一个设备(Host)。
4.链路本地地址
链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀FE80::/10(最高10位值为1111111010),同时将接口标识添加在后面作为地址的低64比特。
当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址(其固定的前缀+EUI-64规则形成的接口标识)。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信。所以链路本地地址广泛应用于邻居发现,无状态地址配置等应用。
以链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。

链路本地地址


5. 唯一本地地址
唯一本地地址是另一种应用范围受限的地址,它仅能在一个站点内使用。由于本地站点地址的废除(RFC3879),唯一本地地址被用来代替本地站点地址。
唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。

唯一本地地址


Prefix:前缀;固定为FC00::/7。
L:L标志位;值为1代表该地址为在本地网络范围内使用的地址;值为0被保留,用于以后扩展。
Global ID:全球唯一前缀;通过伪随机方式产生。
Subnet ID:子网ID;划分子网使用。
Interface ID:接口标识。

2.1.3.2 IPv6组播地址:
IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如组播地址FF02::1表示链路本地范围的所有节点,组播地址FF02::2表示链路本地范围的所有路由器。
一个IPv6组播地址由前缀,标志(Flag)字段、范围(Scope)字段以及组播组ID(Global ID)4个部分组成:
•前缀:IPv6组播地址的前缀是FF00::/8。
•标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
•范围字段(Scope):长度4bit,用来限制组播数据流在网络中发送的范围,该字段取值和含义的对应关系如图5所示。
•组播组ID(Group ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0。这样每个组播组ID都映射到一个唯一的以太网组播MAC地址(RFC2464)。
 

2.1.3.3 被请求节点组播地址
被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。
IPv6中没有广播地址,也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中,这个功能通过邻居请求NS(Neighbor Solicitation)报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址时,会发送NS报文,该报文的目的IP就是需要解析的IPv6地址对应的被请求节点组播地址;只有具有该组播地址的节点会检查处理。
被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。

2.1.3.4 IPv6任播地址 任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
任播地址设计用来在给多个主机或者节点提供相同服务时提供冗余功能和负载分担功能。目前,任播地址的使用通过共享单播地址方式来完成。将一个单播地址分配给多个节点或者主机,这样在网络中如果存在多条该地址路由,当发送者发送以任播地址为目的IP的数据报文时,发送者无法控制哪台设备能够收到,这取决于整个网络中路由协议计算的结果。这种方式可以适用于一些无状态的应用,例如DNS等。
IPv6中没有为任播规定单独的地址空间,任播地址和单播地址使用相同的地址空间。目前IPv6中任播主要应用于移动IPv6。
 

2.2 ICMPv6

ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。
在IPv4中,Internet控制报文协议ICMP(Internet Control Message Protocol)向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。
ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58。ICMPv6的报文格式如图所示:

ICMPv6


报文中字段解释如下:
•Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。
•Code:表示此消息类型细分的类型。
•Checksum:表示ICMPv6报文的校验和。
 

2.2.1 ICMPv6错误报文的分类

ICMPv6错误报文用于报告在转发IPv6数据包过程中出现的错误。ICMPv6错误报文可以分为以下4种:
•目的不可达错误报文

在IPv6节点转发IPv6报文过程中,当设备发现目的地址不可达时,就会向发送报文的源节点发送ICMPv6目的不可达错误报文,同时报文中会携带引起该错误报文的具体原因。 目的不可达错误报文的Type字段值为1。根据错误具体原因又可以细分为:
■Code=0:没有到达目标设备的路由。
■Code=1:与目标设备的通信被管理策略禁止。
■Code=2:未指定。
■Code=3:目的IP地址不可达。
■Code=4:目的端口不可达。

•数据包过大错误报文
在IPv6节点转发IPv6报文过程中,发现报文超过出接口的链路MTU时,则向发送报文的源节点发送ICMPv6数据包过大错误报文,其中携带出接口的链路MTU值。数据包过大错误报文是Path MTU发现机制的基础。
数据包过大错误报文的Type字段值为2,Code字段值为0。
•时间超时错误报文
在IPv6报文收发过程中,当设备收到Hop Limit字段值等于0的数据包,或者当设备将Hop Limit字段值减为0时,会向发送报文的源节点发送ICMPv6超时错误报文。对于分段重组报文的操作,如果超过定时时间,也会产生一个ICMPv6超时报文。
时间超时错误报文的Type字段值为3,根据错误具体原因又可以细分为:
■Code=0:在传输中超越了跳数限制。
■Code=1:分片重组超时。
•参数错误报文
当目的节点收到一个IPv6报文时,会对报文进行有效性检查,如果发现问题会向报文的源节点回应一个ICMPv6参数错误差错报文。
参数错误报文的Type字段值为4,根据错误具体原因又可以细分为:
■Code=0:IPv6基本头或扩展头的某个字段有错误。
■Code=1:IPv6基本头或扩展头的NextHeader值不可识别。
■Code=2:扩展头中出现未知的选项。
 

2.2.2 ICMPv6信息报文的分类

ICMPv6信息报文提供诊断功能和附加的主机功能,比如多播侦听发现和邻居发现。常见的ICMPv6信息报文主要包括回送请求报文(Echo Request)和回送应答报文(Echo Reply),这两种报文也就是通常使用的Ping报文。
回送请求报文:回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。回送请求报文的Type字段值为128,Code字段的值为0。
回送应答报文:当收到一个回送请求报文时,ICMPv6会用回送应答报文响应。回送应答报文的Type字段的值为129,Code字段的值为0。
 

2.3 邻居发现NDP

邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。
 

2.3.1 地址解析

在IPv4中,当主机需要和目标主机通信时,必须先通过ARP协议获得目的主机的链路层地址。在IPv6中,同样需要从IP地址解析到链路层地址的功能。邻居发现协议实现了这个功能。
ARP报文是直接封装在以太网报文中,以太网协议类型为0x0806,普遍观点认为ARP定位为第2.5层的协议。ND本身基于ICMPv6实现,以太网协议类型为0x86DD,即IPv6报文,IPv6下一个报头字段值为58,表示ICMPv6报文,由于ND协议使用的所有报文均封装在ICMPv6报文中,一般来说,ND被看作第3层的协议。在三层完成地址解析,主要带来以下几个好处:
•地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
•可以使用三层的安全机制避免地址解析攻击。
•使用组播方式发送请求报文,减少了二层网络的性能压力。
地址解析过程中使用了两种ICMPv6报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA(Neighbor Advertisement)。
•NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
•NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。

地址解析


Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文,其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。
当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。
 

2.3.2 跟踪邻居状态

通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。 因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
RFC2461中定义了5种邻居状态,分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)。

跟踪邻居状态


下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。
1.A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
2.若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
3.经过邻居可达时间,邻居状态由Reachable变为Stale,即未知是否可达。
4.如果在Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
5.在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
6.在经过一段固定时间后,邻居状态由Delay变为Probe,其间若有NA应答,则邻居状态由Delay变为Reachable。
7.在Probe状态,A每隔一定时间间隔发送单播NS,发送固定次数后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。
 

2.3.3 重复地址检测

重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。 一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。

重复地址检测


Host A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址。Host A向FC00::1的Solicited-Node组播组发送一个以FC00::1为请求的目标地址的NS报文进行重复地址检测,由于FC00::1并未正式指定,所以NS报文的源地址为未指定地址。当Host B收到该NS报文后,有两种处理方法:
•如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会发送NA报文。
•如果Host B发现FC00::1是一个已经正常使用的地址,Host B会向FF02::1发送一个NA报文,该消息中会包含FC00::1。这样,Host A收到这个消息后就会发现自身的试验地址是重复的。Host A上该试验地址不生效,被标识为duplicated状态。
 

2.3.4 路由器发现

路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
•路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
•路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文的Type字段值为133。
 

路由器发现

 

2.3.5 地址自动配置

IPv4使用DHCP实现自动配置,包括IP地址,缺省网关等信息,简化了网络管理。IPv6地址增长为128位,且终端节点多,对于自动配置的要求更为迫切,除保留了DHCP作为有状态自动配置外,还增加了无状态自动配置。无状态自动配置即自动生成链路本地地址,主机根据RA报文的前缀信息,自动配置全球单播地址等,并获得其他相关信息。
IPv6主机无状态自动配置过程:
1.根据接口标识产生链路本地地址。
2.发出邻居请求,进行重复地址检测。
3.如地址冲突,则停止自动配置,需要手工配置。
4.如不冲突,链路本地地址生效,节点具备本地链路通信能力。
5.主机会发送RS报文(或接收到设备定期发送的RA报文)。
6.根据RA报文中的前缀信息和接口标识得到IPv6地址。
 

三、IPv6配置举例

3.1 配置IPv6基础功能示例

3.1.1 组网需求

如图所示,RouterA和RouterB分别通过GE1/0/0相连。要求RouterA和RouterB形成邻居关系,RouterB能通过邻居发现功能获得IPv6地址。
配置IPv6基础功能

3.1.2 配置思路

配置IPv6基础功能思路如下: 1.使能RouterA的IPv6转发能力并配置IPv6地址,使路由器具有对IPv6报文的转发能力。 2.打开RouterA的RA报文发送开关。RouterB的GE1/0/0接口在接收到RouterA发送的RA报文后可根据RA报文中携带的路由前缀等信息进行地址自动配置。
 

3.1.3 操作步骤

1.配置RouterA
# 配置RouterA的接口GE1/0/0的IPv6地址。
system-view
[Huawei] sysname RouterA
[RouterA] ipv6
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] ipv6 enable
[RouterA-GigabitEthernet1/0/0] ipv6 address fc01::1/64
[RouterA-GigabitEthernet1/0/0] quit
# 配置RouterA的邻居发现功能。
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] undo ipv6 nd ra halt
[RouterA-GigabitEthernet1/0/0] quit
[RouterA] quit

2.配置RouterB
# 配置RouterB的接口GE1/0/0使能无状态自动生成IPv6地址功能。
system-view
[Huawei] sysname RouterB
[RouterB] ipv6
[RouterB] interface gigabitethernet 1/0/0
[RouterB-GigabitEthernet1/0/0] ipv6 enable
[RouterB-GigabitEthernet1/0/0] ipv6 address auto link-local
[RouterB-GigabitEthernet1/0/0] ipv6 address auto global local-identifier
[RouterB-GigabitEthernet1/0/0] quit
[RouterB] quit

3.验证配置结果
如果配置成功,可以查看配置的全球单播地址,以及接口状态为Up,IPv6协议状态为Up,并可以查看接口的邻居情况。
 

 马上抢免费试听资格
意向课程: *必选
姓名: *必填
联系方式: *必填
QQ:
思博SPOTO在线咨询

上一篇:IS-IS核心知识

下一篇:广域网PPP协议

相关资讯

7天无条件退款
24小时实验室开放
全程跟踪服务
无条件免费重读

如在过程中遇到任何问题
欢迎在此填写反馈意见

思博网络SPOTO官方公众号

官方公众号

思博网络SPOTO新活动