IPv6

IPv6地址基础

特点

  1. 地址空间巨大
  2. 精简报文结构
  3. 实现自动配置和重新编址
  4. 支持层次化网络结构
  5. 支持端对端安全
  6. 更好的支持QoS
  7. 支持移动特性

结构

  • IPv6地址分两部分
    • 网络前缀,n比特,相当于IPv4中的网络ID
    • 接口标识,128-n比特相当于IPv4中的主机ID

表示方法

  • IPv6地址包括128比特,由冒号分割成8段,每段4个16进制数,例如:2031:0000:130F:0000:0000:09C0:876A:130B
  • IPv6压缩格式
    • 每组中的前导“0”都可以省略,例如:2031:0:130F:0:0:9C0:876A:130B
    • 地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替(一个地址中仅能使用一次),例如:2031:0:130F::9C0:876A:130B

地址分类

 IPv6地址分类
  1. 组播 FF00::/8
  2. 任播地址与单播地址使用同一个地址空间
  3. 未指定地址只能作为源地址使用,并不能被路由器转发

1. 单播地址

在IPv6中,一个接口拥有多个IPv6地址是非常常见的现象。
对于IPv6单播地址来说,如果地址的前3比特不是000,则接口标识必须为64位;如果地址的前3位是000,则没有此限制

1.1 可聚合全球单播地址(常见2000::/3)

全球单播地址定义用于IPv6 Internet,是全局唯一的和全局可路由的
可聚合全球单播地址

  • 类似IPv4的公网地址
  • 由前缀、子网ID和接口标识组成
    • 全局路由前缀:由提供商指定给一个组织机构,一般至少为48bit。目前已经分配的全局路由前缀的前3bit均为001因此前缀为2000::/3
    • 子网:组织机构可以用子网ID来构建本地网络,与IPv4中的子网号作用相似,子网ID通常最多分配到第64位
    • 主机位:用来标识一个设备,与IPv4中的主机ID作用相似

1.2 链路本地地址(FE80::/10)

在一个节点启动IPv6协议栈时,节点的每个接口会自动配置一个链路本地地址,该地址专门用来和相同链路上的其他主机通信
链路本地地址

  • 只能在连接到同一个本地链路的节点之间使用,广泛应用于邻居发现、无状态地址
  • 链路本地地址前缀FE80::/10,将接口ID添加在后面作为地址的低64位
  • 每个IPv6接口都必须具备一个链路本地地址
接口标识生成方法
  1. 手工配置
  2. 系统通过软件自动生成
  3. IEEE EUI-64规范自动生成(依据MAC地址生成)
    1. 将MAC地址中间插入FFFE,例如:00e0-fc4c-5103转换成00e0-fcff-fe4c-5103
    2. 第七位由0变为1,表示该接口标识是全球唯一因为Mac地址的第7为0表示全球唯一,1代表本地唯一,这和IPv6相反,例如
      00e0-fcff-fe4c-5103
      -----> 00000000-e0-fcff-fe4c-5103
      -----> 00000010-e0-fcff-fe4c-5103
      -----> 02e0:fcff:fe4c:5103
      -----> FE80::2E0:FCFF:FE4C:5103(对应的MAC为00e0-fc4c-5103)
    3. 如果接口未配置MAC地址,则接口EUI-64格式地址采用下述规则生成:
      1. 三层物理口及其子接口的EUI-64格式地址根据物理口的MAC地址生成,中间填充接口索引的后两个字节
      2. 对于LoopBack接口、Tunnel接口,EUI-64格式地址根据接口MAC地址生成,中间填充接口索引的后两个字节
      3. 对于Eth-Trunk接口及其子接口、VLANIF接口,EUI-64格式地址根据接口MAC地址生成,中间填充FFFE

1.3 唯一本地地址(FC00::/7)

为了代替站点本地地址的功能,同时为了这样的地址具有唯一性,避免产生像IPv4的私有地址泄露到公网而造成的问题,RFC4193定义了唯一本地地址
唯一本地地址

  • L:1=在本地网络范围内使用,0=被保留(用于以后扩展)
  • Global ID:全球唯一前缀,通过伪随机产生
  • Subnet ID:子网ID,用于划分子网
  • 概念上类似于IPv4的私网地址,仅能够在本地网络使用,在IPv6 Internet上不可被路由
  • 固定前缀为FC00::/7,分为两块,其中FC00::/8暂未定义,另一块是FD00::/8,其格式如上图

2. 组播地址(常见FF01::/8和FF02::/8)

标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。只有加入相应组播组的设备接口才会侦听发往该组播地址的报文。
 组播地址

  • 类似IPv4组播地址
  • 由前缀、标志(flag)字段、范围(scope)字段和组播组ID组成
    • Flags:表示临时或者永久
      • 前3位设为0
      • 最后一位定义地址类型
        • 0=永久组播地址
        • 1=临时组播地址
    • Scope:表示组播组的范围
      • 此字段长度为4位,除了使用组播路由协议提供信息外,路由器还要使用组播范围段来判定组播流量能否发送出去
        Scope
    • Group ID:组播组ID
      • 用于标识组播组,这个值在地址范围内是唯一的,此字段的长度为112位。其中,永久分配的组ID不收当前范围的限制,而临时组ID只能在某个特定的范围内有意义。而FF01::到FF0F::的组播地址数据保留地址段,而且也是永久组播地址。
  • 预定义组播地址
    • Node-local(节点本地范围)
      • 所有节点的组播地址:FF01::1(类似224.0.0.1)
      • 所有路由器的组播地址:FF01::2(类似224.0.0.2)
    • Link-local(链路本地范围)
      • 所有节点的组播地址:FF02::1(类似224.0.0.1)
      • 所有路由器的组播地址:FF02::2 (类似224.0.0.2)
      • 所有OSPF路由器组播地址:FF02::5(类似224.0.0.5)
      • 所有OSPF的DR路由器组播地址:FF02::6(类似224.0.0.6)
      • 所有RIP路由器组播地址:FF02::9(类似224.0.0.9)
      • 所有PIM路由器组播地址:FF02::D(类似224.0.0.13)
      • Solicited-Node组播地址:FF02::1:FFXX:XXXX/104,请求节点组播地址,类似ARP(x通过映射MAC地址后24位得到,也是链路本地地址的后24位,如果是手动配置的IPv6地址,则x为手动配置地址的后24位)
  • 站点本地范围
    • 所有路由器:FF05::2(类似224.0.0.2)
  • 全局
    • NTP协议:FF0x::101(类似224.0.1.1)

组播地址的MAC地址映射

组播地址的MAC地址映射
  • 组播IPv6报文的目的IP地址是组播IPv6地址,而目的mac地址则必须是组播mac地址,并且该地址必须与组播IPv6地址对应
  • 33-33是专门为IPv6组播预留的mac地址前缀,mac地址的后32bit从对应的组播IPv6地址的后32bit

请求节点组播地址(Solicited-Node)

请求节点组播地址
  • IPv6中特有的组播地址
    • 每个节点必须为分配给他的每个单播和任播地址加入一个组播地址,用于DAD地址重复检测
  • Solicited-Node组播地址生成过程
    • 接口ID(接口IPv6地址)的后24位:xx:xxxx
    • 前缀:FF02:0:0:0:0:1:FF,例如主机的mac为00-02-b3-1e-83-29,则自动生成的IPv6地址为fe80::0202:b3ff:fe1e:8329,那么请求节点组播地址为ff02::1:ff1e:8329

3. 任播地址

  • 作用:为多个主机或节点提供相同的服务的同时,提供冗余和负载分担的功能。目前主要用于移动IPv6,在6to4中继中也使用任播前缀2002:c058:6301::
  • 任播地址和单播地址使用相同的地址空间
  • 同一单播地址被分配给多个接口(通常属于不同的节点),仅用于路由器,不能应用于主机,不能做为IPv6报文的源地址
  • 配置时需明确表示任播地址,用来区别单播和任播ipv6 address 2001:12:1::1/64 anycast
  • 发往任播地址的数据包,被路由转发给,分配了任播地址的接口中,距离最近的一个

4. 内嵌IPv4地址的IPv6地址

用于与传统网络之间的互联互通,以使IPv4网络和IPv6网络之间能够进行无缝通信,这里使用的是IPv4地址必须是全球唯一的IPv4单播地址

  1. IPv4兼容的IPv6地址
    ::ipv4地址/96,例如::1.2.3.4/96
  2. IPv4映射的IPv6地址
    ::FFFF:ipv4地址/80,例如::FFFF:1.2.3.4/80
  3. 6to4专用地址,6to4地址可以表示为2002::/16,而一个6to4网络可以表示为2002:IPv4地址::/48(属于全球单播地址

地址配置方法

1. 手动配置

手动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)

2. 无状态自动地址分配

由接口ID生成链路本地地址,再根据路由通告报文RA包含的前缀信息自动配置本机地址。

3. 有状态自动地址分配

即DHCPv6方式。DHCPv6又分为如下两种:

  1. DHCPv6有状态自动分配
    DHCPv6服务器自动分配IPv6地址/RD前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)
  2. DHCPv6无状态自动分配
    主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器等参数,过程如下:
    1. 根据接口标识产生链路本地地址(EUI-64)
    2. 发出邻居请求,进行重复地址检测
      1. 如地址冲突,则停止自动配置,需要手工配置
      2. 如不冲突,链路本地地址生效,节点具备本地链路通信能力
        1. 主机会发送RS报文(或接收到设备定期发送的RA报文, 最大间隔600秒,最小间隔200秒)
        2. 根据RA报文中的前缀信息和接口标识得到IPv6地址

报文头部

基本报头

基本报头
固定40字节

  • Version:该值为6
  • Traffic Class:流类别,等同于IPv4中的TOS字段,表示IPv6数据报的类或优先级,主要应用于QoS
  • Flow Label:流标签,IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流IPv4中通过五元组标识一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流
  • Payload Length:有效载荷长度,指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)
  • Next Header:下一个报头,紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型,或者上层协议数据单元中的协议类型
  • Hop Limit:跳数限制,类似于IPv4中的Time to Live字段,IPv6数据报文所能经过的最跳数
    IPv6和IPv4相比,去除了IHL、Identification、Flags、Fragment Offset、Header Checksum、Options、Padding域,只增了流标签域,因此IPv6报文头的处理较IPv4大大简化,提高了处理效率。另外,IPv6为了更好支持各种选项处理,提出了扩展头的概念,新增选项时不必修改现有结构就能做到,扩展性和灵活性更高

IPv6中没有校验值(Header Checksum)的原因?

  1. 如果上层承载的是TCP或者UDP,会存在一个伪头部,可以用来校验IPv6
  2. IPv6可以携带AH扩展头部(即认证扩展报头)

扩展报头

扩展报头
扩展报头是可选的,只有需要该扩展报头对应的功能时,数据的发送者才会添加相应的扩展报头

  • 将原IPv4选项字段放入扩展报头
  • IPv6报文包含0、1或者多个扩展报头
  • 固定为8字节长度的整数倍

扩展报头种类

  1. 逐跳选项扩展报头0
    该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段。逐跳选项报头目前的主要应用有以下三种:
    1. 用于巨型载荷(载荷长度超过65535字节)
    2. 用于路由器提示,使路由器检查该选项的信息,而不是简单的转发出去
    3. 用于资源预留(RSVP,主要用于MPLS-TE)
  2. 目的选项扩展报头60
    目的选项报头携带了一些只有目的节点才会处理的信息。目前, 目的选项报文头主要应用于移动IPv6
  3. 路由扩展报头43
    路由报头和IPv4的Loose Source and Record Route选项类似,该报头能够被IPv6源节点用来强制数据包经过特定的路由器
  4. 分片扩展报头44
    同IPv4一样,IPv6报文发送也受到MTU的限制,当报文长度超过MTU时就需要将报文分段发送,而在IPv6中,分段发送使用的是分段报头使用PMTUD(路径MTU发现)检测转发路径上MTU的最小值。ipv4中想使用此机制,需要将DF位置1
  5. 认证扩展报头51(AH)
    该报头由IPsec使用,提供认证、数据完整性以及重放保护,还对IPv6基本报头中的一些字段进行保护
  6. 封装安全有效载荷扩展报头50(ESP)
    该报头由IPsec使用,提供认证、数据完整性以及重放保护和IPv6报文的加密,类似于认证报头

扩展报头规约

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

  1. IPv6基本报头
  2. 逐跳选项扩展报头0
  3. 目的选项扩展报头60
  4. 路由扩展报头43
  5. 分段扩展报头44
  6. 认证扩展报头51
  7. 封装安全有效载荷扩展报头50
  8. 目的选项扩展报头(第2次出现,指哪些被分组报文的最终目的地处理的选项)
  9. 上层协议数据报文

路由设备转发时根据基本报头中的NextHeader值来决定是否要处理扩展头,并不是所有的扩展报头都需要被转发路由设备查看和处理的。
除了目的选项扩展报头可能出现一次或者两次(一次在路由扩展报头之前,一次在上层协议数据报文之前),其余扩展报头只能出现一次

IPv6协议基础

ICMPv6

58(0x3A),即下一个扩展头为58,TCP为6,UDP为17
5大功能:地址解析、跟踪邻居状态、重复地址检测、路由器发现、重定向
报文格式
报文分类如下

  1. 差错报文:8bits类型字段中的最高bit为0,即type=[0,127]
    1. type1:目标不可达
      1. code0:没有到达目标的路由
      2. code1:与目标的通信被管理策略禁止
      3. code2:未指定
      4. code3:地址不可达
      5. code4:端口不可达
    2. type2:数据包过长
      1. 只有code0
    3. type3:超时
      1. code0:在传输中超越了跳数限制
      2. code1:分片重组超时
    4. type4:参数问题
      1. code0:遇到错误的报头字段
      2. code1:遇到无法识别的下一个报头类型
      3. code2:遇到无法识别的IPv6选项
  2. 信息报文:8bits类型字段中的最高bit为1,即type=[128,255]
    以下报文的code值均为0
    1. type128(回显请求报文)和type129(回显应答报文)
    2. 邻居发现NDP
      1. type133(路由器请求,RS消息)和type134(路由器公告,RA消息)
        1. RS消息:
          当主机刚刚接入网络并被配置为自动获取地址发送
          源地址为接口的Link Local地址或者未指定地址、目的地址为所有路由器的组播地址(FF02::2) 、数据字段为空、跳数限制255、Code为0、option为自身的mac地址
          路由器收到RS消息后立刻回送RA消息给主机,在RA消息中有主机想要的单播地址的前缀及前缀长度等信息
        2. RA消息:
          路由器周期性(最小200秒,最大600秒)地发送RA消息,或者在收到主机发送的RS消息后立刻发送
          源地址为接口的Link Local地址,目的地址是FF02::1或者为收到的RS消息中的源地址,数据包含路由器的MAC地址、MTU值、前缀信息(包含前缀有效时间默认7天和无效时间默认30天)、标志位等
      2. type135(邻居请求,NS消息)和type136(邻居通告,NA消息)涉及功能有地址解析、跟踪邻居状态和重复地址检测
        1. NS消息:
          1. 地址解析:源地址为自身IPv6地址、目的地址为邻居的请求节点组播地址、数据为自身的MAC地址
          2. 跟踪邻居状态:和地址解析相同,都是ping
          3. 重复地址检测:源地址为未指定地址、目的地址为自身的请求节点组播地址、数据为试验地址(即刚配置的地址)
        2. NA消息:
          1. 地址解析:源地址为自身IPv6地址、目的地址为邻居IPv6地址、数据为自身的MAC地址
          2. 跟踪邻居状态:和地址解析相同,都是ping
          3. 重复地址检测:如果冲突则回复,源地址为自身地址、目的地址为所有节点的组播地址(FF02::1)、数据为试验地址
      3. type137(重定向信息)
        假设主机A访问主机B:源地址为发送重定向报文的路由器接口地址、目的地址为需要重定向主机A的地址、数据中包含重定向之后的路由器接口地址和主机B的地址
    3. 多播侦听发现协议MLD=IPv4中的IGMP
      1. type130:多播听众查询
      2. type131:多播听众报告
      3. type132:多播听众退出

功能

1. 使用RS/RA(133/134)

只有路由器发现

1. 路由器发现

路由器发现功能是IPv6地址自动配置功能的基础,使用路由器请求RS133和路由器通告RA134实现
路由器发现
主机对收到的RA报文进行正确性检查

  1. IP源地址是link local地址
  2. Hop Limit(即跳数限制)为255即没有被转发过
  3. 如果有认证,则认证需要正确
  4. ICMP头部的Code为0,校验值有效,且长度至少16字节
  5. options长度大于0

RA报文中标志位

  1. M:0表示无状态自动配置生成IPv6地址,1表示需要通过有状态(DHCPv6)方式获取ipv6地址
  2. O:0表示除地址以外的其他参数需要通过无状态自动配置获取,1表示其它参数需要通过有状态方式进行获取
  3. Prf:默认路由器优先级,00中(默认)、11低

2. 使用NS/NA(135/136)

重复地址检测DAD、邻居发现、邻居状态跟踪

1. 重复地址检测DAD
  1. 接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址,尤其是在地址自动配置的时候
  2. 一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址,此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组
  3. IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文,NS报文中目标地址即为该试验地址,如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用
重复地址检测
  1. A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址
  2. A向FC00::1的Solicited-Node组播组发送一个NS报文(源地址为未指定地址,目标地址为FF02::1:FF00:1,试验地址放在data中)进行重复地址检测
  3. 当B收到该NS报文后,有两种处理方法:
    1. 如果FC00::1是B的试验地址,则B放弃使用这个地址作为接口地址,并且不会发送NA报文
    2. 如果B发现FC00::1是已经正常使用的地址,B会向FF02::1发送一个NA报文,该消息中会包含FC00::1如果两端同时配置相同地址,然后均收到NA报文,那么这个地址会被弃用
  4. A收到这个消息后就会发现自身的试验地址是重复的,被标识为duplicated状态

IPv6地址生存时间
Preferred lifetime(首选存活时间)和Valid lifetime(失效时间)之间为Deprecated状态,当地址处于Deprecated状态,地址不能主动的发起连接只能是被动的接受连接,这也是为了保证上层应用而设计的,但是过了valid lifetime时间,地址就变为invalid,这时任何连接都会down掉

2. 地址解析(即邻居发现)
  1. ND本身基于ICMPv6实现,以太网协议类型为0x86DD(ARP是0x0806),即IPv6报文,IPv6下一个报头字段值为58
  2. 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议
  3. 可以使用三层的安全机制避免地址解析攻击
  4. 使用组播方式(Solicited-Node,FF02::1:FFXX:XXXX/104)发送请求报文,减少了二层网络的性能压力
  5. 使用两种报文:邻居请求NS135(组播发送)、邻居通告NA136(单播回复)
    地址解析
    NA报文中使用NS报文中的Host A的链路层地址进行单播
    例如A的地址为2000::1、B的地址为2000::2,
    NS报文的源地址为2000::1、目的地址为ff02::1:ff00:2;
    NA报文的源地址为2000::2、目的地址为2000::1。
    NA报文中3个标志位:R(置位代表路由器)、S(置位代表发送邻居通告是为了响应某个邻居的请求)、O(置位表示邻居通告中的消息覆盖已有的条目信息)
3. 跟踪邻居状态

节点需要维护一张邻居表(邻居表为空则状态显示Empty),每个邻居都有相应的状态,状态之间可以迁移,5种邻居状态:未完成(Incomplete)、可达(Reachable)、陈旧(Stale,未知是否可达,即长时间无连接之后的稳定状态)、延迟(Delay)、探查(Probe)
跟踪邻居状态
以地址解析中,假设A、B之前从未通信

  1. A先发送NS报文,并生成缓存条目,邻居状态为Incomplete
  2. 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后(10秒)邻居状态由Incomplete变为Empty,即删除表项
  3. 经过邻居可达时间(30秒),邻居状态由Reachable变为Stale
  4. 如果在Reachable状态,A收到B的非请求NA报文且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale
  5. 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求
  6. 在一段固定时间(5秒)内,若无NA应答则变为Probe,若有NA应答则变为Reachable
  7. 在Probe状态,A周期性(1秒)单播NS,发送固定次数(默认3次)后,有应答则邻居状态变为Reachable,否则30秒之后邻居状态变为Empty,即删除表项
    邻居状态

3. 使用重定向(137)

只有重定向

1. 重定向

路由器可以发送重定向报文,但是不能处理收到的重定向报文
网关设备发现报文从其它网关设备转发更好时,就会发送重定向报文给发送者,让报文发送者选择另一个网关设备。Type=137,报文中携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。
重定向
HostA和HostB通信,HostA的默认网关设备是RouterA。
RouterA接收到HostA发送的报文以后会发现实际上HostA直接发送给RouterB更好,它将发送一个重定向报文给主机A,其中报文中更好的路径下一跳地址为RouterB,DestinationAddress为HostB
HostA接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往HostB的报文就直接发送给RouterB

当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文(触发重定向报文的条件)

  1. 报文的目的地址不是一个组播地址
  2. 报文并非通过路由转发给设备即主机邻居发送的
  3. 报文的下一跳出接口是接收该报文的接口
  4. 报文的最佳下一跳IP地址和报文的源IP地址处于同一网段
  5. 设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在

数据包从同接口进又从该接口出,并满足如下条件(数据报文是主机邻居发送的,目的地址不是组播)就会触发路由器发送重定向报文,第一份数据依旧会由路由器转发,后续的报文就直接通过最优路径访问了

IPv6过渡技术

IPv6过渡技术
  • IPv6与IPv4共存技术:
    • 双协议栈:节点需要同时支持IPv6和IPv4协议栈。
    • 隧道:IPv6报文作为IPv4的载荷,在IPv4网络中连接多个IPv6孤岛
  • IPv6与IPv4互通技术:提供IPv6与IPv4互相访问的技术,适用于IPv6与IPv4共存,而两者又有互相通讯的需求

双栈协议

双栈协议
所有设备必须支持IPv4/IPv6协议栈,连接双栈网络的接口必须同时配置IPv4地址和IPv6地址

IPv6 over IPv4隧道技术

 IPv6 over IPv4隧道技术
通过隧道技术,使IPv6报文在IPv4网络中传输,实现IPv6网络之间的孤岛互连
IPv6 over IPv4隧道分类

  1. 手动隧道包括6over4手动隧道和GRE隧道;
  2. 自动隧道包括IPv4兼容IPv6自动隧道(已经弃用)、6to4隧道和ISATAP隧道

1. 6over4手动隧道(过渡初期使用)

6over4手动隧道
特别注意:在IPv4数据中承载IPv6数据,上层协议号为41

2. 4over6手动隧道(过渡后期使用)

使IPv4报文在IPv6网络中传输
4over6

3. GRE手动隧道

GRE隧道
6over4手动隧道的一种,手工指定隧道的端点地址,GRE承载IPv6协议
GRE协议号为47;GRE头部不带认证4字节,带认证则8字节;GRE使用协议ID来标识上层封装(0x0800为以太网)

4. IPv4兼容IPv6(目前已经被6to4隧道所取代)

IPv4兼容IPv6
采用IPv4兼容地址,即::IPv4/96,要求每台主机须有合法的IP地址,即唯一的单播地址

5. 6to4隧道

6to4隧道1
6over4自动隧道的一种,采用6to4专用地址,6to4地址可以表示为2002::/16,而一个6to4网络可以表示为2002:IPv4地址::/48用IPv4地址作为网络标识,例如:1.2.3.10对应的地址是2002:102:3a::/48
地址格式

  • FP:可聚合全球单播地址的格式前缀,其值为001
  • TLA:顶级聚合标识符,有13个比特位,其二进制值为0.0000.0000.0010
  • SLA:站点级聚合标识符16bit,由用户自己定义,可用于划分子网

如果连接多个6to4网络,通过SLA区分,共用一个隧道
6to4隧道2
6to4中继,实现6to4网络和IPv6普通网络互通。
6to4隧道3
6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址本质是通过静态路由的方式指定下一跳为6to4地址,该下一跳为路由器我们称之为6to4中继,隧道的IPv4目的地址依然从下一跳的6to4地址中获得。

中继
R1上挂的IPv6孤岛使用6to4地址空间,R3上的IPv6孤岛也是6to4空间,而R2这台因特网上的6to4路由器同时也连接到了IPv6的因特网和IPv4因特网,因此他具有IPv6公网的路由。
所以,R1、R3下的两个6to4孤岛的互相访问通过6to4地址进行,但是R1或R3如果需要访问非6to4的IPv6网络就需要R2了,R2此时是一台6to4中继路由器。
R2通过其自身的一个IPv4公网IP,得到一个6to4的IPv6全球可聚合单播地址,这个IPv6地址用于响应其他6to4路由器的隧道建立请求

6. ISATAP隧道

ISATAP隧道
6over4自动隧道的一种不支持路由器到路由器,采用ISATAP隧道专用地址
ISATAP隧道同样使用了内嵌IPv4地址的特殊IPv6地址形式,只是和6to4不同的是,6to4是使用IPv4地址做为网络前缀,而ISATAP用IPv4地址做为接口标识
ISATAP隧道专用地址
u:IPv4地址是全局唯一的,则u位为1
g:IEEE 群体/个体标志
由于ISATAP是通过接口标识来表现的,所以ISATAP地址有全局单播地址、链路本地地址、ULA地址、组播地址等形式。ISATAP地址的前64位是通过向ISATAP路由器发送请求来得到的,它可以进行地址自动配置。在ISATAP隧道的两端设备之间可以运行ND协议。ISATAP隧道将IPv4网络看作一个非广播的点到多点的链路
如图,在IPv4网络内部有两个双栈主机PC2和PC3,它们分别有一个私网IPv4地址,要使其具有ISATAP功能,需要进行如下操作:

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

7. NAT64

NAT64
NAT64技术实际上是一种协议转换技术,能够将分组在V4及V6格式之间灵活转换。IPv6过渡中的协议翻译技术就是将IPv6数据包的每个字段与IPv4数据包中的字段建立起一一映射的关系,从而在两个网络的边缘实现数据报文的转换。

追问

PMTU的工作过程

在IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行
PMTU的工作过程
整条传输路径需要通过 条链路,每条链路的MTU分别是1500、1500、1400、1300。

  1. 当源节点发送一个分片报文的时候,首先按照PMTU为1500进行分片并发送分片报文
  2. 当到达MTU为1400的出接口时,路由器返回Packet Too Big(ICMP,type2)错误,同时携带MTU值为1400的信息
  3. 源节点接收到之后会将报文重新按照PMTU为1400进行分片并再次发送一个分片报文,当分片报文到达 MTU值为1300的出接口时,同样返回Packet Too Big错误,携带MTU值为1300的信息
  4. 之后源节点重新按照PMTU为1300进行分片并发送分片报文,最终到达目的地,这样就找到了该路径的 PMTU

两台 ipv6 客户端的互访过程

  1. 先检查目标地址与本机地址是否同一网段,如果不在同一网段是否可达(查路由表)
  2. 引入数据的封装,从高往低,封装到二层时需要知道对方的MAC地址
  3. 如果在同一网段直接发送NS请求,请求对方地址的MAC地址,如果不在同一网段,则请求网关的MAC地址
  4. NS/NA的过程(详细讲解)
  5. 获得MAC地址后完成封装
  6. 封装完后讲数据包的交互过程

IPv4与IPV6 qos的区别

  1. traffic-class等同于IPv4中的TOS字段,表示IPv6报文的类或优先级
  2. ipv6的报文中多了20位的流标签,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流
  3. 引入QOS(QoS信令扩展)
    IPv6可以比较方便地支持QoS信令的实现,具体的做法是,根据IPv6的Hop by Hop扩展头对信令进行定义。由于每个IPv6节点都必须处理Hop by Hop扩展头,这样就可以实现QoS信令。即通过在数据流的第一个数据包中携带有关信息,在经过逐跳处理和预留以后到达接收端,接收端根据情况将有关信息回传发送方,这样就可以进行有QoS保证的数据发送了。

ipv6对移动技术的支持用到了哪些扩展报头

用到了目的选项扩展报头,类型是60

移动技术

1. 产生背景

因特网上的一个节点在改变了其在网络上的接入点以后,如果不重新配置其IP地址,那么路由器就不能识别此节点,它就不能继续与网上的其它节点进行通信,移动IP就是为解决这个问题而提出的

2. 技术定义

移动IP提供了一种IP路由机制,使移动节点可以以一个永久的IP地址连接到任何链路上。移动IP可以看作是一个路由协议,只是与其它路由协议相比,移动IP具有特殊的功能,它的目的是将数据包路由到那些可能一直在快速地改变位置的移动节点上

3. 移动机制

Node A到Link 1上,它有一个地址A1,这个地址A1是可以通过Router 1到达的,当Node A没有发生移动时,Node B与Node A通信时,Node B发送的数据包会按照现有的路由方式到达Node A
移动前
当Node A发生了移动,从Link 1移动到Link 2时,如果Node A不改变其IP地址,Node B发送的数据包按照现有的以前缀为基础的路由方式就不能够到达Node A了
移动后
IPv6通过以下步骤解决这个问题:

  1. Router 2会定期广播发送RA消息,带有本地链路上的前缀信息,Node A接收到这个消息后,知道自己发生了移动,它会根据新的前缀信息通过地址自动配置得到一个新的地址A2
  2. Node A会发送一个信息包M2给Router 1,这个信息包告诉Router 1现在Node A的新地址A2,此后,Router 1再发现有需要送到Node A的原来的地址A1的数据包,它会把这个数据包截获,然后把这个包作为净荷,在其上面再加上一层IPv6报头,把新的数据包发送到Node A的新地址A2,这个过程应用的是隧道技术
  3. 假如Node B发送数据包给Node A,它并不知道Node A已经发生了移动,此时它会把这个数据包继续发送给Node A原来的地址A1
  4. Node B发送的数据包到达Router 1以后,Router 1会截获这个数据包,同时把这个数据包转发到Node A的新地址A2
  5. Node A收到Router 1转发过来的数据包以后,通过检查这个数据包的源地址,它知道Node B想与它进行通信,于是它会发送一个信息包M3给Node B,告诉自己的新地址A2
  6. Node B收到这个数据包以后,会记录下Node A的新地址A2,这样如果再有数据包需要发给Node A,它会直接把数据包发给地址A2,至此Node A和Node B之间可以实现双向通信
  7. 若有其余节点想与Node A进行通信,其建立通信的过程与Node B类似

4. ipv6解决移动问题的措施

  1. 黑洞检测
  2. 路由报头
  3. 动态家乡代理地址发现机制
  4. 透明性的实现