第21章_IPv6基础

  • 20世纪80年代,IETF(Internet Engineering Task Force,因特网工程任务组)发布RFC791,即IPv4协议,标志IPv4正式标准化。在此后的几十年间,IPv4协议成为最主流的协议之一。无数人在IPv4的基础上开发出了各种应用,并且对这个协议做了各种补充和增强,支撑起了今天繁荣的互联网。
  • 随着Internet规模的扩大,IPv4地址空间已经消耗殆尽。针对IPv4的地址短缺问题,曾先后出现过CIDR和NAT等临时性解决方案,但是CIDR和NAT都有各自的弊端,并不能作为IPv4地址短缺问题的彻底解决方案。另外,安全性、QoS(服务质量)、简便配置等要求也表明需要一个新的协议来根本解决目前IPv4面临的问题。
  • IETF在20世纪90年代提出了下一代互联网协议-IPv6,IPv6支持几乎无限的地址空间。IPv6使用了全新的地址配置方式,使得配置更加简单。IPv6还采用了全新的报文格式,提高了报文处理的效率、安全性,也能更好的支持QoS。
  • 本章节描述了为什么需要从IPv4向IPv6进行演进,以及一些关于IPv6的基础知识。

1.IPv4现状

  • 2011年2月3日,IANA(Internet Assigned Numbers Authority,因特网地址分配组织)宣布将其最后的468万个IPv4地址平均分配到全球5个RIR(Regional Internet Registry,区域互联网注册管理机构),此后IANA再没有可分配的IPv4地址。

image-20231130102853336

  • IANA,是负责全球互联网IP地址编号分配的机构。IANA将部分IPv4地址分配给大洲级的RIR,再由各RIR进行所辖区域内地址分配,五大RIR包括:
    • RIPE:Reseaux IP Europeans,欧洲IP地址注册中心,服务于欧洲、中东地区和中亚地区;
    • LACNIC:Latin American and Caribbean Internet Address Registry,拉丁美洲和加勒比海Internet地址注册中心,服务于中美、南美以及加勒比海地区;
    • ARIN:American Registry for Internet Numbers,美国Internet编号注册中心,服务于北美地区和部分加勒比海地区;
    • AFRINIC:Africa Network Information Centre,非洲网络信息中心,服务于非洲地区;
    • APNIC:Asia Pacific Network Information Centre,亚太互联网络信息中心,服务于亚洲和太平洋地区。
  • 实践证明IPv4是一个非常成功的协议,它本身也经受住了Internet从少量计算机组网发展到目前上亿台计算机互联的考验。但该协议是几十年前基于当时的网络规模而设计的。在今天看来,IPv4的设计者们对于Internet的估计和预想显得很不充分。随着Internet的扩张和新应用的不断推出,IPv4越来越显示出它的局限性。
  • Internet规模的快速扩张是当时完全没有预料到的,特别是近十年来,更是爆炸式增长,已经走进了千家万户,人们的日常生活已经离不开它。但正因为发展太快,IP地址空间耗尽的问题迫在眉睫。
  • 20世纪90年代,IETF推出NAT(Network Address Translation,网络地址转换)与CIDR(Classless Inter Domain Routing,无类别域间路由)等技术来推迟IPv4地址耗尽发生的时间点。但是这些过渡方案只能减缓地址枯竭的速度,并不能从根本上解决问题。

2.IPv6优势

image-20231130103011618

  • 近乎无限的地址空间:与IPv4相比,这是最明显的好处。IPv6地址是由128 bit构成,单从数量级来说,IPv6所拥有的地址容量是IPv4的约8×1028倍,号称可以为全世界的每一粒沙分配一个网络地址。这使得海量终端同时在线,统一编址管理,变为可能,为万物互连提供了强有力的支撑。
  • 层次化的地址结构:正因为有了近乎无限的地址空间,IPv6在地址规划时就根据使用场景划分了各种地址段。同时严格要求单播IPv6地址段的连续性,禁止出现IPv4的地址“打洞”现象,便于IPv6路由聚合,缩小IPv6地址表规模。
  • 即插即用:任何主机或者终端要获取网络资源,传输数据,都必须有明确的IP地址。传统的分配IP地址方式是手工或者DHCP自动获取,除了上述两个方式外,IPv6还支持==SLAAC==(Stateless Address Autoconfiguration,无状态地址自动配置)。
  • 端到端网络的完整性:大面积使用NAT技术的IPv4网络,从根本上破坏了端到端连接的完整性。使用IPv6之后,将不再需要NAT网络设备,上网行为管理、网络监管等将变得简单,与此同时,应用程序也不需要开发复杂的NAT适配代码。
  • 安全性得到增强:==IPsec==( Internet Protocol Security,因特网协议安全协议)最初是为IPv6设计的,所以基于IPv6的各种协议报文(路由协议、邻居发现等),都可以端到端地加密,当然该功能目前应用并不多。而IPv6的数据面报文安全性,跟IPv4+IPsec的能力,基本相同。
  • 可扩展性强:IPv6的扩展属性报文头部,并不是主数据包的一部分,但是在必要的时候,这些扩展头部会插在IPv6基本头部和有效载荷之间,能够协助IPv6完成加密功能、移动功能、最优路径选路、QoS等,并可提高报文转发效率。
  • 移动性改善:当一个用户从一个网段移动到另外一个网段,传统的网络会产生经典式“三角式路由”,IPv6网络中,这种移动设备的通信,可不再经过原“三角式路由”,而做直接路由转发,降低了流量转发的成本,提升了网络性能和可靠性。
  • QoS可得到进一步增强:IPv6保留了IPv4所有的QoS属性,额外定义了20 Byte的流标签字段,可为应用程序或者终端所用,针对特殊的服务和数据流,分配特定的资源,目前该机制并没有得到充分的开发和应用。

3.IPv6地址格式

  • IPv4地址空间已经消耗殆尽,近乎无限的地址空间是IPv6的最大优势。

image-20231130103214091

  • 在因特网发展初期,IPv4以其协议简单、易于实现、互操作性好的优势而得到快速发展。然而,随着因特网的迅猛发展,IPv4地址不足等设计缺陷也日益明显。IPv4理论上仅仅能够提供的地址数量是43亿,但是由于地址分配机制等原因,实际可使用的数量还远远达不到43亿。因特网的迅猛发展令人始料未及,同时也带来了地址短缺的问题。针对这一问题,曾先后出现过几种解决方案,比如CIDR和NAT。但是CIDR和NAT都有各自的弊端和不能解决的问题,在这样的情况下,IPv6的应用和推广便显得越来越急迫。

  • IPv6是Internet工程任务组(IETF)设计的一套规范,它是网络层协议的第二代标准协议,也是IPv4(Internet Protocol Version 4)的升级版本。IPv6与IPv4的最显著区别是,IPv4地址采用32比特标识,而IPv6地址采用128比特标识。128比特的IPv6地址可以划分更多地址层级、拥有更广阔的地址分配空间,并支持地址自动配置。

  • IPv4(Internet Protocol version 4):互联网协议(IP)的当前版本。IPv4地址为32 bit编码,通常用4个点分十进制数表示。每个地址由一个网络码、(可选)子网码、主机码组成。网络码和(可选)子网码用于路由,主机码用于在网络或子网内部寻址到一台具体主机。
  • IPv6(Internet Protocol version 6):IETF设计的一套规范,是IPv4的升级版本。它是网络层协议的第二代标准协议,也被称为Ipng(IP Next Generation)。IPv6和IPv4之间最显著的区别就是IP地址的长度从32 bit升为128 bit。

4.IPv6基本报头

  • IPv6包头由一个IPv6基本包头(必须存在)和多个扩展包头(可能不存在)组成。
  • 基本包头提供报文转发的基本信息,会被转发路径上的所有设备解析。

image-20231130103551975

image-20231130103411788

IPv6基本包头字段解释如下

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

5.IPv6拓展包头

image-20231130103613655

image-20231130103628982

  • IPv4包头包含可选字段Options,内容涉及Security、Timestamp、Record route等,这些Options可以将IPv4包头长度从20 Byte扩充到60 Byte。携带这些Options的IPv4报文在转发过程中往往需要中间路由转发设备进行软件处理,对于性能是个很大的消耗,因此实际中也很少使用。
  • IPv6将这些Options从IPv6基本包头中剥离,放到了扩展包头中,扩展包头被置于IPv6基本包头和上层协议数据单元之间。一个IPv6报文可以包含0个、1个或多个扩展包头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40 Byte限制,这样便于日后扩充新增选项。这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展包头总是8 Byte长度的整数倍。
  • 当使用多个扩展包头时,前面包头的Next Header字段指明下一个扩展包头的类型,这样就形成了链状的包头列表。
  • 当超过一种扩展包头被用在同一个IPv6报文里时,包头必须按照下列顺序出现:
    1. 逐跳选项包头:主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段。
    2. 目的选项包头:携带了一些只有目的节点才会处理的信息。
    3. 路由包头:IPv6源节点用来强制数据包经过特定的设备。
    4. 分段包头:当报文长度超过MTU(Maximum Transmission Unit,最大传输单元)时就需要将报文分段发送,而在IPv6中,分段发送使用的是分段包头。
    5. 认证包头(AH):该包头由IPsec使用,提供认证、数据完整性以及重放保护。
    6. 封装安全净载包头(ESP):该包头由IPsec使用,提供认证、数据完整性以及重放保护和IPv6数据包的保密。

6.IPv6报文处理机制

image-20231130103838294

7.IPv6地址

7.1IPv6地址

  • IPv6地址的长度为128 bit。一般用冒号分割为8段,每一段16 bit,每一段内用十六进制表示。

image-20231130104103079

  • 与IPv4地址类似,IPv6也用“IPv6地址/掩码长度”的方式来表示IPv6地址。
    • 例如2001:0DB8:2345:CD30:1230:4567:89AB:CDEF/64

image-20231130104120671

7.2IPv6地址缩写规范

  • 为了书写方便,IPv6可采用以下规则进行缩写。

image-20231130104146664

7.3IPv6地址分类

  • 根据IPv6地址前缀,可将IPv6地址分为为单播地址、组播地址和任播地址。

image-20231130104253798

image-20231130104314767

  • 单播地址(Unicast Address):标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。==在IPv6中,一个接口拥有多个IPv6地址是非常常见的现象。==除了全球单播地址、唯一本地地址、链路本地地址这三种地址之外,IPv6还有一些特殊单播地址的存在:
    • 未指定地址0:0:0:0:0:0:0:0/128 或者::/128。该地址作为某些报文的源地址,比如作为重复地址检测时发送的邻居请求报文(NS)的源地址,或者DHCPv6初始化过程中客户端所发送的请求报文的源地址。
    • 环回地址0:0:0:0:0:0:0:1/128 或者::1/128,与IPv4中的127.0.0.1作用相同,用于本地回环,发往::/1的数据包实际上就是发给本地,可用于本地协议栈环回测试。
  • 组播地址(Multicast Address):标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。只有加入相应组播组的设备接口才会侦听发往该组播地址的报文。
  • 任播地址(Anycast Address):任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
  • IPv6没有定义广播地址(Broadcast Address)。在IPv6网络中,所有广播的应用层场景将会被IPv6组播所取代。

7.4IPv6单播地址

7.4.1IPv6单播地址结构

  • 一个IPv6单播地址可以分为如下两部分:
    • ==网络前缀==(Network Prefix):n bit,相当于IPv4地址中的网络ID。
    • ==接口标识==(Interface Identify):(128-n)bit ,相当于IPv4地址中的主机ID。
  • 常见的IPv6单播地址如全球单播地址、链路本地地址等,要求网络前缀和接口标识必须为 64 bit。

image-20231130104734876

全球单播地址中,高位前3 bit为000的地址可以采用非64 bit的网络前缀,这部分地址不在本课程涉及的范围中。

image-20231130104755722

  • 全球单播地址带有固定前缀,类似于IPv4中的公网地址。

image-20231130104822529

  • 链路本地单播地址前缀为FE80::/10
  • 单播地址主要包含全球单播地址和链路本地地址。全球单播地址(例如2000:/3)带有固定的地址前缀,即前三位为固定值001。其地址结构是一个三层结构,依次为全球路由前缀、子网标识和接口标识。全球路由前缀由RIR和互联网服务供应商(ISP)组成,RIR为ISP分配IP地址前缀。子网标识定义了网络的管理子网。
  • 链路本地单播地址的前缀为FE80:/10,表示地址最高10位值为1111111010。前缀后面紧跟的64位是接口标识,这64位已足够主机接口使用,因而链路本地单播地址的剩余54位为0。本示例展示了上述两种单播地址类型。

7.4.2IPv6单播地址接口标识

  • 接口标识可通过三种方法生成:
    • ==手工配置==
    • ==系统自动生成==
    • ==通过IEEE EUI-64规范生成==
  • 其中EUI-64规范最为常用,此规范将接口的MAC地址转换为IPv6接口标识。

image-20231130105008838

  • 接口标识的长度为64 bit,用于标识链路上的接口。在每条链路上,接口标识必须唯一。接口标识有许多用途,最常见的用法就是黏贴在链路本地地址前缀后面,形成接口的链路本地地址。或者在无状态自动配置中,黏贴在获取到的IPv6全球单播地址前缀后面,构成接口的全球单播地址。
  • IEEE EUI-64(64-bit Extended Unique Identifier)规范
    • 这种由MAC地址产生IPv6地址接口标识的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时,只需要获取一个IPv6前缀就可以与接口标识形成IPv6地址。
    • 使用这种方式最大的缺点就是某些恶意者可以通过二层MAC推算出三层IPv6地址。

7.4.3全球单播地址 - GUA

  • GUA(Global Unicast Address,全球单播地址),也被称为可聚合全球单播地址。该类地址全球唯一,用于需要有互联网访问需求的主机,相当于IPv4的公网地址。

image-20231130105053446

  • 可以向运营商申请GUA或者直接向所在地区的IPv6地址管理机构申请。

7.4.4唯一本地地址 - ULA

  • ULA(Unique Local Address,唯一本地地址)是IPv6私网地址,只能够在内网中使用。该地址空间在IPv6公网中不可被路由,因此不能直接访问公网。

image-20231130105123557

7.4.5链路本地地址 - LLA

  • LLA(Link-Local Address,链路本地地址)是IPv6中另一种应用范围受限制的地址类型。LLA的有效范围是本地链路,前缀为FE80::/10。

image-20231130105144294

7.5IPv6组播地址

7.5.1IPv6组播地址

image-20231130105243496

  • IPv6组播地址各字段值对应的组播组类型和范围:
    • Flags:
      • 0000表示永久分配 ;
      • 0001表示 临时的。
    • Scope:
      • 0:预留;
      • 1:节点本地范围;单个接口有效,仅用于Loopback通讯。
      • 2:链路本地范围;例如FF02::1。
      • 5:站点本地范围;
      • 8:组织本地范围;
      • E:全球范围;
      • F:预留。
  • 所有IPv6组播地址都以FF开始。
  • IPv6为需要使用组播发送数据的协议预留了一些组播组。

image-20231208144300961

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

7.5.2被请求节点组播地址

  • 当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。该地址主要用于邻居发现机制地址重复检测功能。被请求节点组播地址的有效范围为本地链路范围。

image-20231130105353586

  • 被请求节点组播组地址的应用场景举例:在IPv6中,ARP及广播都被取消,当设备需要请求某个IPv6地址对应的MAC地址时,设备依然需要发送请求报文,但是该报文是一个组播报文,其目的IPv6地址是目标IPv6单播地址对应的被请求节点组播地址,由于只有目标节点才会侦听这个被请求节点组播地址,所以该组播报文可以被目标节点所接收,同时不会占用其他非目标节点的网络性能。

7.6IPv6任播地址

  • 任播地址标识一组网络接口(通常属于不同的节点)。任播地址可以作为IPv6报文的源地址,也可以作为目的地址。

image-20231130105451100

  • 任播过程涉及一个任播报文发起方和一个或多个响应方。
    • 任播报文的发起方通常为请求某一服务(例如,Web服务)的主机。
    • 任播地址与单播地址在格式上无任何差异,唯一的区别是一台设备可以给多台具有相同地址的设备发送报文。
  • 网络中运用任播地址有很多优势:
    • 业务冗余。比如,用户可以通过多台使用相同地址的服务器获取同一个服务(例如,Web服务)。这些服务器都是任播报文的响应方。如果不是采用任播地址通信,当其中一台服务器发生故障时,用户需要获取另一台服务器的地址才能重新建立通信。如果采用的是任播地址,当一台服务器发生故障时,任播报文的发起方能够自动与使用相同地址的另一台服务器通信,从而实现业务冗余。
    • 提供更优质的服务。比如,某公司在A省和B省各部署了一台提供相同Web服务的服务器。基于路由优选规则,A省的用户在访问该公司提供的Web服务时,会优先访问部署在A省的服务器,提高访问速度,降低访问时延,大大提升了用户体验。

7.7IPv6无状态地址自动配置

  • 网络节点向相连的路由器发送RS,请求地址前缀信息。
  • 路由器通过发送路由器通告RA,回复地址前缀信息。

image-20231208144908411

  • IPv6支持无状态地址自动配置,无需使用诸如DHCP之类的辅助协议,主机即可获取IPv6前缀并自动生成接口ID。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:

  • RA报文:每台路由器为了让二层网络上的主机和其它路由器知道自己的存在,定期以组播方式发送携带网络配置参数的RA报文。RA报文的Type字段值为134。

  • RS报文:主机接入网络后可以主动发送RS报文。RA报文是由路由器定期发送的,但是如果主机希望能够尽快收到RA报文,它可以立刻主动发送RS报文给路由器。网络上的路由器收到该RS报文后会立即向相应的主机单播回应RA报文,告知主机该网段的默认路由器和相关配置参数。RS报文的Type字段值为133。

7.8EUI-64规范

  • 将==FFFE==插入MAC地址的前24位与后24位之间,
  • 并将第7位的值==取反==(比如0改为1)即可生成接口ID。

image-20231208145055704

  • 为了通过IPv6网络进行通信,各接口必须获取有效的IPv6地址,以下三种方式可以用来配置IPv6地址的接口ID:
    • 网络管理员手动配置;
    • 通过系统软件生成;
    • 采用扩展唯一标识符(EUI-64)格式生成。
  • 就实用性而言,EUI-64格式是IPv6生成接口ID的最常用方式。IEEEEUI-64标准采用接口的MAC地址生成IPv6接口ID。MAC地址只有48位,而接口ID却要求64位。MAC地址的前24位代表厂商ID,后24位代表制造商分配的唯一扩展标识。
  • MAC地址的第七高位是一个U/L位,值为0时表示MAC地址全局唯一,值为1时表示MAC地址本地唯一。
  • 在MAC地址向EUI-64格式的转换过程中,在MAC地址的前24位和后24位之间插入了16比特的FFFE,并将U/L位的值从0变成了1,这样就生成了一个64比特的接口ID,且接口ID的值全局唯一。接口ID和接口前缀一起组成接口地址。

7.9IPv6无状态地址DAD检查

  • 当为接口配置IPv6地址时,DAD用来在本地链路范围内检测将要使用的IPv6地址是否唯一。

image-20231208145724675

  • 设备在给接口分配IPv6单播地址之前会进行重复地址检测(DAD),确认是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址,此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-nodes组播组和Solicited-node组播组。Solicited-node组播组由单播或任播地址的后24位加上地址前缀FF02:0:0:0:0:1:FF00:/104组成。例如,本示例中配置的试验地址为2000::1,该地址被加入Solicited-node组播组FF02:1:FF00:1
  • IPv6重复地址检测技术和IPv4中的免费ARP类似:用于地址分配或主机连接网络时检测重复的IPv4主机地址。节点向一个自己将使用的试验地址所在的Solicited-node组播组发送一个以该试验地址为请求的目标地址的邻居请求(NS)报文,如果收到某个其它站点回应的邻居通告(NA)报文,就证明该地址已被网络上使用,节点将不能使用该试验地址进行通信。这种情况下,网络管理员需要手动为该节点分配另外一个地址。

8.IPv6地址配置

8.1主机和路由器的IPv6地址

  • 一般情况下,主机和路由器的单播IPv6地址以及加入的组播地址如下所示:

image-20231208150341256

8.2IPv6单播地址业务流程

  • 一个接口在发送IPv6报文之前要经历地址配置、DAD、地址解析这三个阶段,NDP(Neighbor Discovery Protocol,邻居发现协议)扮演了重要角色。

image-20231208150439284

8.3NDP

  • RFC2461定义了NDP,该RFC后来被RFC4861替代。
  • NDP使用ICMPv6报文实现其功能。

image-20231208150501434

  • 无状态自动配置是IPv6的一个亮点功能,它使得IPv6主机能够非常便捷地接入到IPv6网络中,即插即用,无需手工配置繁冗的IPv6地址,无需部署应用服务器(例如DHCP服务器)为主机分发地址。无状态自动配置机制使用到了ICMPv6中的路由器请求报文(Router Solicitation)及路由器通告报文(Router Advertisement)。
  • 地址解析过程中使用了两种ICMPv6报文:邻居请求(Neighbor Solicitation)和邻居通告(Neighbor Advertisement)。
  • 重复地址检测使用ICMPv6 NS和ICMPv6 NA报文确保网络中无两个相同的单播地址,所有接口在使用单播地址前都需要做DAD。

8.4IPv6动态地址配置

image-20231208150537392

  • 主机根据RA中的地址前缀,并结合本地生成的64 bit接口标识(例如EUI-64),生成单播地址。
  • 仅可以获得IPv6地址信息,无法获得NIS、SNTP服务器等参数,需要配合DHCPv6或者手工配置来获取其他配置信息。
  • IPv6支持地址有状态(stateful)和无状态(stateless)两种自动配置方式,通过ICMPv6 RA报文中的M标记(Managed Address Configuration Flag)和O标记(Other Stateful Configuration Flag)来控制终端自动获取地址的方式。
  • 有状态地址配置(DHCPv6 ),M=1,O=1:
    • 采用DHCPv6协议,IPv6客户端将从DHCPv6服务器端获取完整的128 bit IPv6地址,同时包括DNS、SNTP服务器等地址参数。
    • 此外,DHCPv6服务器端将会记录该地址的分配情况(这也是为什么被称为有状态)
    • 此方法配置较为复杂,且对DHCPv6服务器端的性能要求较高。
    • 有状态地址配置多用于公司内部有线终端的地址分配,便于对地址进行管理。
  • 无状态地址配置,M=0,O=0:
    • 采用ICMPv6协议
      • 使能了ICMPv6 RA功能的路由器会周期性的通告该链路上的IPv6地址前缀。
      • 另一种情况,主机发送路由器查询(ICMPv6 RS)报文,路由器回复RA报文告知该链路IPv6地址前缀。
    • 主机根据路由器回应的RA报文,获得IPv6地址前缀信息,使用该地址前缀,加上本地产生的接口标识,形成单播IPv6地址。
    • 若主机还想获得其他配置信息,可以通过DHCPv6来获得除地址外的其他信息。当使用这种方式时,M=0,O=1。
    • 无状态地址配置的关键在于路由器完全不关心主机的状态如何,是否在线等,所以称为无状态。
    • 无状态地址配置多用于物联网等终端较多,且终端不需要除地址外其他参数的场景。
  • DNS(Domain Name System,域名系统):一种将用户容易记忆的域名映射为网络设备能够识别的IPv6地址的机制。
  • NIS(Network Information System,网络信息服务):用来管理电脑网络中所有与电脑系统管理相关配置文件的系统。
  • SNTP(Simple Network Time Protocol,简单网络时钟协议 ):由 NTP 改编而来,主要用来同步因特网中计算机的时钟。

8.5DAD

  • 无论通过何种方式配置了IPv6单播地址,主机或路由器都会:
    • 通过ICMPv6报文进行DAD
    • 仅当DAD通过之后才会使用该单播地址

image-20231208151808258

  • 假设R1为已在线设备,IPv6地址为2001::FFFF/64。PC上线之后,也配置了相同的IPv6地址,在正式使用这个地址之前,PC会对此地址做DAD,过程如下:
    1. PC向链路上以组播的方式发送一个==NS报文==,该NS的源IPv6地址为“::”,目的IPv6地址为要进行DAD的2001::FFFF对应的被请求节点组播地址,也就是FF02::1:FF00:FFFF。这个NS里包含着要做DAD的目标地址2001::FFFF
    2. 链路上的节点都会收到这个组播的NS报文,没有配置2001::FFFF的节点接口由于没有加入该地址对应的被请求节点组播组,因此在收到这个NS的时候默默丢弃。而R1在收到这个NS后,由于它的接口配置了2001::FFFF地址,因此接口会加入组播组FF02::1:FF00:FFFF,而此刻所收到的报文又是以该地址为目的地址,因此它会解析该报文,它发现对方进行DAD的目标地址与自己本地接口地址相同,于是立即回送一个==NA报文==,该报文的目的地址是FF02::1,也就是所有节点组播地址,同时在报文内写入目标地址2001::FFFF,以及自己接口的MAC地址。
    3. 当PC收到这个NA后,它就知道2001::FFFF在链路上已经有人在用了,因此将该地址标记为Duplicate(重复的),该地址将不能用于通信。若未收到NA报文,则PC判断这个IPv6地址可以用,DAD机制有点类似于IPv4中的免费ARP检测重复地址。

8.6地址解析

  • IPv6使用ICMPv6的NS和NA报文来取代ARP在IPv4中的地址解析功能。

image-20231208151903040

  • IPv6的地址解析不再使用ARP,也不再使用广播方式,而采用和DAD相同的NS和NA报文解析数据链路层地址。
  • 假设PC想要解析R1的2001::2这个地址对应的MAC地址,详细过程如下:
    1. PC将发送一个NS报文达到这个目的。这个NS报文的源地址是2001::1,目的地址则是2001::2对应的被请求节点组播地址。
    2. R1接收此NS报文,根据报文内的源IPv6地址和源MAC,记录下PC这个邻居,同时根据自身的IPv6和MAC,回复单播NA报文。
    3. PC收到此NA报文之后,获取其中的源IPv6地址和源MAC。这样双方都可以建立一条关于对方的邻居信息表项。

9.IPv6路由基础

  • 在企业网络中,IPv6技术的应用越来越普及。IETF组织针对IPv6网络制定了路由协议OSPFv3。

9.1OSPFv3

  • ffO2::5是为OSPFv3路由协议预留的IPv6组播地址。
  • OSPFv3中的路由条目下一跳地址是链路本地地址。

image-20231208154024895

  • OSPFv3是运行在IPv6网络的OSPF协议。运行OSPFv3的路由器使用物理接口的链路本地单播地址为源地址来发送OSPF报文。相同链路上的路由器互相学习与之相连的其它路由器的链路本地地址,并在报文转发的过程中将这些地址当成下一跳信息使用,虚链路的场景不在本课程的讨论范围内。
  • IPv6中使用组播地址ff02::5来表示AIISPFRouters,而OSPFv2中使用的是组播地址224.0.0.5。需要注意的是,OSPFv3和OSPFv2版本互不兼容。

9.2DR&BDR

  • Router ID在OSPFv3中必须手动配置。
  • 在NBMA和广播型网络中OSPFv3选举DR和BDR的过程与OSPFv2相似。

image-20231208154133563

  • Router ID在OSPFv3中也是用于标识路由器的。与OSPFv2的Router ID不同,OSPFv3的Router ID必须手工配置;如果没有手工配置Router ID,OSPFv3将无法正常运行。
  • OSPFv3在广播型网络和NBMA网络中选举DR和BDR的过程与OSPFv2相似。IPv6使用组播地址FF02:6表示AIIDRouters,而OSPFv2中使用的是组播地址224.0.0.6

9.3基于链路运行

  • OSPFv2是基于网段运行的,OSPFv3的实现是基于链路的。

image-20231208154223521

  • OSPFv3是基于链路而不是网段的。在配置OSPFv3时,不需要考虑路由器的接口是否配置在同一网段,只要路由器的接口连接在同一链路上,就可以不配置IPv6全局地址而直接建立联系。这一变化影响了OSPFv3协议报文的接收、Hello报文的内容以及网络LSA的内容。

9.4OSPFv3认证

  • OSPFv3协议本身不提供认证功能,而是通过使用IPv6提供的安全机制来保证OSPFv3报文的合法性。

image-20231208155428698

  • OSPFv3直接使用IPv6的扩展头部(AH和ESP)来实现认证及安全处理,不再需要OSPFv3自身来完成认证。

9.5OSPFv3配置

image-20231208155514405

  • ipv6命令用来使能路由器的IPv6功能。要在路由器上运行OSPFv3协议,首先必须使能IPv6功能。
  • ospfv3 [process-id]命令用来创建并运行OSPFv3进程,process-ia取值范围是1~65535。如果不指定进程号,缺省使用进程号1。
  • router-id router-id命令用来设置运行OSPFv3协议的路由器ID号。
  • ipv6 enable命令用来在路由器接口上使能IPv6,使得接口能够接收和转发IPv6报文。接口的IPv6功能默认是去使能的。
  • ipv6 address <link local address>link-local命令用来手动为接口配置链路本地地址。
  • ospfv3 process-id area area-id命令用来在接口上使能OSPFv3的进程,并指定所属区域。
  • 本示例中,路由器RTA的loopback接口和GigabitEthernet0/0/0接口都启用OSPFv3进程,并且都属于区域0。

配置验证

image-20231208155632609

  • 在邻居路由器上完成OSPFv3配置后,执行display ospfv3命令可以验证OSPFv3配置及相关参数。从显示信息中可以看到正在运行的OSPFv3进程为1,Router ID为1.1.1.1,Number of FULL neighbors值为1。

10.IPv6典型配置举例

10.1基本命令

1.使能IPv6

[Huawei] ipv6

使能设备转发IPv6单播报文,包括本地IPv6报文的发送与接收。

[Huawei-GigabitEthernet0/0/0] ipv6 enable

在接口视图下,在接口上使能该接口的IPv6功能。

2.配置接口的链路本地地址

[Huawei-GigabitEthernet0/0/0] ipv6 address ipv6-address  link-local
[Huawei-GigabitEthernet0/0/0] ipv6 address auto link-local

在接口视图下,通过手工或者自动的方式,配置接口的链路本地地址。

3.配置接口的全球单播地址

[Huawei-GigabitEthernet0/0/0] ipv6 address { ipv6-address prefix-length | ipv6-address/prefix-length }  
[Huawei-GigabitEthernet0/0/0] ipv6 address auto { global | dhcp }

在接口视图下,通过手工或者自动(有状态或无状态)的方式,配置接口的全球单播地址。

4.配置IPv6静态路由

[Huawei] ipv6 route-static dest-ipv6-address prefix-length { interface-type interface-number [ nexthop-ipv6-address ] | nexthop-ipv6-address } [ preference preference ] 

5.查看接口的IPv6信息

[Huawei] display ipv6 interface [ interface-type interface-number | brief ] 

6.查看邻居表项信息

[Huawei] display ipv6 neighbors 

7.使能系统发布RA报文功能

[Huawei-GigabitEthernet0/0/0] undo ipv6 nd ra halt

默认情况下,华为路由器接口不发送ICMPv6 RA报文,则该接口所连链路上的其他设备无法进行无状态地址自动配合。若想进行IPv6无状态地址配置,需要手工开启发送RA报文。

10.2案例:配置一个小型IPv6网络

  • 配置需求:
    • R1和R2之间使用静态IPv6地址互联。
    • R2作为DHCPv6服务器给R3的GE0/0/0分配全球单播地址。
    • R4的GE0/0/0接口通过R2的RA进行无状态地址自动配置。
    • 配置静态路由,实现各设备之间互访。

image-20231208160535555

1.在R1、R2、R3、R4全局和相关接口使能IPv6功能,同时自动生成链路本地地址(以R1配置为例)

image-20231208160610099

2.在R1、R2相应接口配置静态IPv6全球单播地址

image-20231208160624838

3.在R2上配置DHCPv6服务器功能,R3接口通过DHCPv6方式获取全球单播地址

image-20231208160639373

4.在R2使能发布RA报文的功能,R4通过无状态地址配置的方式获取地址

image-20231208160711953

5.在R4上配置静态路由

image-20231208160723106

6.在R1上配置聚合后的静态路由

image-20231208160741147

7.在R3上配置默认路由

image-20231208160751331

11.本章总结

image-20231208160833669