1.IPv6基础描述
1.1 IPv6特点
- 地址空间**:**IPv6地址采用128比特标识。128位的地址结构使IPv6理论上可以拥有(43亿×43亿×43亿×43亿)个地址。近乎无限的地址空间是IPv6的最大优势。
- 报文结构**:**IPv6使用了新的协议头格式,也就是说IPv6数据包有全新的报文头,而并不是仅仅简单地将IPv4报文头中的地址部分增加到128bits而已。在IPv6中,报文头包括固定头部和扩展头部,一些非根本性的和可选择的字段被移到了IPv6协议头之后的扩展协议头中。这使得网络中的中间路由器在处理IPv6协议头时,有更高的效率。
- 实现自动配置和重新编址**:**IPv6协议内置支持通过地址自动配置方式使主机自动发现网络并获取IPv6地址,大大提高了内部网络的可管理性。
- 支持层次化网络结构:巨大的地址空间使得IPv6可以方便的进行层次化网络部署。层次化的网络结构可以方便的进行路由聚合,提高了路由转发效率。
- 支持端对端安全**:**IPv6中,网络层支持IPSec的认证和加密,支持端到端的安全。
- 更好的支持QoS**:**IPv6在包头中新定义了一个叫做流标签的特殊字段。IPv6的流标签字段使得网络中的路由器可以对属于一个流的数据包进行识别并提供特殊处理。用这个标签,路由器可以不打开传送的内层数据包就可以识别流,这就使得即使数据包有效载荷已经进行了加密,仍然可以实现对QoS的支持。
- 支持移动特性**:**由于采用了Routing header和Destinationoption header等扩展报头,使得IPv6提供了内置的移动性。
IPv4怎么了? - IPv4公网地址耗尽。这应该是当前IPv6替代IPv4的最大原动力。 - Internet用户快速增长,随着科技行业的发展,有更多的用户、更多种类的设备接入公网。 - IPv4缺乏真正的端到端通信模型。NAT确实能解决私有地址空间与公网互访的问题,但是却破坏了端到端通信的完整性。 - IPv4无法适应新技术的发展,如物联网等。所有行业都是IPv6的潜在客户。 - 广播机制的存在,对ARP的依赖等,使得IPv4局域网的相关运作问题频发。 - IPv4对移动性的支持不够理想。 |
---|
1.2 IP地址表示法
- 需要注意的是,在一个IPv6地址中只能使用一次双冒号“::”,否则当计算机将压缩后的地址恢复成128位时,无法确定每段中0的个数。
1.3 IPv6地址结构
- 补充说明:
- 网络前缀地址是由IANA分配的;
- 系统通过软件自动生成的配置方法,也称为无状态自动配置;
对于IPv6单播地址来说,如果地址的前三bit不是000,则接口标识必须为64位,如果地址的前三位是000,则没有此限制。
IEEE EUI-64规范接口ID的典型长度是64bits,IEEE EUI-64规范给出了一个由IEEE 48bits MAC地址自动生成64bits Interface ID的方法。MAC地址格式中c bit表示厂商ID,d bit表示厂商编号ID,“0”bit代表全局/本地位,1表示全球有效。g表示其是表示单个主机还是某个组。具体的转换算法为:将上述的0转换为1,在c和d之间插入两个字节:FFFE,结果为IPv6接口ID。
- 这种由MAC地址产生IPv6地址接口ID的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时(后面会介绍),只需要获取一个IPv6前缀就可以与接口ID形成IPv6地址。
使用这种方式最大的缺点就是某些恶意者可以通过二层MAC推算出三层IPv6地址。
EUI-64反转原因
1.4 IPv6地址分类
- IPv4地址分为:单播地址、组播地址、广播地址。而IPv6中没有广播地址,增加了任播地址。也就是说IPv6地址被分为:单播地址、组播地址、任播地址。
- IPv4中,使用广播做地址的解析,而在IPv6中,使用组播;
- 需要记住的是:被请求节点组播地址和链路本地地址;
- 未指定地址
- 使用在IPv6的DHCP请求报文中,与IPv4的DHCP类似;
- 链路本地地址
- IPv4中也有类似链路本地地址的地址,在windows主机没有获取IP地址之前,会自动分配一个169.254.0.0/16的地址,该地址是可以和链路上的其它主机进行通信的;
- 全球单播地址
- 2001::/16现在部署IPv6基本都是用这个地址,而2002::/16一般是从IPv4过渡到IPv6时使用的;
- 本地站点地址
- 类似于IPv4的私有地址,但是现在已经不使用了,取而代之的是唯一本地地址;
- 被请求节点组播地址的前**104位是需要记住的,即FF02::1:FF/104**
- 单播地址用于标识一个接口,发往该目的地址的报文会被送到被标识的接口;
- 组播地址用于标识多个接口,发往该目的地址的报文会被送到被标识的所有接口;
- 任播地址用于标识多个接口,发往该目的地址的报文会被送到被标识的所有接口中最近的一个接口上。实际上任播地址与单播地址使用同一个地址空间,也就是说,由路由器决定数据包是做任播转发还是单播转发。
1.4.1 全球单播地址
- 全球单播地址是带有全球单播前缀的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)。
1.4.2 链路本地地址
- 当在一个接口配置一个全球单播地址时,也会自动生成一个Link-local地址,当然,Link-local地址其实也是可以手工配置的;
- 链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀FE80::/10(最高10位值为1111111010),同时将接口标识添加在后面作为地址的低64比特。
- 当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址(其固定的前缀+EUI-64规则形成的接口标识)。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信。所以链路本地地址广泛应用于邻居发现,无状态地址配置等应用。
- 以链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。
1.4.3 唯一本地地址
- 类似于IPv4中的私网地址
- 唯一本地地址前缀FC00::/7
- 因为IPv6要实现端到端的特性,导致此地址没有实施的可能性
1.4.4 其它单播地址
未指定地址**
- IPv6中的未指定地址即0:0:0:0:0:0:0:0/128 或者::/128。该地址可以表示某个接口或者节点还没有IP地址,可以作为某些报文的源IP地址(例如在NS报文的重复地址检测中会出现,参考2.2.2)。源IP地址是::的报文不会被路由设备转发。
环回地址
- IPv6中的环回地址即0:0:0:0:0:0:0:1/128 或者::1/128。环回与IPv4中的127.0.0.1作用相同,主要用于设备给自己发送报文。该地址通常用来作为一个虚接口的地址(如Loopback接口)。实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址
1.4.5 组播地址
- IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。
- 一个IPv6组播地址由前缀,标志(Flag)字段、范围(Scope)字段以及组播组ID(Global ID)4个部分组成:
- 前缀:IPv6组播地址的前缀是FF00::/8(1111 1111)。
- 标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
- 范围字段(Scop):长度4bit,用来限制组播数据流在网络中发送的范围。
- 组播组ID(Global ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0。
1.4.6 预定义组播地址
- 即节点本地地址和链路本地地址
1.4.7 任播地址
- 这是IPv6特有的地址类型,它用来标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。适合于“One-to-One-of-Many”(一对组中的一个)的通讯场合。接收方只需要是一组接口中的一个即可,如移动用户上网就需要因地理位置的不同,而接入离用户最近的一个接收站,这样才可以使移动用户在地理位置上不受太多的限制。
- 任播地址从单播地址空间中进行分配,使用单播地址的任何格式。因而,从语法上,任播地址与单播地址没有区别。被分配具有任播地址的节点必须得到明确的配置,从而知道它是一个任播地址。目前,任播地址仅被用做目标地址,且仅分配给路由器。
- 在RFC3513中定义了子网路由器任播地址(Subnet-Routeranycast Address),其接口ID为全0。
- 发往该任播地址的报文会被发送到任播地址所代表子网(子网路由器任播地址的前缀)内的某一台路由器,该路由器是离得最“近”的一台。所谓最近一般是路由的概念。
1.4.8 请求节点组播地址
1.4.9 IPv6组播MAC地址映射
例:IPV6地址为—FF12::1234:5678/64
对应的组播MAC地址为—3333:1234:5678
0x3333为固定前缀
例:所有节点的组播地址:FF02::0001
对应的组播MAC地址:3333:0000:0001
1.5 IPv6报文格式
1.5.1 基本报头
- IPv6数据包由一个IPv6报头、多个扩展报头和一个上层协议数据单元组成。
- IPv6基本报头(IPv6 Header)
- 每一个IPv6数据包都必须包含报头,其长度固定为40bytes。
- 基本报头提供报文转发的基本信息,会被转发路径上面的所有路由器解析。
- 在IPv4中,中间节点发现报文超过MTU大小,也会进行分片,但是IPv6只在源进行分片,目的端进行重组;
- 扩展报头(Extension Headers)
- IPv6扩展报头是可能跟在基本IPv6报头后面的可选报头。IPv6数据包中可以包含一个或多个扩展报头,当然也可以没有扩展报头,这些扩展报头可以具有不同的长度。IPv6报头和扩展报头代替了IPv4报头及其选项。新的扩展报头格式增强了IPv6的功能,使其具有极大的扩展性。与IPv4报头中的选项不同,IPv6扩展报头没有最大长度的限制,因此可以容纳IPv6通信所需要的所有扩展数据。
- 扩展报头提供报文转发的扩展信息,并不会被路径上所有的路由器解析,一般只会被目的路由器解析处理。
上层协议数据单元(Upper Layer Protocol Data Unit)
- 上层协议数据单元一般由上层协议包头和它的有效载荷构成,有效载荷可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。
IPv6报头格式中主要字段解释如下:Version:版本号,长度为4bit。对于IPv6,该值为6。
- Traffic Class:流类别,长度为8bit。等同于IPv4中的TOS字段,表示IPv6数据报的类或优先级,主要应用于QoS。
- Flow Label:流标签,长度为20bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。
- Payload Length:有效载荷长度,长度为16bit。有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)。该字段只能表示最大长度为65535字节的有效载荷。如果有效载荷的长度超过这个值,该字段会置0,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示。
- Next Header:下一个报头,长度为8bit。该字段定义紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型,或者上层协议数据单元中的协议类型。
- Hop Limit:跳数限制,长度为8bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据报所能经过的最大跳数。每经过一个路由器,该数值减去1,当该字段的值为0时,数据报将被丢弃。
- Source Address:源地址,长度为128bit。表示发送方的地址。
- Destination Address:目的地址,长度为128bit。表示接收方的地址。
1.5.2 拓展报头
扩展报头提供报文的扩展信息,并不会被路径上所有的路由器解析,一般只会被目的路由器解析处理。
IPv6扩展报头在IPv4中,IPv4报头包含可选字段Options,内容涉及security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些Options的IPv4报文会占用路由器很大的资源,因此实际中也很少使用。
- IPv6将这些Options从IPv6基本报头中剥离,放到了扩展报头中,扩展报头被置于IPv6报头和上层协议数据单元之间。一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节限制,这样便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展报头总是8字节长度的整数倍。
当使用多个扩展报头时,前面报头的Next Header字段指明下一个扩展报头的类型,这样就形成了链状的报头列表。
IPv6扩展报头字段解释Next Header:下一个报头,长度为8bit。与基本报头的Next Header的作用相同。指明下一个扩展报头(如果存在)或上层协议的类型。
- Extension Header Len:报头扩展长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)。
- Extension Head Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合。
1.5.3 拓展报头种类
- 除了目的选项扩展报头可能出现一次或两次(一次在路由扩展报头之前,另一次在上层协议数据报文之前),其余扩展报头只能出现一次。
1.5.4 拓展报头规约
1.5.5 逐跳选项头
1.5.6 路由报头
- 路由报头和目的选项报头是成对出现的,为的就是实现上面的这种功能。(因为我们说一般目的结点才会出现扩展报头,为了实现路由报头的功能,需要每一跳路由器都进行处理,这时就可以使用目的选项报头来指定了。)
1.5.7 分段报头
1.5.8 目的选项报头
1.5.9 认证报头和封装安全净载报头
- 认证报头只是增加了认证功能,但是上层的数据,比如封装的是OSPFv3的数据,是以明文传输,没有加密码的;
- 但是封装安全净载报头则是经过加密的,此时OSPFv3的数据报文都是以密文的形式传输的;
2.IPv6基本实现
2.1 ICMPv6
- 用于传递报文转发中产生的信息或者错误;
- ICMPv6定义的报文被广泛地应用在其它协议中,包括:邻居发现(Neighbor Discorvery)、PathMTU发现机制等。
2.1.1 报文格式
**
- ICMPv6是IPv6的基础协议之一。
- 在IPv4中,Internet控制报文协议ICMP向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。
- ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58。
- 报文解释:
- Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。
- Code:表示此消息类型细分的类型。
- Checksum:表示ICMPv6报文的校验和。
2.1.2 差错报文
- 差错报文类型:type类型0-127;
目的不可达错误报文(Type1)**
当数据包无法被转发到目标节点或上层协议时,路由器或目标节点发送ICMPv6目标不可达差错报文。在目标不可达报文中,类型(Type)字段值为1,代码(Code)字段值为0-4,每一个代码值都定义了具体含义(RFC2463):
- 0:没有到达目标的路由
- 1:与目标的通信被管理策略禁止
- 2:未指定
- 3:地址不可达
- 4:端口不可达
数据包过大错误报文(Type2)如果由于出口链路的MTU小于IPv6数据包的长度而导致数据包无法转发,路由器就会发送数据包超长报文。该报文被用于IPv6路径MTU发现的处理。数据包超长报文的类型字段值为2,代码字段值为0。
时间超时错误报文(Type3)当路由器收到一个IPv6报头中的跳限制(Hop Limit)字段值为0的数据包时,会丢弃该数据包并向源发送ICMPv6超时报文。在超时报文中,类型字段的值为3,代码字段的值为0或1:
- 0:在传输中超越了跳限制
- 1:分片重组超时
参数错误报文(Type4)当IPv6报头或者扩展报头出现错误,导致数据包不能进一步处理时,IPv6节点会丢弃该数据包并向源发送此报文,指明问题的位置和类型。参数问题报文中,类型字段值为4,代码字段值为0~2,32位指针字段指出错误发生的位置。其中代码字段是这样定义的:
- 0:遇到错误的报头字段
- 1:遇到无法识别的下一个报头(Next Header)类型
- 2:遇到无法识别的IPv6选项
2.1.3 信息报文
- 信息报文分类:type类型128-255;
回送请求报文(Type:128,Code:0)**
回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。回送请求报文的类型字段值为128,代码字段的值为0。标志符(Identifier)和序列号(Sequence Number)字段由发送方主机设置,用于将即将收到的回送应答报文与发送的回送请求的报文进行匹配。
回送应答报文(Type:129,Code:0)当收到一个回送请求报文时,ICMPv6会用回送应答报文响应。回送应答报文的类型字段的值为129,代码字段的值为0。标志符(Identifier)和序列号(Sequence Number)字段的值被指为与回送请求报文中的相应字段一样的值。
2.1.4 ICMPv6协议其它用途报文类型
2.2 邻居发现(NDP)
2.2.1 邻居发现NDP概述
2.2.2 地址解析
- 报文格式
- 目的地址与IP层面封装的源目IP地址是不一样的。
**
- 无论是NS报文还是NA报文,Options字段携带的都是本端的链路层地址(MAC地址),而Target Address,无论是哪一端,携带的都是需要请求的那一端的IPv6地址;
**
- 地址解析过程
- 假如有另一台主机C,它的IPv6地址的后24位与B的一样,这意味着它们加入的请求节点组播组地址是一样的,所以两台主机都会收到A发送的NS报文,但最后只有B会回复,因为在ICMPv6的Target Address中明确指明了请求的是主机B的MAC地址;
IPv6地址解析是在三层完成地址解析**,主要带来以下几个好处:
- 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
- 可以使用三层的安全机制(例如IPSec)避免地址解析攻击。
- 使用组播方式发送请求报文,减少了二层网络的性能压力。
地址解析过程中使用了两种ICMPv6报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA(Neighbor Adivertisment):
- NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
- NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。
地址解析过程PC1在向PC2发送报文之前它必须要解析出PC2的链路层地址,所以首先PC1会发送一个NS报文,其中源地址为PC1的IPv6地址,目的地址为PC2的被请求节点组播地址(该地址由前缀FF02::1:FF00:0/104和单播地址的最后24bits 组成,受限于本地链路,该地址叫做Solicited-Node)(在这里的话,最后的24bits显然是PC2的IPv6地址的最后24bits了),需要解析的目标IP为PC2的IPv6地址,这就表示PC1想要知道PC2的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了PC1的链路层地址。
- 当PC2接收到了NS报文之后,就会回应NA报文,其中源地址为PC2的IPv6地址,目的地址为PC1的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),PC2的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。
2.2.3 重复地址检测
- 上面图示发送的NA报文,Destination应该也是FF02::1:FF00:1;
- 发送NS报文后,如果1s后没有收到NA报文回复,就会发送NA报文(此时S位为0),但实际上在华为设备的实现中并不会这样做,这也是没有问题的;
- 注意NS报文使用的源地址为未指定地址;
- 此时的NS报文并没有Options选项:
- 其它的则和地址解析中的类似;
- 在进行DAD检测时,一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向一个自己将使用的试验地址所在的Solicited-Node组播组发送一个以该试验地址为请求的目标地址的NS报文,如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。
DAD检测过程PC1的IPv6地址2000::1为新配置地址,即2000::1为PC1的试验地址。PC1向2000::1的Solicited-Node组播组发送一个以2000::1为请求的目标地址的NS报文进行重复地址检测,由于2000::1并未正式指定,所以NS报文的源地址为未指定地址。当PC2收到该NS报文后,有两种处理方法:
- 如果PC2发现2000::1是自身的一个试验地址,则PC2放弃使用这个地址作为接口地址,并且不会发送NA报文。
- 如果PC2发现2000::1是一个已经正常使用的地址,那么PC2会向该地址的ALL-NODES组播组发送一个NA报文,该消息中会包含2000::1。这样,PC1收到这个消息后就会发现自身的试验地址是重复的,从而弃用该地址。
补充1:IPv6地址生命周期
- 上面的原理对于自动获取的IPv6地址才有效。
2.2.4 跟踪邻居状态
- 做实验第4点是比较难实现的,因为在华为设备中,是不可以更改接口的MAC地址的;
2.2.4 路由发现
- RA报文Options域中的prefix字段非常重要;
在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
- 路由器通告RA(Router Advertisement)报文:每台路由器为了让二层网络上的主机和路由器知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
- 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,那么此时主机可以立刻发送RS报文,网络上的路由器将回应RA报文。RS报文的Tpye字段值为133。
地址自动配置IPv6主机无状态自动配置过程:
- 根据接口标识产生链路本地地址。
- 发出邻居请求,进行重复地址检测。
- 如地址冲突,则停止自动配置,需要手工配置。
- 如不冲突,链路本地地址生效,节点具备本地链路通信能力。
- 主机会发送RS报文(或接收到路由器定期发送的RA报文)。
- 根据RA报文中的前缀信息和通过EUI-64规范生成的接口标识得到IPv6地址。
2.2.5 重定向
- 在华为设备上,路由器收到重定向报文是不会进行处理的,所以需要使用主机;
- 另外,在模拟器上,路由器也不会发送重定向报文,可能是基于安全问题考虑;
- R1告诉PC1,去往Destination Address(PC2),应该把数据报文交给Target Address(R2的链路本地地址),其中的Options选项还携带了Target Address的链路层地址,这样PC1就可以直接与R2进行通信了。
当网关路由器发现报文从其它网关路由器转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关路由器。重定向报文也承载在ICMPv6报文中,其Type字段值为137,报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。
重定向过程PC1需要和PC2通信,PC1的默认网关路由器是R1,那么当PC1发送报文给PC2时报文会被送到R1。R1接收到PC1发送的报文以后会发现实际上PC1直接发送给R2更好,它将发送一个重定向报文给PC1,其中报文中更好的路径下一跳地址为R2,Destination Address为PC2(该部分为ICMPv6重定向报文携带的目的地址)。PC1接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往PC2的报文就直接发送给R2。
- 当路由器收到一个报文后,只有在如下情况下,路由器会向报文发送者发送重定向报文:
- 报文的目的地址不是一个组播地址。
- 报文并非通过路由转发给路由器。
- 经过路由计算后,路由的下一跳出接口是接收报文的接口。
- 路由器发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
- 路由器检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。
2.2.6 无状态自动配置
- 无状态自动配置概述
- RS报文
RA报文
- IP部分的TTL一定是255,否则不是本链路上发出的,将不会进行处理。
所以PC执行的是有状态自动配置还是无状态自动配置是由路由器决定的。
补充1:在华为设备上配置取消IPv6的RA报文抑制功能
- 默认情况下,华为设备的接口RA报文发送功能是关闭的,这也是出于安全考虑,如果需要实现无状态自动配置,则需要关闭抑制功能;
- 在接口上使用命令undo ipv6 nd ra halt就可以取消抑制;
补充2:RA数据报文
- 更正:蓝色框的字忽略,这种情况应该是指RS报文的;
- 上面可以看到lifetime时间,实际上该时间是不会超时的,因为RA报文是周期发送的;
- 拿到前缀后,对于PC主机来说,接口ID是通过特定的算法生成的,而不是通过EUI-64生成的,这样做的目的是为了隐私问题,否则会把主机的MAC地址暴露出去(如果需要做该实验,可以使用eNSP桥接真机PC);
- 而对于路由器,则是通过EUI-64生成接口ID的(在接口配置ipv6 address auto global default,如果没有default,是没有缺省路由的,这样也不能正常访问其它网络,加上default参数后,就可以自动在本路由器上生成一个指向发出RA报文的源Link-local地址的缺省路由);
- 下面的抓包是在路由器上做无状态自动配置的情况:
- 注意上面看到的RA报文都是周期发送的,而不是响应R2的RS报文,原因是先在R2上做了配置,再在R1上做undo的配置,所以下面的RA报文的目的地址还是组播地址,而不是单播地址(不过似乎只能是接PC的时候才可以实现这种效果,只在路由器之间做看不到这样的效果);
2.2.7 前缀重新编制
- IPv6地址生命周期与重新编制思路
- 前面知道,在使用地状态自动编址时,都会携带Valid Lifetime和Preferred lifetime两个时间;
- 可以考虑一种情况,需要进行地址迁移,但又不能中断当前的业务量;
- 因为在Preferred lifetime时间内,即可以发起连接,又可以接受连接,而在Deprecated时间内,只能接受连接,不能主动发起连接;
- 因为路由器的RA报文会定时发送,从而刷新这几个时间值,所以可以采取一种思路,在路由器的接口上再配置一个新的IPv6地址(即网络需要迁移到这个新的IPv6地址的前缀上);
- 然后设置发送该前缀信息的RA报文的Valid lifetime和Prefered lifetime一样,或者不用配置,同时,设置旧的IPv6地址发送RA报文的Preferred lifetime为0,这样的话,Valid lifetime的值其实就是全为Deprecated的值(注意设置的时间参数第一个为Valid lifetime,第二个为Preferred lifetime);
- 这样的话,在主机上,旧的前缀只能用来接受连接,而发起新连接就必须使用新的前缀;
- 一段时间后,旧的前缀的连接都不存在,这时就实现了地址的迁移,这也是IPv6的强大之处的一个表现;
- 原理描述与操作
2.2.8 有状态自动配置DHCPv6
- 在DHCP中,第一个报文和第三个报文使用广播,但在IPv6中,因为没有广播,所以第一个报文和第三个报文使用组播,其他的报文也是使用单播;
在接口上需要配置:
ipv6 enable
ipv6 address 2023::2/64
undo ipv6 nd ra halt
ipv6 nd autoconfig managed-address-flag
ipv6 nd autoconfig other-flag
dhcpv6 server pool1
可以看到,使用有状态自动配置需要设置M位和O位;
2.3 Path MTU
- 在IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行。
- PMTU协议是通过ICMPv6的Packet Too Big报文来完成的。首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值继续发送报文。如此反复,直到报文到达目的地之后,源节点就能知道到达目的地的PMTU了。
Path MTU工作过程
整条传输路径需要通过4条链路,每条链路的MTU分别是1500、1500、1400、1300,当源节点发送一个分片报文的时候,首先按照PMTU为1500进行分片并发送分片报文,当到达MTU为1400的出接口时,路由器返回Packet Too Big错误,同时携带MTU值为1400的信息。源节点接收到之后会将报文重新按照PMTU为1400进行分片并再次发送一个分片报文,当分片报文到达MTU值为1300的出接口时,同样返回Packet Too Big错误,携带MTU值为1300的信息。之后源节点重新按照PMTU为1300进行分片并发送分片报文,最终到达目的地,这样就找到了该路径的PMTU。
补充1:PathMTU大小及探测时间
- 在华为设备上,每10分钟会进行一次PathMTU的探测;
- 可以查看去往不同目的地的PathMTU
补充2:ping数据包的大小
- 因为ping数据包有IPv6报头和ICMPv6报头,所以对于MTU1500,应该设置ping的数据部分大小为1452字节;
3.IPv6过渡技术
3.1 过渡技术概述
3.2 双栈协议
- 双栈技术是IPv4向IPv6过渡的一种有效的技术。网络中的节点同时支持IPv4和IPv6协议栈,源节点根据目的节点的不同选用不同的协议栈,而网络设备根据报文的协议类型选择不同的协议栈进行处理和转发。双栈可以在一个单一的设备上实现,也可以是一个双栈骨干网。对于双栈骨干网,其中的所有设备必须同时支持IPv4/IPv6协议栈,连接双栈网络的接口必须同时配置IPv4地址和IPv6地址。
拓扑描述
- 主机向DNS服务器发送DNS请求报文,请求域名www.huawei.com对应的IP地址。DNS服务器将回复该域名对应的IP地址。如图所示,该IP地址可能是10.1.1.1或3ffe:yyyy::1。主机系统发送A类查询,则向DNS服务器请求对应的IPv4地址;系统发送AAAA查询,则向DNS服务器请求对应的IPv6地址。
- 图中R1支持双协议栈功能。如果主机访问IPv4地址为10.1.1.1的网络服务器,则可以通过R1的IPv4协议栈访问目标节点。如果主机访问IPv6地址为3ffe:yyyy::1的网络服务器,则可以通过R1的IPv6协议栈访问目标节点。(即R1左边的接口要同时配置IPv4和IPv6两种地址类型)
3.3 IPv6 over IPv4隧道
3.3.1 概述
- 在过渡初期,IPv4网络已经大量部署,而IPv6网络只是散落在各地的一个个“孤岛”,IPv6 over IPv4隧道就是通过隧道技术,使IPv6报文在IPv4网络中传输,实现IPv6网络之间的孤岛互连。
原理描述
- 边界路由设备启动IPv4/IPv6双协议栈,并配置IPv6 over IPv4隧道。
- 边界路由设备在收到从IPv6网络侧发来的报文后,如果报文的目的地址不是自身且下一跳出接口为Tunnel接口,就要把收到的IPv6报文作为数据部分,加上IPv4报文头,封装成IPv4报文。
- 在IPv4网络中,封装后的报文被传递到对端的边界路由设备。
- 对端边界路由设备对报文解封装,去掉IPv4报文头,然后将解封装后的IPv6报文发送到IPv6网络中。
- IPv6 over IPv4隧道的起点的IPv4地址必须为手工配置,而终点的确定有手工配置和自动获取两种方式。根据隧道终点的IPv4地址的获取方式不同可以将IPv6 over IPv4隧道分为手动隧道和自动隧道。
- 手动隧道:手动隧道即边界设备不能自动获得隧道终点的IPv4地址,需要手工配置隧道终点的IPv4地址,报文才能正确发送至隧道终点。
- 自动隧道:自动隧道即边界设备可以自动获得隧道终点的IPv4地址,所以不需要手工配置终点的IPv4地址,一般的做法是隧道的两个接口的IPv6地址采用内嵌IPv4地址的特殊IPv6地址形式,这样路由设备可以从IPv6报文中的目的IPv6地址中提取出IPv4地址。
3.3.2 手动隧道
- 如果一个边界设备要与多个设备建立手动隧道,就需要在设备上配置多个隧道,配置比较麻烦,所以手动隧道通常用于两个边界路由器之间,为两个IPv6网络提供链接。
手动隧道优缺点:
- 优点:可以用于配置任何IPv6穿越IPv4的环境,通用性好,可以运行IGP协议。
- 缺点:必须手工配置。
转发机制
IPv6 over IPv4手动隧道转发机制为:当隧道边界设备的IPv6侧收到一个IPv6报文后, 根据IPv6报文的目的地址查找IPv6路由转发表,如果该报文是从此虚拟隧道接口转发出去,则根据隧道接口配置的隧道源端和目的端的IPv4地址进行封装。封装后的报文变成一个IPv4报文,交给IPv4协议栈处理。报文通过IPv4网络转发到隧道的终点。隧道终点收到一个隧道协议报文后,进行隧道解封装。并将解封装后的报文交给IPv6协议栈处理。
实验记录:IPv6 over IPv4手动隧道
在AR1和AR3上配置IPv6 over IPv4手工隧道
[AR1]interface Tunnel 0/0/100
[AR1-Tunnel0/0/100]tunnel-protocol ipv6-ipv4
[AR1-Tunnel0/0/100]source LoopBack 0
[AR1-Tunnel0/0/100]destination 10.1.3.3
[AR1-Tunnel0/0/100]ipv6 enable
[AR1-Tunnel0/0/100]ipv6 add 2013::1/64
[AR3]interface Tunnel 0/0/100
[AR3-Tunnel0/0/100]tunnel-protocol ipv6-ipv4
[AR3-Tunnel0/0/100]source 10.1.3.3
[AR3-Tunnel0/0/100]destination 10.1.1.1
[AR3-Tunnel0/0/100]ipv6 enable
[AR3-Tunnel0/0/100]ipv6 add 2013::3/64
配置完成后即可使用ping测试连通性
配置OSPFv3 ``` [AR6]ospfv3 1 [AR6-ospfv3-1]router-id 6.6.6.6
[AR6]int s1/0/0 [AR6-Serial1/0/0]ospfv3 1 a 0 [AR6-Serial1/0/0]int l0 [AR6-LoopBack0]ospfv3 1 a 0
[AR1]ospfv3 1 [AR1-ospfv3-1]router-id 1.1.1.1 [AR1-ospfv3-1]int s1/0/0 [AR1-Serial1/0/0]ospfv3 1 a 0 [AR1]int Tunnel 0/0/100 [AR1-Tunnel0/0/100]ospfv3 1 a 0
[AR3]ospfv3 1 [AR3-ospfv3-1]router-id 3.3.3.3 [AR3]int g0/0/1 [AR3-GigabitEthernet0/0/1]ospfv3 1 a 0 [AR3]int Tunnel 0/0/100 [AR3-Tunnel0/0/100]ospfv3 1 a 0
[AR5]ospfv3 1 [AR5-ospfv3-1]router-id 5.5.5.5 [AR5-ospfv3-1]int g0/0/1 [AR5-GigabitEthernet0/0/1]ospfv3 1 a 0 [AR5-GigabitEthernet0/0/1]int l0 [AR5-LoopBack0]ospfv3 1 a 0
- 配置完成后即可测试连通性
数据包结构<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612949606202-7b964dc1-b5ef-49d1-a0c4-dde74c3bf000.png#align=left&display=inline&height=407&margin=%5Bobject%20Object%5D&name=image.png&originHeight=407&originWidth=816&size=26444&status=done&style=none&width=816)
<a name="5Vmcq"></a>
### 3.3.3 GRE隧道
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612949689879-a4355683-ff72-4374-b4ce-dbd326d88c12.png#align=left&display=inline&height=352&margin=%5Bobject%20Object%5D&name=image.png&originHeight=352&originWidth=659&size=70323&status=done&style=none&width=659)
- IPv6 over IPv4 GRE隧道使用标准的GRE隧道技术提供了点到点连接服务,需要手工指定隧道的端点地址。**GRE隧道本身并不限制被封装的协议和传输协议,一个GRE隧道中被封装的协议可以是协议中允许的任意协议(可以是IPv4、IPv6、OSI、MPLS等)**。
- IPv6 over IPv4 GRE隧道在边界路由器上的传输机制和IPv6 over IPv4手动隧道相同。
- 实验记录:IPv6 over IPv4 GRE隧道
- 在前面一个实验的基础上,只需要将Tunnel-Protocol改为GRE就可以了。
- 数据包结构
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612949812874-e6dc3682-9097-40da-b313-1e3804774e1e.png#align=left&display=inline&height=132&margin=%5Bobject%20Object%5D&name=image.png&originHeight=132&originWidth=821&size=11990&status=done&style=none&width=821)
<a name="yHZbl"></a>
### 3.3.4 IPv4兼容IPv6
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612949865435-c170d07d-80fc-4c32-96d1-dd5df865b126.png#align=left&display=inline&height=335&margin=%5Bobject%20Object%5D&name=image.png&originHeight=335&originWidth=626&size=60409&status=done&style=none&width=626)
- IPv4兼容IPv6自动隧道,其承载的IPv6报文的目的地址(即自动隧道所使用的特殊地址)是IPv4兼容IPv6地址。IPv4兼容IPv6地址的前96位全部为0,后32位为IPv4地址。
IPv4兼容IPv6缺点:
- 由于IPv4兼容IPv6隧道**要求每一个主机都要有一个合法的IPv4地址**,而且通讯的主机要支持双栈、支持IPv4兼容IPv6隧道,不适合大面积部署。目前该技术已经被6to4隧道所代替;
- **它限于在隧道的两端点进行通信,隧道两端点后的网络不能通过隧道通信;**
**<br />**转发过程**
- 需要经过R1发给R2的IPv6报文到达R1后,以目的地址::2.1.1.1查找IPv6路由,发现路由的下一跳为虚拟的Tunnel口。
- 由于R1上的配置的隧道的类型是IPv4兼容IPv6自动隧道。于是R1对IPv6报文进行了封装。
- 封装的时候,IPv6报文被封装为IPv4报文,IPv4报文中的源地址为隧道的起始点地址1.1.1.1,**而目IP地址直接从IPv4兼容IPv6地址::2.1.1.1的后32位拷贝过来即2.1.1.1**。
- 这个报文被路由器从隧道口发出后,在IPv4的网络中被路由转发到目的地2.1.1.1,也就是R2。
- R2收到报文后,进行解封装,把其中的IPv6报文取出,送给IPv6协议栈进行处理。
- R2返回R1的报文也是按照这个过程来进行的。
<a name="tsfJG"></a>
### 3.3.5 6 to 4隧道(1)
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612950320331-b7e9bf46-2f3e-4cf6-b517-fc4a7dcda605.png#align=left&display=inline&height=374&margin=%5Bobject%20Object%5D&name=image.png&originHeight=374&originWidth=650&size=87307&status=done&style=none&width=650)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612950329111-afd4b659-dbe3-48e5-94e0-105c93a5a2fa.png#align=left&display=inline&height=314&margin=%5Bobject%20Object%5D&name=image.png&originHeight=628&originWidth=1163&size=611697&status=done&style=none&width=581.5)
- 6to4隧道也属于一种自动隧道,隧道也是使用内嵌在IPv6地址中的IPv4地址建立的。与IPv4兼容自动隧道不同,6to4自动隧道支持Router到Router、Host到Router、Router到Host、Host到Host。
**地址格式**
- **FP**:可聚合全球单播地址的格式前缀(Format Prefix),其值为001。
- **TLA**:顶级聚合标识符(Top Level Aggregator),其值为0x0002。
- **SLA**:站点级聚合标识符(Site Level Aggregator)。
- **6to4地址**可以表示为**2002::/16**,而一个**6to4网络**可以表示为**2002:IPv4地址::/48**。6to4地址的**网络前缀长度为64bit**,其中前48bit(2002:a.b.c.d)被分配给路由器上的IPv4地址决定了,用户不能改变,而后16位(SLA)是由用户自己定义的。
- IPv6 over IPv4自动隧道
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612950500480-9b35b880-9a31-49a1-b62b-75087f16ce3f.png#align=left&display=inline&height=126&margin=%5Bobject%20Object%5D&name=image.png&originHeight=126&originWidth=660&size=12596&status=done&style=none&width=660)<br />[IPv6过渡技术—6to4(1).zip](https://www.yuque.com/attachments/yuque/0/2021/zip/1467971/1612950521598-631917c2-97f5-44ea-99b3-3d1e1b925736.zip?_lake_card=%7B%22uid%22%3A%221612950519695-0%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2021%2Fzip%2F1467971%2F1612950521598-631917c2-97f5-44ea-99b3-3d1e1b925736.zip%22%2C%22name%22%3A%22IPv6%E8%BF%87%E6%B8%A1%E6%8A%80%E6%9C%AF%E2%80%946to4%EF%BC%881%EF%BC%89.zip%22%2C%22size%22%3A5933%2C%22type%22%3A%22application%2Fx-zip-compressed%22%2C%22ext%22%3A%22zip%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22WnhCx%22%2C%22card%22%3A%22file%22%7D)
配置6to4隧道
AR1上配置 [AR1]int Tunnel 0/0/100 [AR1-Tunnel0/0/100]dis this [V200R003C00] # interface Tunnel0/0/100 ipv6 enable ipv6 address 2002:A01:101::1/48 ospfv3 1 area 0.0.0.0 tunnel-protocol ipv6-ipv4 6to4 source 10.1.1.1 # return
AR3上配置 [AR3]int Tunnel 0/0/100 [AR3-Tunnel0/0/100]dis this [V200R003C00] # interface Tunnel0/0/100 ipv6 enable ipv6 address 2002:A01:303::3/48 ospfv3 1 area 0.0.0.0 tunnel-protocol ipv6-ipv4 6to4 source 10.1.3.3 # return
还需要在AR1和AR3上分别指定静态路由后才能进行通信 [AR1]ipv6 route-static 2002:: 16 Tunnel0/0/100 [AR3]ipv6 route-static 2002:: 16 Tunnel 0/0/100
- 配置完成后即可进行通信测试
- 数据包结构
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612950612013-6c1e3968-99f0-4a3a-af10-6d6047448fd6.png#align=left&display=inline&height=83&margin=%5Bobject%20Object%5D&name=image.png&originHeight=83&originWidth=886&size=8639&status=done&style=none&width=886)
- 实际上,在配置中只指定了源,而没有指定目的地址;
- 但由于6to4使用的是特殊的地址结构,所以可以通过目的IPv6地址提取出用于隧道目的地的IPv4地址,即这里的10.1.3.3;
- **这也就意味着,在两个站点进行地址规划时,需要严格按照6to4的IPv6地址格式进行规划(即建立隧道的地址),否则两站点没有办法进行正常通信;**
**
<a name="8PoUO"></a>
### 3.3.6 6to4隧道(2)
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612950824037-1e5c92e3-df01-4aba-96f2-568373be17b9.png#align=left&display=inline&height=371&margin=%5Bobject%20Object%5D&name=image.png&originHeight=371&originWidth=674&size=65210&status=done&style=none&width=674)
- 一个IPv4地址只能用于**一个6to4隧道**的源地址,如果一个边界路由器连接了多个6to4网络使用同样的IPv4地址做为隧道的源地址,则使用6to地址中的SLA ID来区分,**但他们共用一个隧道**。
- IPv6 over IPv4自动隧道
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612950862450-7aad05a2-f86c-44ac-881c-e08c9d81eee9.png#align=left&display=inline&height=126&margin=%5Bobject%20Object%5D&name=image.png&originHeight=126&originWidth=660&size=12596&status=done&style=none&width=660)
- **在前一个实验的基础上,进行这个实验的配置只需要在AR1和AR3上分别做如下配置就可以了:**
[AR1]int l1 [AR1-LoopBack1]dis this [V200R003C00] # interface LoopBack1 ipv6 enable ipv6 address 2002:A01:101:100::100/128 # return
[AR3]int l1 [AR3-LoopBack1]dis this [V200R003C00] # interface LoopBack1 ipv6 enable ipv6 address 2002:A01:303:300::300/128 # return
- 配置完成进行通信测试
<a name="Jpyr5"></a>
### 3.3.7 6to4隧道(3)
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612951092064-3be798ef-bbcf-42ed-b2b4-26c5312c5b60.png#align=left&display=inline&height=374&margin=%5Bobject%20Object%5D&name=image.png&originHeight=374&originWidth=664&size=63800&status=done&style=none&width=664)
- 普通IPv6网络需要与6to4网络通过IPv4网络互通,这可以通过6to4中继路由器方式实现。所谓6to4中继,就是**通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址**,该下一跳路由器我们称之为6to4中继。**隧道的IPv4目的地址依然从下一跳的6to4地址中获得**。
- 如果6to4网络2中的主机要与IPv6网络互通,在其边界路由器上配置路由指向的**下一跳为6to4中继路由器的6to4地址**,中继路由器的6to4地址是与中继路由器的6to4隧道的源地址相匹配的。**6to4网络2中去往普通IPv6网络的报文**都会按照路由表指示的下一跳**发送到6to4中继路由器**。**6to4中继路由器**再将此报文**转发到纯IPv6网络**中去。当报文返回时,6to4中继路由器根据返回报文的目的地址(为6to4地址)进行IPv4报文头封装,数据就能够顺利到达6to4网络中了。
- IPv6 over IPv4自动隧道
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1467971/1612951144839-339ae0c7-ce86-4be1-9a7f-cc8f227ca657.png#align=left&display=inline&height=126&margin=%5Bobject%20Object%5D&name=image.png&originHeight=126&originWidth=660&size=12596&status=done&style=none&width=660)
- 在6to4(1)的基础上进行配置,实现AR5和AR6环回口的通信,只是需要注意的是,此时AR6和AR5并没有按照6to4的传统编制方式进行编制。
[IPv6过渡技术—6to4(3).zip](https://www.yuque.com/attachments/yuque/0/2021/zip/1467971/1612951213163-29ac2f4f-2c20-45d4-9551-e88cb0ea219f.zip?_lake_card=%7B%22uid%22%3A%221612951211256-0%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2021%2Fzip%2F1467971%2F1612951213163-29ac2f4f-2c20-45d4-9551-e88cb0ea219f.zip%22%2C%22name%22%3A%22IPv6%E8%BF%87%E6%B8%A1%E6%8A%80%E6%9C%AF%E2%80%946to4%EF%BC%883%EF%BC%89.zip%22%2C%22size%22%3A5933%2C%22type%22%3A%22application%2Fx-zip-compressed%22%2C%22ext%22%3A%22zip%22%2C%22progress%22%3A%7B%22percent%22%3A99%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%22CQkhI%22%2C%22card%22%3A%22file%22%7D)
AR1配置 [AR1]ipv6 route-static 2055::5 128 2002:A01:303::3
AR3配置 [AR3]ipv6 route-static 2066::6 128 2002:A01:101::1
AR6配置 [AR6]ipv6 route-static 2055::5 128 2016::1
AR5配置 [AR5]ipv6 route-static 2066::6 128 2035::3 ```
- 上面的配置,一个思路是,主要是让AR1或者是AR3能够对目的地址进行解析,从而将数据通过隧道进行转发,所以在AR1或AR3上配置的静态路由必须是使用下一跳,而不能是Tunnel。
3.3.8 ISATAP隧道
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是另外一种自动隧道技术。ISATAP隧道同样使用了内嵌IPv4地址的特殊IPv6地址形式,只是和6to4不同的是,6to4是使用IPv4地址做为网络前缀,而ISATAP用IPv4地址做为接口标识。
地址描述如果IPv4地址是全局唯一的,则u位为1,否则u位为0。g位是IEEE 群体/个体标志。由于ISATAP是通过接口标识来表现的,所以,ISATAP地址有全局单播地址、链路本地地址、ULA地址、组播地址等形式。ISATAP地址的前64位是通过向ISATAP路由器发送请求来得到的,它可以进行地址自动配置。在ISATAP隧道的两端设备之间可以运行ND协议。ISATAP隧道将IPv4网络看作一个非广播的点到多点的链路(NBMA)。
转发过程描述:在IPv4网络内部有两个双栈主机PC2和PC3,它们分别有一个私网IPv4地址。要使其具有ISATAP功能,需要进行如下操作:
- 首先配置ISATAP隧道接口,这时会根据IPv4地址生成ISATAP类型的接口ID。
- 根据接口ID生成一个ISATAP链路本地IPv6地址,生成链路本地地址以后,主机就有了在本地链路上进行IPv6通信的能力。
- 进行自动配置,主机获得IPv6全球单播地址、ULA地址等。
- 当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。
3.4 IPv4 over IPv6隧道
在IPv4 Internet向IPv6 Internet过渡后期,IPv6网络被大量部署后,而IPv4网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv6网络上创建隧道,从而实现IPv4孤岛的互联,IPv4孤岛能通过IPv6公网访问其他IPv4网络。
转发过程描述:边界路由设备启动IPv4/IPv6双协议栈,并配置IPv4 over IPv6隧道。
- 边界路由设备在收到从IPv4网络侧发来的报文后,如果报文的目的地址不是自身,就要把收到的IPv4报文作为负载,加上IPv6报文头,封装到IPv6报文里。
- 在IPv6网络中,封装后的报文被传递到对端的边界路由设备。
- 对端边界路由设备对报文解封装,去掉IPv6报文头,然后将解封装后的IPv4报文发送到IPv4网络。