IPV6
- 前言
- 众所周知,IPv4地址资源紧张限制了IP技术的进一步发展。我们迫切需要一种能够代替IPv4的技术,在满足IPv4功能的前提下,还能满足未来产业对于IP地址的需求。IPv6能从根本上解决这个问题,各行各业,从政府到市场对下一代互联网技术的迫切需求,推动了IPv6技术的出现与发展。
- 本课程将重点介绍IPv6的基础知识,包括IPv6出现的背景、报文格式、地址分类、基础协议以及过渡技术等内容。
- 目标
- 阐述IPv6技术出现的背景
- 区分IPv6的地址
- 掌握IPv6基础协议
- 阐述IPv6过渡技术
- 掌握IPv6配置
- 1、IPv6产生的背景
- 国际IP地址分配方式
- 国际IP地址分配方式
- ICANN(theInternet Corporation for Assigned Names and Numbers)是Internet的中心管理机构。
- 并不是所有的地址都会被分配。一些地址被预留,用于广播、测试、私有网络使用等。这些地址被称为专用地址(special-useaddress)。你可以查询RFC5735来了解哪些地址是专用地址。
- 国际IPv4地址分配现状
- 实践证明IPv4是一个非常成功的协议,它本身也经受住了Internet从数目很少的计算机发展到目前上亿台计算机互联的考验。但该协议是几十年前基于当时的网络规模而设计的。在今天看来,IPv4的设计者们对于Internet的估计和预想显得很不充分。随着Internet的扩张和新应用的不断推出,IPv4越来越显示出它的局限性。
- Internet规模的快速扩大是当时完全没有预料到的,特别是近十年来,更是爆炸式增长,已经走进了千家万户,人们的日常生活已经离不开它了。但也就是这种快速发展,出现了迫在眉睫的IP地址空间耗尽问题。
- IPv4怎么了?
- IPv4公网地址耗尽。这应该是当前IPv6替代IPv4的最大原动力。
- Internet用户快速增长,随着科技行业的发展,有更多的用户、更多种类的设备接入公网。
- IPv4缺乏真正的端到端通信模型。NAT确实能解决私有地址空间与公网互访的问题,但是却破坏了端到端通信的完整性。
- IPv4无法适应新技术的发展,如物联网等。所有行业都是IPv6的潜在用户。
- 广播机制的存在,对ARP的依赖等,使得IPv4局域网的相关运作问题频发。
- IPv4对移动性的支持不够理想。
- 临时应对措施
- 1991年,IETF为了推迟IPv4地址耗尽发生的时间点,推出分类网络方案;
- 1993年,推出网络地址转换(NAT)与无类别域间路由(CIDR);
- 但是这些过渡方案皆无法阻止位址枯竭问题的发生,只能减缓它的发生速度,并不能从根本上解决问题。
- IETF在20世纪90年代提出下一代互联网协议——IPv6,目前IPv6成为公认的IPv4未来的升级版本。
- 2、IPv6原理描述
- IPv6报文格式
- IPv6技术特点
- 地址空间巨大。
- 地址空间,IPv6地址采用128比特标识。
- 128位的地址结构使IPv6理论上可以拥有(43亿×43亿×43亿×43亿)个地址。
- 近乎无限的地址空间是IPv6的最大优势。
- 精简报文结构。
- 报文结构,IPv6使用了新的协议头格式,也就是说IPv6数据包有全新的报文头,而并不是仅仅简单地将IPv4报文头中的地址部分增加到128bits而已。
- 在IPv6中,报文头包括固定头部和扩展头部,一些非根本性的和可选择的字段被移到了IPv6协议头之后的扩展协议头中。
- 这使得网络中的中间路由器在处理IPv6协议头时,有更高的效率。
- 实现自动配置和重新编址。
- 实现自动配置和重新编址,IPv6协议内置支持通过地址自动配置方式使主机自动发现网络并获取IPv6地址,大大提高了内部网络的可管理性。
- 支持层次化网络编址。
- 支持层次化网络结构,巨大的地址空间使得IPv6可以方便的进行层次化网络部署。
- 层次化的网络结构可以方便的进行路由聚合,提高了路由转发效率。
- 支持端对端安全。
- 支持端对端安全,IPv6中,网络层支持IPSec的认证和加密,支持端到端的安全。
- 更好的支持QoS。
- 更好的支持QoS,IPv6在包头中新定义了一个叫做流标签的特殊字段。
- IPv6的流标签字段使得网络中的路由器可以对属于一个流的数据包进行识别并提供特殊处理。
- 用这个标签,路由器可以不打开传送的内层数据包就可以识别流,这就使得即使数据包有效载荷已经进行了加密,仍然可以实现对QoS的支持。
- 支持移动特性。
- 支持移动特性,由于采用了Routing header和Destination option header等扩展报头,使得IPv6提供了内置的移动性。
- IPv6报文格式
- IPv6报文格式有IPv6基本报头、IPv6扩展报头以及上层协议数据单元。
- 基本报头
- IPv6基本报头有8个字段,固定大小为40字节,每一个IPv6数据报都必须包含报头。
- 地址空间巨大。
- IPv6技术特点
- IPv6报文格式
- IPv6基本报头(IPv6Header)
- 每一个IPv6数据包都必须包含报头,其长度固定为40bytes。
- 基本报头提供报文转发的基本信息,会被转发路径上面的所有路由器解析。
- IPv6报头格式中主要字段解释
- Version:版本号,长度为4bit。对于IPv6,该值为6。
- TrafficClass:流类别,长度为8bit。等同于IPv4中的ToS字段,表示IPv6数据报的类或优先级,主要应用于QoS。
- FlowLabel:流标签,长度为20bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。
- PayloadLength:有效载荷长度,长度为16bit。有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)。
- NextHeader:下一个报头,长度为8bit。
- HopLimit:跳数限制,长度为8bit。该字段类似于IPv4中的Timeto Live字段,它定义了IP数据报所能经过的最大跳数。每经过一个路由器,该数值减去1,当该字段的值为0时,数据报将被丢弃。
- SourceAddress:源地址,长度为128bit。表示发送方的地址。
- DestinationAddress:目的地址,长度为128bit。表示接收方的地址。
- 扩展报头
- 扩展报头是可选的,只有需要该扩展报头对应的功能时,数据的发送者才会添加相应扩展报头。
- NextHeader:下一个报头,长度为8bit。与基本报头的Next Header的作用相同。指明下一个扩展报头(如果存在)或上层协议的类型。
- ExtensionHeader Length:报头扩展长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)。
- ExtensionHead Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合。
- 当使用多个扩展报头时,前面报头的Next Header字段指明下一个扩展报头的类型,这样就形成了链状的报头列表。
- IPv4与IPv6的Options字段比较
- IPv4中Options字段
- IPv4报头包含可选字段Options,内容涉及security、Timestamp、Recordroute等,这些Options可以将IPv4报头长度从20字节扩充到60字节。
- 在转发过程中,处理携带这些Options的IPv4报文会占用路由器很大的资源,因此实际中也很少使用。
- IPv6中Options字段
- IPv6将这些Options从IPv6基本报头中剥离,放到了扩展报头中,扩展报头被置于IPv6报头和上层协议数据单元之间。
- 一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。
- 与IPv4不同,IPv6扩展头长度任意,不受40字节限制,这样便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。
- 但是为了提高处理选项头和传输层协议的性能,扩展报头总是8字节长度的整数倍。
- 扩展报头种类
- 当超过一种扩展报头被用在同一个IPv6报文里时,报头必须按照下列顺序出现:
- IPv4中Options字段
- 说明
- 路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头,并不是所有的扩展报头都需要被转发路由设备查看和处理的。
- 除了目的选项扩展报头可能在一个IPv6报文中出现一次或两次(一次在路由扩展报头之前,另一次在上层协议数据报文之前),其余扩展报头只能出现一次。
- IPv6地址分类
- IPv6地址类型
- 单播地址(Unicast Address)
- 标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。
- 在IPv6中,一个接口拥有多个IPv6地址是非常常见的现象。
- 组播地址(Multicast Address)
- l标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。
- 只有加入相应组播组的设备接口才会侦听发往该组播地址的报文。
- 任播地址(Anycast Address)
- 任播地址标识一组网络接口(通常属于不同的节点)。
- 目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
- 实际上任播地址与单播地址使用同一个地址空间,也就是说,由路由器决定数据包是做任播转发还是单播转发。
- IPv6没有定义广播地址(Broadcast Address)
- 单播地址(Unicast Address)
- IPv6单播地址
- 可聚合全球单播地址
- 全球单播地址定义用于IPv6 Internet。它们是全局唯一的和全局可路由的。
- 类似IPv4公网地址。
- 由前缀、子网ID和接口标识组成。
- 全球单播地址定义用于IPv6 Internet。它们是全局唯一的和全局可路由的。
- 可聚合全球单播地址
- IPv6地址类型
- 全局路由前缀:由提供商指定给一个组织机构,一般至少为48bit。目前已经分配的全局路由前缀的前3bit均为001。因此前缀为2000::/3。
- 子网:组织机构可以用子网ID来构建本地网络(Site),与IPv4中的子网号作用相似。子网ID通常最多分配到第64位。
- 主机位:用来标识一个设备(Host),与IPv4中的主机ID作用相似。
- 全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。
- 链路本地地址
- 在一个节点启动IPv6协议栈时,节点的每个接口会自动配置一个链路本地地址。该地址专门用来和相同链路上的其他主机通信。
- 只能在连接到同一本地链路的节点之间使用,广泛应用于邻居发现、无状态地址等。
- 链路本地地址前缀FE80::/10,将接口ID添加在后面作为地址的低64位。
- 每一个IPv6接口都必须具备一个链路本地地址。
- 在一个节点启动IPv6协议栈时,节点的每个接口会自动配置一个链路本地地址。该地址专门用来和相同链路上的其他主机通信。
- 链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。
- 当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址(其固定的前缀+EUI-64规则形成的接口标识)。
- 以链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。
- 唯一本地地址
- 为了代替站点本地地址的功能,又使这样的地址具有唯一性,避免产生像IPv4的私有地址泄漏到公网而造成的问题,RFC4193定义了唯一本地地址。
- 唯一本地地址,概念上类似于IPv4中的私网地址,仅能够在本地网络使用,在IPv6 Internet上不可被路由。
- 唯一本地地址固定前缀FC00::/7。它被分为两块,其中FC00::/8暂未定义,另一块是FD00::/8,其格式如下:
- 为了代替站点本地地址的功能,又使这样的地址具有唯一性,避免产生像IPv4的私有地址泄漏到公网而造成的问题,RFC4193定义了唯一本地地址。
- 字段解释
- Prefix:前缀;固定为FC00::/7。
- L:L标志位;值为1代表该地址为在本地网络范围内使用的地址;值为0被保留,用于以后扩展。
- Global ID:全球唯一前缀;通过伪随机方式产生(RFC4193)。
- Subnet ID:子网ID;划分子网使用。
- Interface ID:接口标识。
- 唯一本地地址是另一种应用范围受限的地址,它仅能在一个站点内使用。由于本地站点地址的废除(RFC3879),唯一本地地址被用来代替本地站点地址(RFC4193)。
- 唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。
- 唯一本地地址特点
- 具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低)。
- 可以进行网络之间的私有连接,而不必担心地址冲突等问题。
- 具有知名前缀(FC00::/7),方便边缘路由器进行路由过滤。
- 如果出现路由泄漏,该地址不会和其他地址冲突,不会造成Internet路由冲突。
- 应用中,上层应用程序将这些地址看作全球单播地址对待。
- 独立于互联网服务提供商ISP(Internet Service Provider)。
- 特殊地址
- 未指定地址。
- 0:0:0:0:0:0:0:0/128 或者::/128。
- 该地址作为某些报文的源地址,比如作为重复地址检测时发送的邻居请求报文(NS)的源地址,或者DHCPv6初始化过程中客户端所发送的请求报文的源地址。
- 该地址可以表示某个接口或者节点还没有IP地址,可以作为某些报文的源IP地址(例如在NS报文的重复地址检测中会出现)。源IP地址是::的报文不会被路由设备转发。
- 环回地址。
- 0:0:0:0:0:0:0:1/128 或者::1/128。
- 与IPv4中的127.0.0.1作用相同,用于本地回环,发往::/1的数据包实际上就是发给本地,可用于本地协议栈回环测试。
- 该地址通常用来作为一个虚接口的地址(如Loopback接口)。实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址。
- IPv4兼容地址。
- 在过渡技术中,为了让IPv4地址显得更加突出一些,定义了内嵌IPv4地址的IPv6地址格式。在这种表示方法中,IPv6地址的部分使用十六进制表示,IPv4地址部分可用十进制格式。
- 该地址已经几乎不再使用。
- 接口标识生成方法
- 接口ID
- 接口ID为64bit,用于标识链路上的接口,在每条链路上接口ID必须唯一。
- 接口ID有许多用途
- 最常见的用于就是黏贴在链路本地地址前缀后面,形成接口的链路本地地址。
- 或者在无状态自动配置中,黏贴在获取到的IPv6全局单播地址前缀后面,构成接口的全局单播地址。
- 对于IPv6 单播地址来说,如果地址的前三bit不是000,则接口标识必须为64位,如果地址的前三位是000,则没有此限制。
- 接口ID可通过3种方法生成
- 手工配置:建议在服务器和重要网络设备上配置。
- 系统通过软件自动生成:保护主机的私密性。
- IEEE EUI-64规范自动生成:最常用的方法。
- 这种由MAC地址产生IPv6地址接口ID的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时(后面会介绍),只需要获取一个IPv6前缀就可以与接口ID形成IPv6地址。
- 使用这种方式最大的缺点就是某些恶意者可以通过二层MAC推算出三层IPv6地址。
- 通过EUI-64规范根据MAC地址生成接口ID
- 接口ID
- 未指定地址。
- 假设一个接口的MAC地址如上图所示,那么采用EUI-64规范,接口可根据该MAC地址计算得到接口ID,由于MAC地址全局唯一,因此该接口ID也相应的具备全局唯一性。
- 计算过程如下。
- 将48bit的MAC地址对半劈开,然后插入“FFFE”,再对从左数起的第7位,也就是U/L位取反,即可得到对应的接口ID。
- 在单播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组播地址
- 概述
- 用来标识一组接口,发往组播地址的数据将被转发给侦听该地址的多个设备。
- 组播报文
- 概述
- 地址范围:FF00::/8
- Flags
- 用来表示永久或临时组播组
- 0000表示永久分配或众所周知
- 0001表示临时的
- 注:前3bits 保留为0
- 用来表示永久或临时组播组
- Scope
- 表示组播组的范围
- 表示组播组的范围
- 0001:本地接口范围,单个接口范围有效,仅用于Loopback。
- 0010:本地链路范围。
- 0100:本地管理范围,管理员配置的。
- 0101:本地站点范围。
- 1000:本地组织范围,属于同一个组织的多个站点范围。
- 1110:全局范围。
- Group ID
- 组播组ID
- 预定义组播地址
- 这里举几个例子(还有很多类似的特殊地址)
- Node-local(节点本地)
- FF01:0:0:0:0:0:0:1,所有节点的组播地址(FF01::1(节点本地范围组播地址))。
- FF01:0:0:0:0:0:0:2,所有路由器的组播地址(FF01::2(节点本地范围所有路由器组播地址))。
- Link-local(链路本地)
- FF02:0:0:0:0:0:0:1,所有节点的组播地址(FF02::1(链路本地范围所有节点组播地址))。
- FF02:0:0:0:0:0:0:2,所有路由器的组播地址(FF02::2(链路本地范围所有路由器组播地址))。
- FF02:0:0:0:0:1:FFXX:XXXX ,Solicited-Node组播地址。
- FF02:0:0:0:0:0:0:5,所有OSPF路由器组播地址。
- FF02:0:0:0:0:0:0:6,所有OSPF的DR路由器组播地址。
- FF02:0:0:0:0:0:0:D,所有PIM路由器组播地址。
- IPv6组播地址的MAC地址映射
- 在以太网环境中,一个组播IPv6报文必须执行以太网封装。
- 组播IPv6报文的目的IP地址是组播IPv6地址,而目的MAC地址则必须是组播MAC地址,并且该地址必须与组播IPv6地址对应。
- 33-33是专门为IPv6组播预留的MAC地址前缀,MAC地址的后32bit从对应的组播IPv6地址的后32bit拷贝而来。
- 被请求节点组播地址
- 被请求节点组播地址(Solicited-Node Multicast Address)
- 通过节点的单播或任播地址生成。
- 当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。
- 一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。
- 被请求节点组播地址由固定前缀FF02::1:FF00:0/104和对应IPv6地址的最后24bit组成。
- 被请求节点组播地址的有效范围为本地链路范围。
- 被请求节点阻比地址的作用
- 举个非常简单的例子
- 回顾一下IPv4中的ARP,这个协议主要用于地址解析,当设备需要解析某个IP地址对应的MAC地址时,就会发送一个广播ARP Request帧,之所以要发送广播帧,是因为它要确保广播域内所有节点都能收到。然而除了目标节点之外,该帧对于其他节点而言是个困扰,因为它们不得不去解析这个帧(一直解析到ARP载荷),这个动作将会浪费设备的资源。
- 在IPv6中,ARP及广播都被取消,当设备需要请求某个IPv6地址对应的MAC地址时,设备依然需要发送请求报文,但是该报文是一个组播报文,其目的IPv6地址是目标IPv6单播地址对应的被请求节点组播地址,而目的MAC地址则是该组播地址对应的组播MAC地址。由于只有目标节点才会侦听这个被请求节点组播地址,因此当其他设备收到该帧时,这些设备可以通过目的MAC地址、在网卡层面就判断出不需要处理它并将帧丢弃。
- IPv6任播地址
- 举个非常简单的例子
- 任播地址是IPv6特有的地址类型,用来标识一组网络接口(通常属于不同的节点)。
- 发往任播的报文只会被发送到最近的一个接口。
- 适合于“One-to-One-of-Many”(一对组中的一个)的通讯场合。
- 接收方只需要是一组接口中的一个即可,如移动用户上网就需要因地理位置的不同,而接入离用户最近的一个接收站,这样才可以使移动用户在地理位置上不受太多的限制。
- 任播地址与单播地址使用相同的地址空间,因此任播与单播的表示无任何区别;
- 任播地址从单播地址空间中进行分配,使用单播地址的任何格式。
- 从语法上,任播地址与单播地址没有区别。
- 配置时须明确表明是任播地址,以此区别单播和任播。
- 被分配具有任播地址的节点必须得到明确的配置,从而知道它是一个任播地址。
- 其他说明
- 目前,任播地址仅被用做目标地址,且仅分配给路由器。
- 在RFC3513中定义了子网路由器任播地址(Subnet-RouteranycastAddress),其接口ID为全0。
- 发往该任播地址的报文会被发送到任播地址所代表子网(子网路由器任播地址的前缀)内的某一台路由器,该路由器是离得最“近”的一台。所谓最近一般是路由的概念。
- IPv6基础协议
- ICMPv6
- 概述
- ICMPv6是IPv6的基础协议之一,用于向源节点传递报文转发的信息或者错误。是一个非常重要的协议。它是理解IPv6中其它机制的基础。
- 概述
- ICMPv6
- 协议类型号(即IPv6Next Header)为58。
- 在IPv6中,ICMPv6除了提供ICMPv4的对应功能之外,还有其它一些功能的基础,如邻居发现、无状态地址配置、重复地址检测、PMTU发现等。
- 报文解释
- Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。
- Code:表示此消息类型细分的类型。
- Checksum:表示ICMPv6报文的校验和。
- 消息类型
- 目标不可达(Destination Unreachable)
- 当数据包无法被转发到目标节点或上层协议时,路由器或目标节点发送ICMPv6目标不可达差错报文。
- 在目标不可达报文中,类型(Type)字段值为1,代码(Code)字段值为0-4,每一个代码值都定义了具体含义(RFC2463)
- 0:没有到达目标的路由。
- 1:与目标的通信被管理策略禁止。
- 2:未指定。
- 3:地址不可达。
- 4:端口不可达。
- 数据包超长(Packet Too Big)
- 如果由于出口链路的MTU小于IPv6数据包的长度而导致数据包无法转发,路由器就会发送数据包超长报文。
- 该报文被用于IPv6路径MTU发现的处理 。
- 数据包超长报文的类型字段值为2,代码字段值为0。
- 超时(Time Exceeded)
- 当路由器收到一个IPv6报头中的跳限制(HopLimit)字段值为0的数据包时,会丢弃该数据包并向源发送ICMPv6超时报文。
- 在超时报文中,类型字段的值为3,代码字段的值为0或1:
- 0:在传输中超越了跳限制。
- 1:分片重组超时。
- 参数问题(Parameter Problem)
- 当IPv6报头或者扩展报头出现错误,导致数据包不能进一步处理时,IPv6节点会丢弃该数据包并向源发送此报文,指明问题的位置和类型。
- 参数问题报文中,类型字段值为4,代码字段值为0~2,32位指针字段指出错误发生的位置。
- 0:遇到错误的报头字段。
- 1:遇到无法识别的下一个报头(NextHeader)类型。
- 2:遇到无法识别的IPv6选项。
- 两种信息报文
- 在RFC2463中只定义了两种信息报文:回送请求Echo Request以及回送应答Echo Reply。
- 回送请求报文。
- 回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。
- 回送请求报文的类型字段值为128,代码字段的值为0。
- 标志符(Identifier)和序列号(SequenceNumber)字段有发送方主机设置,用于将即将收到的回送应答报文与发送的回送请求的报文进行匹配。
- 回送应答报文。
- 当收到一个回送请求报文时,ICMPv6会用回送应答报文响应。
- 回送应答报文的类型字段的值为129,代码字段的值为0。
- 标志符(Identifier)和序列号(SequenceNumber)字段的值被指为与回送请求报文中的相应字段一样的值。
- NDP(Neighbor Discovery Protocol,邻居发现协议)
- NDP(Neighbor Discovery Protocol,邻居发现协议)在RFC2462及RFC4861中定义。NDP实现了IPv6中诸多重要机制
- 路由器发现
- 帮助设备发现链路上的路由器。
- 获得路由器通告的信息。
- 无状态自动配置
- 无状态自动配置是IPv6的一个亮点功能。
- 它使得IPv6主机能够非常便捷地连入到IPv6网络中,即插即用。
- 无需手工配置繁冗的IPv6地址。
- 无需部署应用服务器(例如DHCP服务器)为主机分发地址。
- 无状态自动配置机制使用到了ICMPv6中的路由器请求报文(RS)及路由器通告报文(RA)。
- 重复地址检测
- 重复地址检测是一个非常重要的机制。
- 一个IPv6地址必须经历重复地址检测并通过检测之后才能够启用。
- 重复地址检测用于发现链路上是否存在IPv6地址冲突。
- 地址解析
- 在IPv6中,取消了IPv4中的ARP协议,使用NDP所定义的邻居请求报文(NS)及邻居通告报文(NA)来实现地址解析功能。
- 邻居的状态跟踪
- IPv6定义了节点之间邻居的状态机。
- 维护邻居IPv6地址与二层地址如MAC的映射关系。
- 相应的表项存储于设备的IPv6邻居表中。
- 前缀重编址
- IPv6路由器能够通过ICMPv6的路由器通告报文(RA)向链路上通告IPv6前缀信息。
- 主机能够从RA中所包含的前缀信息自动构建自己的IPv6单播地址。
- 这些自动获取的地址是有生存时间的。
- 通过在RA中通告IPv6地址前缀,并且灵活地设定地址的生存时间,能够实现网络中IPv6新、老前缀的平滑过渡,而无需在主机终端上消耗大量的手工劳动重新配置地址。
- 路由器重定向
- 路由器向一个IPv6节点发送ICMPv6的重定向消息。
- 通知它在相同的本地链路上有一个更好的、到达目的地的下一跳。
- IPv6中的重定向功能与IPv4中的是一样的。
- NDP使用ICMPv6的相关报文
- RS(RouterSolicitation):路由器请求报文
- RA(RouterAdvertisement):路由器通告报文
- NS(NeighborSolicitation):邻居请求报文
- NA(NeighborAdvertisement):邻居通告报文
- 地址解析
- 概述
- IPv6的地址解析不再使用ARP,也不再使用广播方式。
- 地址解析在三层完成,针对不同的链路层协议可以采用相同的地址解析协议
- 通过ICMPv6(类型135的NS及类型136的NA报文)来实现地址解析。
- NS报文发送使用组播的方式,报文的目的IPv6地址为被请求的IPv6地址对应的“被请求节点组播地址”,报文的目的MAC为组播MAC。
- 采用组播的方式发送NS消息相比于广播的方式更加的高效,也减少了对其他节点的影响和对二层网络的性能压力。
- 可以使用三层的安全机制(例如IPSec)避免地址解析攻击。
- 与IPv4比较
- 在IPv4中,可以通过ARP就可以由IP地址解析到链路层地址,ARP协议是工作在第二层。
- 在IPv6中在邻居发现协议(RFC2461)中定义地址解析的,其中使用了ICMPv6的报文,在三层完成地址解析。
- ICMPv6报文的优点
- 加强了介质独立性
- 意味着无需为每一个链路层定义一个新的地址解析协议,在每一个链路层都使用相同的地址解析协议。
- 可以利用三层安全机制
- ARP欺骗(如伪造ARP应答以盗窃数据流)是IPv4中的一个很大的安全问题,在第三层实现地址解析。
- 可以利用三层标准的安全认证机制(例如IPSEC)解决这个问题。
- 减轻了性能压力
- ARP请求报文使用广播,会泛滥到整个二层网络中每台主机是公认的一个IPv4性能问题。
- 在第三层实现地址解析可以将地址解析请求仅仅发送到待解析地址所属的“Solicited-node”组播组即可。
- 采用组播的传送方式,大大减轻了性能压力。
- 地址解析报文
- 地址解析过程中使用了两种ICMPv6报文:邻居请求(Neighbor Solicitation)和邻居通告(Neighbor Advertisement)。
- 邻居请求 (Neighbor Solicitation,NS)
- 加强了介质独立性
- 概述
- ICMP的Type为135,Code为0;
- TargetAddress是需要解析的IPv6地址,因此该处不准出现组播地址。
- 邻居请求发送者的链路层地址会被放在Options字段中。
- 邻居通告 (Neighbor Advertisement,NA)
- ICMPType为136,Code为0;
- R标志(Router flag)表示发送者是否为路由器,如果1则表示是;
- S标志(Solicited flag)表示发送邻居通告是否是响应某个邻居请求,如果1则表示是;
- O标志(Overide flag)表示邻居通告中的消息是否覆盖已有的条目信息,如果1则表示是;
- Traget Address表示所携带的链路层地址对应的IPv6地址。
- 被请求的链路层地址被放在Options字段中,其格式仍然采用TLV格式,具体可以参考RFC2463。
- 地址解析过程
- 过程描述
- 有了NS和NA两种报文,两台主机如何获取对方的链路层地址呢?
- 在上图所示的场景中,PC1要请求PC2的2001::2这个地址对应的MAC地址,PC1将发送一个NS报文达到这个目的。
- 这个NS报文的源地址是2001::1,目的地址则是2001::2对应的被请求节点组播地址。
- 然后IPv6数据包又被封装上数据帧的头部,其中源MAC地址是PC1的MAC地址,目的MAC地址则是2001::2这个目标地址对应的被请求节点组播地址映射得到的MAC地址,这是一个组播MAC地址。
- 这样就完成了一个双向交互链路层地址的过程。
- 除R2外的其他节点也会收到这个数据帧,在读取数据帧头的时候发现目的MAC地址是一个组播MAC地址,而该组播MAC地址在本地并不侦听,因此在网卡层面就将数据帧丢弃而不再往报文里看了。
- PC2收到这个数据帧后,由于本地网卡接收目的MAC地址为3333-FF00-0002的数据帧,因此在对数据帧做校验之后从帧头的类型字段得知里头是个IPv6报文,于是将帧头拆掉,把IPv6报文上送IPv6协议栈处理。IPv6协议栈从报文的IPv6头部中的目的IPv6地址得知这个数据包是发往一个被请求节点组播地址FF02::1:FF00:2,而本地网卡加入了这个组播组。接着,从IPv6包头的NextHeader字段得知IPv6包头后面封装着一个ICMPv6的报文,因此将IPv6包头拆除,将ICMPv6报文交给ICMPv6协议去处理。最后ICMPv6发现这是个NS报文,要请求自己2001::2对应的MAC地址,于是回送一个NA报文给PC1,在该报文中就包含着PC2的MAC地址。
- 邻居表
- 查看IPv6邻居路由表
- IPv6不像IPv4那样使用ARP表来缓存IP与MAC地址的映射,而是维护一个IPv6邻居表。
- 在华为数通设备上则使用display ipv6 neighbors命令来查看IPv6邻居表。
- 查看IPv6邻居路由表
- 在windows7操作系统里,可以使用netsh interface ipv6 show neighbors命令查看邻居缓存的内容。
- 邻居状态种类
- 实际的通讯过程中不仅仅是地址解析这么简单,而是需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
- RFC2461中定义了5种状态:INCOMPLETE、REACHABLE、STALE、DELAY、PROBE。
- INCOMPLETE 未完成,邻居请求已经发送到目标节点的请求组播地址,但没有收到邻居的通告;
- REACHABLE 可达,收到确认,不续再发包确认;
- STALE 陈旧,从收到上一次可达性确认后过了超过30s;
- DELAY 延迟,在stale状态后发送过一个报文,并且5s内没有可达性确认;
- PROBE 探查,每隔1s重传邻居请求来主动请求可达性确认,直到收到确认。
- 邻居状态变化
- 节点A要访问节点B,A的缓存中无B的条目,邻居状态机的变化
- 以A、B两个节点之间相互通讯过程的A节点的邻居状态变化,假设A、B两个节点之前没有任何通讯
- A先发送NS,并生成邻居缓存条目,状态为Incomplete;
- 若B回复NA,则Incomplete->Reachable,否则10s后Incomplete->Empty,即删除条目;
- 经过ReachableTime(默认30s),条目状态Reachable->Stale;
- 或者在Reachable状态,收到B的非请求NA,且链路层地址不同,则马上->Stale;
- 在Stale状态若A需要向B发送数据,则Stale->Delay,同时发送NS请求;
- 在Delay_First_Probe_Time(默认5秒)后,Delay->Probe,其间若有NA应答,则Delay->Reachable;
- 在Probe状态,每隔RetransTimer(默认1秒)发送单播NS,发送MAX_UNICAST_SOLICIT个后再等RestransTimer,有应答则->Reachable,否则进入Empty,即删除表项。
- DAD(重复地址检测)
- 机制概述
- 重复地址检测确保网络中无两个相同的单播地址。
- 所有地址都需要做DAD。
- 使用NS和NA完成DAD交互过程。
- 原理
- tentative地址(试验性地址)
- 一个地址在通过DAD地址重复检测之前称为“tentative地址”也就是试验性地址。
- 接口暂时还不能使用这个试验性地址进行正常的IPv6单播通讯,但是会加入和该地址所对应的Solicited-Node组播组。
- DAD重复地址检测
- 节点向该tentative地址所在的Solicited-Node组播地址发送一个NS。
- 如果收到某个其他站点回应的NA,就证明该地址已被网络上使用,节点将不能使用该tentative地址通讯。
- 接口在启用任何一个单播IPv6地址前都需要先进行DAD,包括Link-Local地址。
- tentative地址(试验性地址)
- DAD过程
- 机制概述
- R2已是在线的设备,该设备已经使用了如图所示的地址,现在我们为R1新配置IPv6的地址2001::FFFF/64,观察一下会发生什么事情。
- R1的接口配置2001::FFFF/64地址后,该地址立即进入tentative状态,此时仍然是不可用的,除非该地址通过DAD检测。
- DAD检测过程
- R1向链路上以组播的方式发送一个NS报文,该NS的源IPv6地址为“::”,目的IPv6地址为要进行DAD检测的2001::FFFF对应的被请求节点组播地址,也就是FF02::1:FF00:FFFF。这个NS里包含着要做DAD检测的目标地址2001::FFFF。
- 链路上的节点都会收到这个组播的NS报文,没有配置2001::FFFF的节点接口由于没有加入该地址对应的被请求节点组播组,因此在收到这个NS的时候默默丢弃。
- 而R2在收到这个NS后,由于它的接口配置了2001::FFFF地址,因此接口会加入组播组FF02::1:FF00:FFFF,而此刻所收到的报文又是以该地址为目的地址,因此它会解析该报文。
- R2发现对方进行DAD的目标地址与自己本地接口地址相同,于是立即回送一个NA报文,该报文的目的地址是FF02::1,也就是所有节点组播地址,同时在报文内写入目标地址2001::FFFF,以及自己接口的MAC地址。
- 当R1收到这个NA后,它就知道2001::FFFF在链路上已经有人在用了,因此将该地址标记为Duplicate(重复的),该地址将不能用于通信。
- R1上观察到的DAD过程
- IPv6地址无状态自动配置
- IPv6地址无状态自动配置(StateLessAddress AutoConfiguration,SLAAC)是IPv6的标准功能,在RFC2462中定义。
- 在IPv6中,设备可以通过手工或者动态的方式获取地址。在动态获取地址的方式中,存在DHCPv6及无状态地址自动配置两种方式。
- 相比于DHCPv6这种动态地址分配技术而言,SLAAC无需部署应用服务器,更加轻量。
- 使用IPv6地址无状态自动配置后,设备的IPv6地址无需进行手工配置,即插即用,减轻网络管理的负担。
- 大致的工作过程如下:
- 主机根据本地接口ID自动产生网卡的链路本地地址。
- 主机对链路本地地址进行DAD检测,如果该地址不存在冲突则可以启用。
- 主机发送RS报文尝试在链路上发现IPv6路由器,该报文的源地址为主机的链路本地地址。
- 路由器回复RA报文(携带IPv6前缀信息,路由器在未收到RS时也能够配置主动发出RA报文)。
- 主机根据路由器回应的RA报文,获得IPv6地址前缀信息,使用该地址前缀,加上本地产生的接口ID,形成单播IPv6地址。
- 主机对生成的IPv6地址进行DAD检测,如果没有检测到冲突,那么该地址才能够启用。
- 路由器发现
- 概述
- 路由器发现功能是IPv6地址自动配置功能的基础,主要通过RA(Router Advertisement,路由器通告)和RS(Router Solicitation,路由器请求)两种报文实现。
- 路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
- IPv6地址支持无状态自动配置,即主机通过路由器发送的RA报文获取网络前缀信息,然后主机自己生成地址的接口标识部分,并自动配置IPv6地址。
- RA(Router Advertisement,路由器通告)报文
- 每台设备为了让二层网络上的主机和设备知道自己的存在。
- 可以定时以组播方式发送RA报文。
- RA报文中会带有网络前缀信息,及其他一些标志位信息。
- RA报文的Type字段值为134。
- RS(Router Solicitation,路由器请求)报文
- 很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。
- RS报文的Type字段值为133。
- 路由器周期发送与回应RA的过程
- 路由器周期发送RA
- 链路上的路由器会定期的发送RA(Router Advertisement)消息。
- 路由器周期发送RA
- 路由器发现功能是IPv6地址自动配置功能的基础,主要通过RA(Router Advertisement,路由器通告)和RS(Router Solicitation,路由器请求)两种报文实现。
- 概述
- 收到RA的主机将加入默认路由器列表中。
- 收到RA的路由器将检查RA内容的一致性。
- 主机通过两个途径获知网络前缀等信息
- 被动接收到网络上路由器通告(Router Advertisement),从通告中获得。
- 主动发送路由器请求(Router Solicitation),路由器回应路由器通告后,主机从通告中获得。
- 路由器周期回应RA
- 主机接口初始化时发RS(Router Solicitation)消息,路由器回应RA。
- 回复的RA可以直接单播给请求的主机,也可以选择多播到所有节点。
- 主机获得前缀及其它参数过程
- 当存在以下情况时忽略RA发送的前缀
- RA报文选项中的“auto”未置位。
- 前缀与已有地址前缀重复(包括link-local地址)。
- RA报文选项中的“preferred lifetime”时间大于 “ valid lifetime ”。
- 前缀长度与接口ID长度之和不等于128位。
- 除以上情况外,主机获得前缀同时也获得一些相关时间参数
- “preferred lifetime”=发起新通讯的有效时间。
- “ valid lifetime ”=原有通讯的有效时间。
- 主机会周期性的收到RA报文,并据此报文来更新自己的时间参数。
- 当存在以下情况时忽略RA发送的前缀
- 几个生存时间
- 当地址处于Deprecated状态,地址不能主动的发起连接只能是被动的接受连接。
- 这也是为了保证上层应用而设计的,但是过了valid lifetime时间地址就变为invalid,这时任何连接就会down掉。
- ICMPv6 RA消息中的Flags字段
- ICMPv6 RA消息中的Flags字段
- Cur Hop Limit
- 该字段用于帮助主机完成跳数限制。
- 当PC使用该RA通告的前缀构建IPv6地址后,该PC发送的IPv6报文的跳数限制被设置为该值(64)。
- Managed address configuration
- M位默认为0,为0时,收到该RA的主机使用RA中包含的IPv6前缀用于无状态地址自动配置。
- 使用如下命令,可将该值设置为1。
- ipv6 nd autoconfig managed-address-flag
- 当该值为1时,收到该RA的主机将采用有状态自动配置,也就是DHCPv6的方式来获取IPv6地址。
- Other Configuration
- Other-Config-Flag,默认为0,表示主机不应该使用有状态自动配置机制来配置除了IPv6地址外的其他参数。
- 使用命令:
- ipv6 nd autoconfig other-flag
- 将该值置1,则主机需使用DHCPv6来配置除了IPv6地址外的其他信息,如DNS,域名等。
- Router Lifetime
- 单位是秒,主机将路由器视为缺省路由器的时间。
- 该计时器到计数为0时,该路由器将不会出现在主机的缺省网关列表中。
- ICMPv6 RA消息中IPv6前缀信息的Flags字段
- L比特位
- L比特位(RFC2461),默认为1。
- 表示在RA消息中的前缀是分配给本地链路的。
- 因此,向包含这个指定前缀的地址发送数据的节点认为目的地是本地链路可达。
- 可以使用如下命令设置为0:
- ipv6 nd ra prefix 2001:: 64 2592000 604800 off-link
- A比特位
- A比特位(RFC2461),默认为1。
- 表示本地链路的主机可以使用该前缀进行无状态自动配置。
- 如果为0,则不能用于无状态自动配置。
- 使用如下命令将该比特位设置为0:
- ipv6 d ra prefix 2001:: 64 2592000 604800 no-autoconfig
- 重定向
- 重定向报文
- 当网关路由器知道更好的转发路径时,会以重定向报文的方式告知主机。
- 重定向报文的结构
- 重定向报文
- 报文格式中Type为137,Code为0;
- TargetAddress是更好的路径下一跳地址;
- DestinationAddress是需要重定向转发的报文的目的地址。
- 重定向过程
- 主机A的默认路由器为RTA,主机A要给主机B发送数据
- 假设主机A想与主机B通讯,主机A的默认网关路由器是RTA,那么当A发送报文给B时报文会被送到RTA。
- RTA接收到A发送的报文以后会发现实际上主机A直接发送给路由器R2更好,它将发送一个ICMPv6重定向报文给主机A,其中TargetAddress为RTB,DestinationAddress为主机B。
- 主机A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往主机B的报文就直接给R2。
- 这就是重定向的一个简单过程,其中会有个问题:RTA如何知道去往主机B的路径通过RTB更好呢?
- 其实这个很简单,因为RTA会发现报文进入的接口就是报文路由得出接口,也就是说发往主机B的路由实际上只是在RTA上转了一圈出来了,然后转发到RTB,据此,RTA能判断出直接给RTB是更好的路径。
- PMTU发现
- 概述
- PMTU就是路径上的最小接口MTU。
- 在RFC1981中定义了PMTU发现协议。
- PMTU最小为1280bytes(IPv6要求链路层所支持的MTU最小为1280)。
- 由于IPv6要求链路层所支持的最小MTU为1280,所以PMTU的值不会小于1280。
- 最大的PMTU一般由链路层决定,如果链路层是一个隧道,那么支持的PMTU可能很大。
- 最大PMTU由链路层决定,如隧道,可以支持很大的MTU。
- 值得注意的是,只有数据包超过路径上的最小MTU时,PMTU发现机制才有意义,因为如果报文很小,小于路径最小的MTU,就不可能产生PacketToo Big报文。
- 描述
- 前面学习的关于IPv6报文转发相关知识的时候知道,IPv6报文在转发的过程中是不进行分片操作的,当然也不进行分片报文的整合工作。IPv6报文仅在源节点进行分片,在目的节点进行组装。那么这会产生一个问题,源节点将报文到底分成多大的呢?很简单,为了所有的报文都能在路径上畅通无阻,那么分片的报文大小不能超过路径上最小的MTU,也就是PMTU——路径MTU。
- RFC1981中定义了PMTU发现的机制,它是通过ICMPv6的PacketToo Big报文来完成的。首先源节点假设PMTU就是其出接口的MTU,发出报文,当转发路径上存在一个小于当前假设的PMTU时,就会向源节点发送PacketToo Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值。如此反复,直到报文到达目的地之后,源节点就能知道到达某个目的地的PMTU了。
- 假设源到目的要先后经过4条链路,链路地MTU分别是1500、1500、1400、1300,当源发送一个分片报文的时候,首先分成1500大小的片,当到达1400的出接口时,路由器就会返回PacketToo Big错误,同时携带1400的MTU值。源接收到之后就会重新分成1400大小的片,当到达1300的出接口时,同样返回PacketToo Big错误,携带1300的MTU值。之后源重新分成1300的报文,最终到达目的地,这样就找到了该路径的PMTU。
- IPv6过渡技术
- IPv6过渡技术简介
- IPv6过渡技术简介
- 概述
- IPv6与IPv4共存技术
- 双协议栈:
- IPv6节点同时支持IPv6和IPv4协议栈。
- 隧道:
- IPv6报文作为IPv4的载荷,由IPv4Internet中连接多个IPv6孤岛。
- IPv6与IPv4互通技术
- 提供IPv6与IPv4互相访问的技术。
- 适用于IPv6 Internet与IPv4 Internet共存,而两者又有互相通讯的需求。
- 双栈Dual Stack
- 双栈协议
- 设备必须支持IPv4/IPv6协议栈。
- 连接双栈网络的接口必须同时配置IPv4地址和IPv6地址。
- 双栈技术是IPv4向IPv6过渡的一种有效的技术。
- 网络中的节点同时支持IPv4和IPv6协议栈,源节点根据目的节点的不同选用不同的协议栈,而网络设备根据报文的协议类型选择不同的协议栈进行处理和转发。
- 双栈可以在一个单一的设备上实现,也可以是一个双栈骨干网。
- 对于双栈骨干网,其中的所有设备必须同时支持IPv4/IPv6协议栈,连接双栈网络的接口必须同时配置IPv4地址和IPv6地址。
- 同时支持IPv4及IPv6双协议栈
- 双栈协议
- 双协议栈:
- 所谓的双栈就是主机或者网络设备同时支持IPv4及IPv6双协议栈。
- 如果节点支持双栈,那么它能够同时使用V4和V6的协议栈、同时处理IPv4及IPv6的数据。
- 在双栈设备上,上层应用会优先选择IPv6协议栈,而不是IPv4。
- 比如,一个同时支持v4和v6的应用请求通过DNS请求地址,会先请求AAAA记录,如果没有,则再请求A记录。
- 双栈是V4、V6并存及IPv6过渡技术的基础。
- 就拿上图来说,路由器就是一个双栈设备,默认情况下路由器本身就已经支持IPv4,接口上也配置了IPv4的地址,已经能够正常转发IPv4的报文,此刻在激活路由器的IPv6数据转发能力,再为接口分配IPv6的单播地址,那么这个接口又有了IPv6数据转发能力。当然,此时对于路由器而言,IPv4及IPv6协议栈互不干扰,独立工作。
- 隧道
- 6over4隧道
- 6over4手动隧道
- 6over4手动隧道概述。
- 6over4手动隧道
- 6over4隧道
- 6over4手动隧道的一种;
- 源地址和目的地址均需手工指定;
- 用于边界路由器与边界路由器,或者主机与边界路由器之间。
- 如果一个边界设备要与多个设备建立手动隧道,就需要在设备上配置多个隧道,配置比较麻烦。
- 所以手动隧道通常用于两个边界路由器之间,为两个IPv6网络提供连接。
- 手动隧道优缺点
- 优点
- 可以用于任何IPv6穿越IPv4的环境,通用性好。
- 缺点
- 须手工配置。
- 转发机制
- IPv6 over IPv4手动隧道转发机制
- 当隧道边界设备的IPv6侧收到一个IPv6报文后。
- 根据IPv6报文的目的地址查找IPv6路由转发表。
- 如果该报文是从此虚拟隧道接口转发出去,则根据隧道接口配置的隧道源端和目的端的IPv4地址进行封装。
- 封装后的报文变成一个IPv4报文,交给IPv4协议栈处理。
- 报文通过IPv4网络转发到隧道的终点。
- 隧道终点收到一个隧道协议报文后,进行隧道解封装。
- 将解封装后的报文交给IPv6协议栈处理。
- 6over4 GRE隧道
- 6over4GRE隧道概述。
- 优点
- 6over4手动隧道的一种;
- 手工指定隧道的端点地址;
- GRE承载IPv6协议。
- IPv6over IPv4 GRE隧道使用标准的GRE隧道技术提供了点到点连接服务,需要手工指定隧道的端点地址。
- GRE隧道本身并不限制被封装的协议和传输协议,一个GRE隧道中被封装的协议可以是协议中允许的任意协议(可以是IPv4、IPv6、OSI、MPLS等)。
- IPv6over IPv4 GRE隧道在边界路由器上的传输机制和IPv6over IPv4手动隧道相同。
- 6to4隧道
- 6to4隧道概述
- 6over4自动隧道的一种,隧道也是使用内嵌在IPv6地址中的IPv4地址建立的。
- 支持Router到Router、Host到Router、Router到Host、 Host到Host。
- 采用6to4专用地址,即2002:IPv4::/48。
- 6to4地址可以表示为2002::/16,而一个6to4网络可以表示为2002:IPv4地址::/48。
- 6to4地址的网络前缀长度为64bit,其中前48bit(2002: a.b.c.d)被分配给路由器上的IPv4地址决定了,用户不能改变,而后16位(SLA)是由用户自己定义的。
- 地址格式
- FP:可聚合全球单播地址的格式前缀(FormatPrefix),其值为001。
- TLA:顶级聚合标识符(TopLevel Aggregator),有13个比特位,其二进制值为00000 0000 0010。
- SLA:站点级聚合标识符(SiteLevel Aggregator)。
- 可连接多个6to4网络。
- 一个IPv4地址只能用于一个6to4隧道的源地址。
- 如果一个边界路由器连接了多个6to4网络使用同样的IPv4地址做为隧道的源地址。
- 则使用6to地址中的SLA ID来区分。
- 但他们共用一个隧道。
- 通过SLA ID区分。
- 6to4中继
- 实现6to4网络和IPv6普通网络互通。
- 普通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网络中了。
- ISATAP隧道
- ISATAP隧道概述
- 6over4自动隧道的一种
- ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是另外一种自动隧道技术。
- ISATAP隧道同样使用了内嵌IPv4地址的特殊IPv6地址形式。
- 只是和6to4不同的是,6to4是使用IPv4地址做为网络前缀,而ISATAP用IPv4地址做为接口标识。
- 支持Host到Router、Router到Host、 Host到Host
- 采用ISATAP隧道专用地址
- 地址描述
- 如果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路由器的地址。
- NAT64
- NAT64技术实际上是一种协议转换技术,能够将分组在V4及V6格式之间灵活转换。
- IPv6过渡中的协议翻译技术就是将IPv6数据包的每个字段与IPv4数据包中的字段建立起一一映射的关系,从而在两个网络的边缘实现数据报文的转换。
- 当IPv4网络的节点需要直接与IPv6网络的节点进行通信时,默认情况下当然是行不通的,因为两个协议栈无法兼容。但是借助一台设备,由该设备来实现IPv6与IPv4的互转,那么上述通信需求就可以实现了。
- 3、IPv6配置命令
- GRE隧道 – 基本配置命令
- GRE隧道 – 基本配置命令
- 设置对GRE报文头进行校验是一个可选的操作步骤。
- 如果设置了对GRE报文头进行校验,则发送端根据GRE报文头和净荷信息计算校验和,然后将包含校验和的报文转发到对端。
- 接收端收到报文后,计算接收报文的校验和,并将该校验和与报文中的校验和进行比较。
- 如果结果一致,那么它将会继续处理此报文,否则将其丢弃。
- 如果本端配置了校验和,但是对端没有配置校验和,那么本端不会对接收的报文进行校验和验证。
- 设置GRE报文头的关键字也是一个可选的操作步骤。
- 如果设置了GRE报文头中的KEY字段,接收端将会检查接收的GRE报文头的关键字,如果与本端配置的关键字完全相同,表明验证成功,接受该报文,否则丢弃该报文。
- 配置GRE隧道
- 公司A网络拓扑如下所示,现根据需求完成如下配置:
- R1、R2和R3的IPv4地址如图所示,部署在OSPFv2的区域0中,该部分配置已经完成;
- 所需的IPv6地址已经标出;
- 采用IPv6 over IPv4 GRE隧道的形式,实现R1与R3的Loopback1之间的互通。
- 配置命令
- 命令含义:
- interface tunnel命令用来创建一个Tunnel接口,并进入该Tunnel接口视图。
- tunnel-protocolgre指定Tunnel为手动隧道模式。
- source{ ipv4-address | interface-type interface-number }指定Tunnel的源接口。
- destination{ ipv4-address }指定Tunnel的目的接口。
- ipv6 address { ipv6-address prefix-length }设置Tunnel接口的IPv6地址。
- IPv6备考建议
- 掌握IPv6各协议相关命令;
- 熟悉IPv6等原理和应用;
- 熟悉IPv6等相关策略工具的使用;
- 熟读HedEx文档;
- 包括HedEx涵盖的案例;
- 熟练掌握理解课程中设计的案例场景。