文章目录

  • 一、IPv6基础。
    • 1.包头格式。
    • 2.IPv6包头和IPv4包头的对比。
    • 3.IPv6拓展包头。
    • 4.IPv6地址接口ID的生成。
  • 二、IPv6地址。
    • 1. 单播地址。
      • (1)全球单播地址。
      • (2)链路本地地址。
      • (3)唯一本地地址。
      • (4)其他单播地址。
    • 2. 组播地址。
      • (1)预定义组播地址。
      • (2)被请求节点组播地址。
    • 3.任播地址。
  • 三、ICMPv6。
    • 1.报文格式。
    • 2.字段具体含义和作用。
  • 四、NDP邻居发现协议。
    • 1.路由器发现。
    • 2.SLAAC(无状态地址自动配置)。
    • 3.DAD重复地址检测。
    • 4.地址解析。
    • 5.重定向。
    • 6.Path MTU。
    • 7.前缀重编址。
    • 8.邻居状态的迁移。
  • 五、IPv6的过渡技术。
    • 1. 双协议栈。
    • 2.隧道技术。
    • 3.NAT64。

一、IPv6基础。

1.包头格式。

  • Version:版本号,长度为4bit。对于IPv6,该值为6。
  • Traffic Class:流类别,长度为8bit。等同于IPv4中的ToS字段,表示IPv6数据包的类或优先级,主要应用于QoS。
  • Flow Label:流标签,长度为20bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效的区分数据流。
  • Payload Length:有效荷载长度,长度为16bit。有效荷载是指紧跟IPv6包头的数据包的其他部分(即拓展包头和上层协议数据单元)。
  • Next Header:下一个包头,长度为8bit。该字段定义紧跟在IPv6包头后面的第一个拓展包头的类型,或者上层协议数据单元中的协议类型。
  • Hop Limit:跳数限制,长度为8bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据包所能经过的最大跳数。没经过一个路由器,该值减去1,当该字段的值为0时,该数据包将被丢弃。
  • Source Address:源地址,长度为128bit。表示发送方的地址。
  • Destination Address:目的地址,长度为128bit。表示接收方的地址。

2.IPv6包头和IPv4包头的对比。

3.IPv6拓展包头。

  IPv6的拓展包头其实是将IPV4的Option字段,从IPv6基本包头中剥离,放到了扩展包头中。扩展包头被置于IPv6基本包头和上层协议数据单元之间,一个IPv6报文可以包含0个、1个或多个扩展包头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40 Byte限制,这样便于日后扩充新增选项。这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展包头总是8 Byte长度的整数倍。

(1)格式。

  • Extension Header Length:扩展包头长度,长度为8 bit。表示扩展包头的长度(不包含Next Header字段)。
  • Extension Header Data:扩展包头数据,长度可变。扩展包头的内容,为一系列选项字段和填充字段的组合。


当超过一种扩展包头被用在同一个IPv6报文里时,包头必须按照下列顺序出现:

  • 逐跳选项包头:字段值0,主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段。
  • 目的选项包头:字段值60,携带了一些只有目的节点才会处理的信息,可以多次出现。
  • 路由包头:字段值43,IPv6源节点用来强制数据包经过特定的设备。
  • 分段包头:字段值44,当报文长度超过MTU时就需要将报文分段发送,而在IPv6中,分段发送使用的是分段包头。
  • 认证包头(AH):字段值51,该包头由IPsec使用,提供认证、数据完整性以及重放保护。
  • 封装安全净载包头(ESP):字段值50,该包头由IPsec使用,提供认证、数据完整性以及重放保护和IPv6数据包的保密。

4.IPv6地址接口ID的生成。

  接口ID可通过3种方法生成:手工配置、系统自动生成和IEEE EUI-64规范生成。

  • 手工配置:建议在服务器和重要网络设备上配置。
  • 系统通过软件自动生成:保护主机的私密性。
  • IEEE EUI-64规范自动生成:最常用的方法。

  下面主要介绍IEEE EUI-64生成规范:

  为什么需要将MAC地址的第七个比特位反转?
答:在单播MAC地址中,第1个Byte的第7bit是U/L(Universal/Local,也称为G/L,其中G表示Global)位,用于表示MAC地址的唯一性。如果U/L=0,则该MAC地址是全局管理地址,是由拥有OUI的厂商所分配的MAC地址;如果U/L=1,则是本地管理地址,是网络管理员基于业务目的自定义的MAC地址。而在EUI-64接口ID中,第7bit的含义与MAC地址正好相反,0表示本地管理,1表示全球管理,所以使用EUI-64格式的接口ID,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。这就是为什么要反转该位。

二、IPv6地址。

  IPv6地址可以分为以下几类:

  • 单播地址:标识一个接口,目的为单播地址的报文会被送到被标识的接口。
  • 组播地址:标识多个接口,目的为组播地址会被送到被标识的所有接口。
  • 任播地址:标识多个接口,目的为任播地址的报文会被送到最近的一个被标识接口,最近节点是由路由协议来定义的

1. 单播地址。

(1)全球单播地址。


  全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。全球单播地址由全球路由前缀(Global routing prefix)、子网ID(Subnet ID)和接口标识(Interface ID)组成,其格式如上图所示:

  • Global routing prefix:全球路由前缀。由提供商指定给一个组织机构,通常全球路由前缀至少为48位。目前已经分配的全球路由前缀的前3bit均为001。
  • Subnet ID:子网ID。组织机构可以用子网ID来构建本地网络。子网ID通常最多分配到第64位。子网ID和IPv4中的子网号作用相似。
  • Interface ID:接口标识。用来标识一个设备。
(2)链路本地地址。

  • 链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。
  • 它使用了特定的本地链路前缀FE80::/10(最高10位值为1111111010),同时将接口标识添加在后面作为地址的低64比特。
  • 当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址(其固定的前缀+EUI-64规则形成的接口标识)。
  • 链路本地地址广泛应用于邻居发现,无状态地址配置等应用。
(3)唯一本地地址。

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

  唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。唯一本地地址具有如下特点:

  • 具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低)。
  • 可以进行网络之间的私有连接,而不必担心地址冲突等问题。
  • 具有知名前缀(FC00::/7),方便边缘路由器进行路由过滤。
  • 如果出现路由泄漏,该地址不会和其他地址冲突,不会造成Internet路由冲突。
  • 应用中,上层应用程序将这些地址看作全球单播地址对待。
  • 独立于互联网服务提供商ISP(Internet Service Provider)。
(4)其他单播地址。
  • 未指定地址

    • 0:0:0:0:0:0:0:0/128 或者::/128。
    • 表示某个接口或者节点没有IP地址。
  • 环回地址
    • 0:0:0:0:0:0:0:1/128 或者::1/128。
    • 与IPv4中的127.0.0.1作用相同。
    • 实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址。

2. 组播地址。

  IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。

  一个IPv6组播地址由前缀,标志(Flag)字段、范围(Scope)字段以及组播组ID(Global ID)4个部分组成:

  • 前缀:IPv6组播地址的前缀是FF00::/8。
  • 标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
  • 范围字段(Scope):长度4bit,用来限制组播数据流在网络中发送的范围,该字段取值和含义如下:
0 保留
1 接口本地范围
2 链路本地范围
7 汇聚点标记
  • 组播组ID(Group ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0。这样每个组播组ID都映射到一个唯一的以太网组播MAC地址。
(1)预定义组播地址。

Node-local:

  • 所有节点的组播地址: FF02:0:0:0:0:0:0:1
  • 所有路由器的组播地址: FF02:0:0:0:0:0:0:2

Link-local:

  • 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:13
(2)被请求节点组播地址。

  被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于地址解析和地址重复检测功能。

3.任播地址。

  任播地址与单播地址使用相同的地址空间,配置时须明确表明是任播地址,以此区别单播和任播,任播地址主要为DNS和HTTP提供服务,不过业界从来没有实施过该设计方案。

  任播地址的报文会被送到最近的一个被标识接口,最近节点是由路由协议来定义的。

三、ICMPv6。

1.报文格式。


报文中字段解释如下:

  • Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。

    • 差错消息的作用:是告诉设备其发送的数据包无法正确传送的原因,例如:ttl为0。
    • 通知消息的作用:不是报告差错,而是为各种测试,诊断和支撑功能提供必须的信息,例如回显请求消息和回显应答消息。
  • Code:表示此消息类型细分的类型。
  • Checksum:表示ICMPv6报文的校验和。

2.字段具体含义和作用。

ICMPv6报文Type、Code字段组合的含义:

ICMPv6 4种错误报文的作用:

  • 目的不可达错误报文:在IPv6节点转发IPv6报文过程中,当设备发现目的地址不可达时,就会向发送报文的源节点发送ICMPv6目的不可达错误报文,同时报文中会携带引起该错误报文的具体原因。
  • 数据包过大错误报文:在IPv6节点转发IPv6报文过程中,发现报文超过出接口的链路MTU时,则向发送报文的源节点发送ICMPv6数据包过大错误报文,其中携带出接口的链路MTU值。
  • 时间超时错误报文:在IPv6报文收发过程中,当设备收到Hop Limit字段值等于0的数据包,或者当设备将Hop Limit字段值减为0时,会向发送报文的源节点发送ICMPv6超时错误报文。对于分段重组报文的操作,如果超过定时时间,也会产生一个ICMPv6超时报文。
  • 参数错误报文:当目的节点收到一个IPv6报文时,会对报文进行有效性检查,如果发现问题会向报文的源节点回应一个ICMPv6参数错误差错报文。

信息消息的作用:

  • 回送请求报文:ping request 发送到目标节点,以使目标节点立即发回一个回送应答报文。
  • 回送应答报文:ping reply 对回送请求报文的回应。

四、NDP邻居发现协议。

  NDP(Neighbor Discovery Protocol,邻居发现协议)实现了IPv6中诸多重要机制,如:

  • 路由器发现:发现链路上的路由器,获得路由器通告的信息。
  • 无状态自动配置:通过路由器通告的地址前缀,终端自动生成IPv6地址。
  • DAD:获得地址后,进行地址重复检测,确保地址不存在冲突。
  • 地址解析:请求目的网络地址对应的数据链路层地址,类似IPv4的ARP。
  • 邻居状态跟踪:通过NDP发现链路上的邻居并跟踪邻居状态。
  • 前缀重编址:路由器对所通告的地址前缀进行灵活设置实现网络重编址。
  • 路由重定向:告知其他设备,到达目标网络的更优下一跳。

  为了实现这些机制,NDP协议利用了ICMPv6的报文,具体如下表:

  • RS(Router Solicitation):路由器请求报文
  • RA(Router Advertisement):路由器通告报文
  • NS(Neighbor Solicitation):邻居请求报文
  • NA(Neighbor Advertisement):邻居通告报文

1.路由器发现。

  路由器发现过程使用两种报文RA和RS,具体过程如下:

  • 路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文源地址是自身接口的链路本地地址,目标地址是所有节点的组播地址(FF02::1)。RA报文的Type字段值为134。

  • 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文源地址是自身接口的链路本地地址,目标地址是所有路由器的组播地址(FF02::2)。RS报文的Type字段值为133。

2.SLAAC(无状态地址自动配置)。

(1)IPv6主机无状态自动配置过程:

  • 根据接口标识产生链路本地地址。
  • 发出邻居请求,进行重复地址检测。
  • 如地址冲突,则停止自动配置,需要手工配置。
  • 如不冲突,链路本地地址生效,节点具备本地链路通信能力。
  • 主机会发送RS报文(或接收到路由器定期发送的RA报文)。
  • 根据RA报文中的前缀信息和通过EUI-64规范生成的接口标识得到IPv6地址。
  • 主机对生成的IPv6地址进行地址冲突检测。

(2)当存在以下情况时忽略RA报文发送的前缀:

  • RA报文选项中的“auto”未置位。(在前缀的option的falg字段)
  • 前缀与已有地址前缀重复(手动配置了相同前缀的地址,包括link-local地址)。
  • RA报文选项中的“preferred lifetime”时间大于 “ valid lifetime ”。
  • 前缀长度与接口ID长度之和不等于128位。(华为路由器只为前缀长度是64的IPv4地址产生前缀)

(3)RA消息中的Flags字段。

  • M位默认为0,为0时,收到该RA的主机使用RA中包含的IPv6前缀用于无状态地址自动配置。(等于控制所有前缀进行SLAAC)。当该值为1时,收到该RA的主机将采用有状态自动配置,也就是DHCPv6的方式来获取IPv6地址。使用如下命令,可将该值设置为1。

    ipv6 nd autoconfig managed-address-flag
    
  • Other-Config-Flag,默认为0,表示主机不应该使用有状态自动配置机制来配置除了IPv6地址外的其他参数。该值置1,则主机需使用DHCPv6来配置除了IPv6地址外的其他信息,如DNS,域名等。使用如下命令,可将该值设置为1。

    ipv6 nd autoconfig other-flag
    
  • M位和O位的组合意义:

    • M=1,O=1:这个组合表示用DHCPV6来执行地址和其他参数的配置,即有状态地址配置;
    • M=0,O=1:这个组合表示DHCPv6仅用于配置其他主机参数,主机通告RA获取前缀信息配置无状态地址,DHCPv6只会分配主机配置参数;
    • M=1,O=0: 这个组合表示DHCPv6仅用于地址配置, 而不用于配置其他参数;
    • M=0,O=0: 对应无DHCPv6设备的网络,主机通告A获取前缀信息配置无状态地址,并且用其他方法(手动配置)配置其他参数。

3.DAD重复地址检测。

  重复地址检测确保网络中无两个相同的单播地址,所有地址都需要做DAD,使用NS(135)和NA(136)完成DAD交互过程。

(1)原理。

  • 一个地址在通过DAD地址重复检测之前称为“tentative地址”也就是试验性地址。接口暂时还不能使用这个试验性地址进行正常的IPv6单播通讯,但是会加入和该地址所对应的Solicited-Node组播组。
  • DAD重复地址检测:节点向该tentative地址所在的Solicited-Node组播地址发送一个NS,如果收到某个其他站点回应的NA,就证明该地址已被网络上使用,节点将不能使用该tentative地址通讯。
  • 接口在启用任何一个单播IPv6地址前都需要先进行DAD,包括Link-Local地址。

(2)DAD过程。

  • R1向链路上以组播的方式发送一个NS报文,该NS的源IPv6地址为“::”,目的IPv6地址为要进行DAD检测的2001::1对应的被请求节点组播地址,也就是FF02::1:FF00:1,这个NS里包含着要做DAD检测的目标地址2001::1。
  • 当R2收到该NS报文后,有两种处理方法:
    • 如果R2发现2001::1是自身的一个试验地址(即R2配置了该地址但是没有完成冲突检测),则R2放弃使用这个地址作为接口地址,并且不会发送NA报文。
    • 如果R2发现2001::1是一个已经正常使用的地址,于是立即回送一个NA报文,该报文的目的地址是FF02::1,也就是所有节点组播地址,同时在报文内写入目标地址2001::1,以及自己接口的MAC地址。这样,R1收到这个消息后就会发现自身的试验地址是重复的,标识为duplicated状态,从而弃用该地址。

4.地址解析。

  IPv6的地址解析不再使用ARP,也不再使用广播方式。通过ICMPv6(类型135的NS及类型136的NA报文)来实现地址解析。NS报文发送使用组播的方式,报文的目的IPv6地址为被请求的IPv6地址对应的“被请求节点组播地址”,报文的目的MAC为组播MAC。地址解析在三层完成,主要带来以下几个好处:

  • 无需为每一个链路层定义一个新的地址解析协议,针对不同的链路层协议可以采用相同的地址解析协议在三层完成地址解析。
  • 采用组播的方式发送NS消息相比于广播的方式更加的高效,也减少了对其他节点的影响和对二层网络的性能压力。
  • 可以使用三层的安全机制(例如IPSec)避免地址解析攻击如ARP欺骗。

(1)IPv6组播地址的MAC地址映射。

  33-33是专门为IPv6组播预留的MAC地址前缀,MAC地址的后32bit从对应的组播IPv6地址的后32bit拷贝而来。这样保证了组播IPv6地址和组播MAC地址的1对1映射。

(2)地址解析的过程。

  • 在上图所示的场景中,R1要请求R2的2001::2这个地址对应的MAC地址,R1将发送一个NS报文达到这个目的。这个NS报文的源地址是2001::1,目的地址则是2001::2对应的被请求节点组播地址;源MAC地址是PC1的MAC地址,目的MAC地址则是2001::2这个目标地址对应的被请求节点组播地址映射得到的组播MAC地址,R1的链路层地址被放在Options字段中。
  • 当R2接收到了NS报文之后,就会回应NA报文,其中源地址为R2的IPv6地址,目的地址为R1的IPv6地址,R2的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。

5.重定向。


(1)过程。

  • PC1的网关是R1,当PC1需要访问PC2时,需要先将报文发送给R1。
  • R1接收到PC1发送的报文以后会发现报文进入的接口就是报文路由得出接口,PC1直接发送给路由器R2更好,它将发送一个ICMPv6重定向报文给PC1,其中Target Address为R2,Destination Address为PC2。
  • 主机A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往主机B的报文就直接给RTB。
  • 重定向报文的源地址是R1的链路本地地址,目的地址是PC1的链路本地地址。Target Address是R2的链路本地地址,Destination address是PC2的地址。

(2)重定向的5个条件。

  • 报文的目的地址不是一个组播地址。
  • PC1和R1相连的接口在同一个网段。
  • 经过路由计算后,路由的下一跳出接口是接收报文的接口。
  • 路由器发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
  • 路由器检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。

(3)重定向报文。

  • Type : 值是137。
  • Code:值是0。
  • Target Address是更好的路径下一跳地址;
  • Destination Address是需要重定向转发的报文的目的地址。

6.Path MTU。

  IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行。
(1)原理。

  • PMTU协议是通过ICMPv6的Packet Too Big报文来完成的。
  • 首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文。
  • 当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值继续发送报文。

  • 如此反复,直到报文到达目的地之后,源节点就能知道到达目的地的PMTU了。

7.前缀重编址。

  前缀重编址主要是利用在进行地址自动配置时获取的两个时间参数preferred lifetime和valid lifetime。这两个字段的意义和作用如下:

  • “preferred lifetime”=发起新通讯的有效时间。
  • “ valid lifetime ”=原有通讯的有效时间。
  • 小于pre的时间内,可以主动的访问其他的设备。
  • 时间在pre和valid之间,可以被动的回应报文。
  • 当时间大于valid时,ip地址失效。

想进行无缝的前缀重编制可以进行如下配置:

int g0/0/0
ipv6 nd ra prefix 2001::/64   43200        0此IP地址为原来IP             可用时间   首选时间

命令意思是,此IP地址,只能接受连接,不能主动发起连接。

ipv6 nd ra prefix 2001:db8:c18:2::/64  43200  43200
此IP地址为新换的IP,可主动连接,可被动接受。

当发现第2个IP地址,可以使用时,第一个IP地址就不用了。

8.邻居状态的迁移。

  5种邻居状态,分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)。它们的状态迁移图如下:

  下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程:

  • A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
  • 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
  • 经过邻居可达时间,邻居状态由Reachable变为Stale,即未知是否可达。
  • 如果在Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
  • 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
  • 在经过一段固定时间后,邻居状态由Delay变为Probe,其间若有NA应答,则邻居状态由Delay变为Reachable。
  • 在Probe状态,A每隔一定时间间隔发送单播NS,发送固定次数后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。

五、IPv6的过渡技术。

  目前解决过渡问题的基本技术主要有 3 种:双协议栈、隧道技术和NAT64。

1. 双协议栈。

  网络中的节点同时支持IPv4和IPv6协议栈,源节点根据目的节点的不同选用不同的协议栈,而网络设备根据报文的协议类型选择不同的协议栈进行处理和转发。双栈可以在一个单一的设备上实现,也可以是一个双栈骨干网。对于双栈骨干网,其中的所有设备必须同时支持IPv4/IPv6协议栈,连接双栈网络的接口必须同时配置IPv4地址和IPv6地址。

2.隧道技术。

(1)隧道基本概念。
  隧道(Tunnel)是一种封装技术。它利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在自身的报文中,然后在网络中传输。
  在过渡初期,IPv4网络已经大量部署,而IPv6网络只是散落在各地的“孤岛”,IPv6 over IPv4隧道就是通过隧道技术,使IPv6报文在IPv4网络中传输,实现IPv6网络之间的孤岛互连。根据隧道终点的 IPv4 地址的获取方式不同,隧道分为“配置隧道”及“自动隧道”。

  • 如果 IPv6 over IPv4 隧道的终点地址不能从 IPv6 报文的目的地址中自动获取,需要进行手工配置,这样的隧道即为“配置隧道”。
  • 如果 IPv6 over IPv4 隧道的接口地址采用内嵌 IPv4 地址的特殊 IPv6 地址形式, 即可以从 IPv6报文的目的地址中自动获取隧道终点的 IPv4 地址,这样的隧道即为“自动隧道”。

(2)IPv6 over IPv4 隧道种类和对比。

  • 配置隧道:IPv6 手动隧道、IPv6-over-IPv4、GRE ( Generic Routing Encapsulation,通用路由封装)隧道。
  • 自动隧道:IPv4 兼容 IPv6 自动隧道、6to4 隧道、ISATAP( Intra-Site Automatic Tunnel Addressing Protocol,站点内自动隧道寻址协议)隧道。

各隧道对比如下:

(3)隧道技术详解。

  • IPv6 over IPv4手动隧道:手动隧道直接把IPv6报文封装到IPv4报文中去,IPv6报文作为IPv4报文的净载荷。IPv4的协议号为41,手动隧道的源地址和目的地址也是手工指定的,它提供了一个点到点的连接。如果一个边界设备要与多个设备建立手动隧道,就需要在设备上配置多个隧道,配置比较麻烦。所以手动隧道通常用于两个边界路由器之间,为两个IPv6网络提供连接。隧道的边界设备必须支持IPv6/IPv4双协议栈。其它设备只需实现单协议栈即可。

    配置:

IPv6 over IPv4手动隧道转发机制为:

  • 当隧道边界设备的IPv6侧收到一个IPv6报文后, 根据IPv6报文的目的地址查找IPv6路由转发表,如果该报文是从此虚拟隧道接口转发出去,则根据隧道接口配置的隧道源端和目的端的IPv4地址进行封装。

  • 封装后的报文变成一个IPv4报文,交给IPv4协议栈处理。报文通过IPv4网络转发到隧道的终点。

  • 隧道终点收到一个隧道协议报文后,进行隧道解封装。并将解封装后的报文交给IPv6协议栈处理。

  • IPv6 over IPv4 GRE隧道: IPv6 over IPv4 GRE隧道的在隧道的边界路由器的传输机制和IPv6 over IPv4手动隧道相同,也是点到点之间的链路,只是需要GRE承载IPv6协议。GRE 隧道主要用于边缘路由器-边缘路由器、主机-边缘路由器定期安全通信的稳定连接。

    IPv4的协议号为47,下面是手动隧道和gre隧道的对比:

  • 手动隧道:

    • IPv4直接封装IPv6报文。
    • IPv4的协议号41。
    • 支持路由协议和静态路由。
  • GRE隧道:

    • GRE封装IPv6报文。
    • IPv4的协议号47。
    • 支持路由协议和静态路由。
    • GRE支持关键字认证。
    • GRE隧道有保活机制。
    • GRE CheckSum。
  • 6to4隧道:6to4 隧道采用特殊的 6to4 地址,其格式为:2002: abcd :efgh:子网号::接口 ID/64,其中 2002 表示固定的 IPv6 地址前缀, abcd:efgh 表示该 6to4 隧道对应的 32 位全球唯一的 IPv4 源地址,用 16 进制表示(如 1.1.1.1 可以表示为 0101:0101)。 2002: abcd :efgh 之后的部分唯一标识了一个主机在6to4 网络内的位置。通过这个嵌入的 IPv4 地址可以自动确定隧道的终点,使隧道的建立非常方便。6to4自动隧道支持Router到Router、Host到Router、Router到Host、 Host到Host。
    配置:

  • 一个IPv4地址只能用于一个6to4隧道的源地址,如果一个边界设备连接了多个6to4网络使用同样的IPv4地址做为隧道的源地址,则使用6to4地址中的SLA ID来区分,但他们共用一个隧道。如上图的PC3和PC4。

  • 6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址,该下一跳为路由器我们称之为6to4中继。实现普通IPv6网络与6to4网络通过IPv4网络互通。如上图PC3访问PC7。

    • 6to4去往普通IPv6网络的报文都会按照路由表指示的下一跳发送到6to4中继路由器。6to4中继路由器再将此报文转发到纯IPv6网络中去。
    • 当报文返回时,6to4中继路由器根据返回报文的目的地址(为6to4地址)进行IPv4报文头封装,数据就能够顺利到达6to4网络中了。
  • ISATAP隧道:ISATAP主机的ISATAP地址的前64位是通过向ISATAP路由器发送请求来得到的,它可以进行地址自动配置。在ISATAP隧道的两端设备之间可以运行ND协议。

地址:如果IPv4地址是全局唯一的,则u位为1,否则u位为0。g位是IEEE群体/个体标志。所以当u置1,g置0时自动生成的ISATAP地址接口标识为0200:5EFE:IPv4;当u置0,g置0时自动生成的ISATAP地址接口标识为0000:5EFE:IPv4。

执行过程:

  • 首先配置ISATAP隧道接口,这时会根据IPv4地址生成ISATAP类型的接口ID。
  • 根据接口ID生成一个ISATAP链路本地IPv6地址,生成链路本地地址以后,主机就有了在本地链路上进行IPv6通信的能力。
  • 进行自动配置,主机获得IPv6全球单播地址、ULA地址等。
  • 当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。

配置:

  当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。

  • IPv4兼容IPv6自动隧道: IPv4兼容IPv6地址的前96位全部为0,后32位为IPv4地址。


封装和转发:

  • 需要经过Router A发给Router B的IPv6报文到达Router A后,以目的地址::2.1.1.1查找IPv6路由,发现路由的下一跳为虚拟的Tunnel口。
  • 由于Router A上的配置的隧道的类型是IPv4兼容IPv6自动隧道。于是Router A对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,也就是Router B。
  • Router B收到报文后,进行解封装,把其中的IPv6报文取出,送给IPv6协议栈进行处理。

注意的点:

  • 如果IPv4兼容IPv6地址中的IPv4地址是广播地址、组播地址、网络广播地址、出接口的子网广播地址、全0地址、环回地址,则该IPv6报文被丢弃,不会进行隧道封装处理。
  • 由于IPv4兼容IPv6隧道要求每一个主机都要有一个合法的IP地址(IPv4公网地址)。

3.NAT64。

  NAT64技术解决了IPv6与IPv4之间的网络地址与协议的转换,从而实现IPv6网络与IPv4网络的双向互访。应用场景是:

  • IPv6网络用户访问IPv4网络服务器。
  • IPv4网络用户访问IPv6网络服务器。

华为数通HCIE面试看这个就够了系列——IPv6相关推荐

  1. 华为数通HCIE面试看这个就够了系列——MPLS V*N

    文章目录 一.***基础. 1.***中路由器的角色. 2.MPLS ***. (1)如何解决不同site连接到同一个PE后,私网路由冲突问题? (2)如何在不同的PE之间传递路由信息? (3)RD在 ...

  2. 华为数通HCIE面试看这个就够了系列——OSPFv3

    文章目录 一.IPv6和OSPFv3. 二.OSPFv3和OSPFv2协议比较. 1.相同点. 2.不同点. 三.OSPFv3详解. 1.网络前缀表示法. 2.LSA. 一.IPv6和OSPFv3. ...

  3. 华为数通HCIE面试题目解密系列之RSTP边缘端口

    以下是华为数通面试考试的一道真题,原题如下: 请举例说明 stp 的 edge port 的作用,用在什么场景,并且使用 edge port 会碰到什么问题,怎么解决和防止? 提到边缘端口,我们是在N ...

  4. 华为数通HCIE面试项目题——100台路由器组网

    某公司100台路由器,差异较大,选择什么IGP协议,为什么?   如果该企业有100台路由器,那可真是一个大企业了,那么在规划网络的时候,要合理的分层次规划.可以将高性能的设备放在核心层,中等的放在汇 ...

  5. 华为数通HCIE面试项目题——网关是放在接入还是汇聚?

      首先网关应该放在接入还是汇聚需要根据网络场景选择,各有各的利弊.具体可以从以下几点进行分析: 1.成本分析.   如果网关放在汇聚设备上,那么对于接入设备要的要求就比较低,可以使用二层交换机就可以 ...

  6. 华为数通HCIE面试项目题——小企业组网

    1.VLAN规划. 通常,不同的部门规划不同的vlan,如上图PC1和PC2属于同一个VLAN,PC3和打印机属于同一VLAN下: 部门 VLAN PC1 .PC2 10 PC3 ,打印机 20 交换 ...

  7. 华为数通hcie人数有多少?

    华为数通hcie人数有多少 目前华为官方并没有给出一个准确的数字.但是从各个培训中心还有互联网上的考试战报看的话,也就是七八千人左右. 所以华为认证目前全国通过的人数并不太多,所以现在是一个非常好的考 ...

  8. 快速生成树(RSTP)和传统生成树(STP)的区别(华为数通HCIE认证面试真题)...

    快速生成树(RSTP,802.1w)和生成树(STP,802.1D)的区别总结 1.最重要的区别即快速收敛(最本质在于BPDU结构的变化) A.RSTP的proposal和aggrement机制(发生 ...

  9. IE-LAB网络实验室:什么是华为数通? 华为数通HCIE学些什么?

    华为HCIE的学习,主要是基于HCIA以及HCIP基础上进行的. HCIA 认证定位于中小型网络的基本配置和维护,包括但不限于:网络基础知识,流行网络的基本连接方法,基本的网络建造,基本的网络故障排除 ...

最新文章

  1. 我来阅读lodash源码——Math(一)
  2. Oracle初始化参数含义
  3. 【Java自顶向下】HashMap面试题(2021最新版)
  4. 剑指offer面试题15:链表中倒数第K个节点
  5. st官网下载stm32固件库方法
  6. LeetCode刷题——无重复字符的最长子串
  7. php中phpmyadmin打不开,解决phpMyAdmin打不开的方法
  8. 《鬼泣》连招攻击动作分析总结
  9. 图像处理之---双线性插值
  10. 实习成长之路:Redis为什么快?为什么Redis同样也是String字符串,但是要比Java性能好?SDS数据结构是什么?什么是紧凑型编程技巧?
  11. 计算机审计简答题,审计简答题总结.doc
  12. tokenizers in Transformers:BPE、WordPiece,SentencePiece
  13. 信息 按顺序打印commit_Git 工作流,看这一篇就够了
  14. matlab 剪毛刺,MATLAB消除曲线毛刺Outlier Detection and Removal [hampel]
  15. m73p黑苹果_ThinkCentre M93z 吃上黑苹果
  16. 笔记本计算机声音小,笔记本声音太小怎么加大 笔记本声音太小增大方法【详细介绍】...
  17. 解读ConnectBot-1 telnet、ssh常识
  18. 电销卡在哪里办理,有用过的没
  19. Nginx的负载均衡 - 最少连接 (least_conn)
  20. 定时器0 定时器2波特率发生器 AD转换

热门文章

  1. sniffer简单使用
  2. 【APICloud系列|2】上架安卓应用商店全套流程(小米应用商店、华为应用市场、阿里应用商店、百度手机助手、腾讯应用宝)
  3. Games104现代游戏引擎入门-lecture14游戏引擎的引擎工具高级概念与应用
  4. 揭秘曾攻击苹果、微软、Fb 的黑客组织 Morpho
  5. python画小兔子_python制作“小兔子和Bun小游戏
  6. http-一次完整的HTTP请求过程-六个阶段
  7. 【图形学】关于透视校正
  8. [转载]儿童画教学-理论篇_我是亲民_新浪博客
  9. 外国电视节目核心竞争力!
  10. web性能优化 高性能网站建设进阶指南