datacom-IPV6

IPV6

  • 前言
    • 众所周知,IPv4地址资源紧张限制了IP技术的进一步发展。我们迫切需要一种能够代替IPv4的技术,在满足IPv4功能的前提下,还能满足未来产业对于IP地址的需求。IPv6能从根本上解决这个问题,各行各业,从政府到市场对下一代互联网技术的迫切需求,推动了IPv6技术的出现与发展。
    • 本课程将重点介绍IPv6的基础知识,包括IPv6出现的背景、报文格式、地址分类、基础协议以及过渡技术等内容。
  • 目标
    • 阐述IPv6技术出现的背景
    • 区分IPv6的地址
    • 掌握IPv6基础协议
    • 阐述IPv6过渡技术
    • 掌握IPv6配置
  • 1、IPv6产生的背景
    • 国际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基本报头(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报文里时,报头必须按照下列顺序出现:

 

  • 说明
    • 路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头,并不是所有的扩展报头都需要被转发路由设备查看和处理的。
    • 除了目的选项扩展报头可能在一个IPv6报文中出现一次或两次(一次在路由扩展报头之前,另一次在上层协议数据报文之前),其余扩展报头只能出现一次。
  • IPv6地址分类
    • IPv6地址类型
      • 单播地址(Unicast Address)
        • 标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。
        • 在IPv6中,一个接口拥有多个IPv6地址是非常常见的现象。
      • 组播地址(Multicast Address)
        • l标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。
        • 只有加入相应组播组的设备接口才会侦听发往该组播地址的报文。
      • 任播地址(Anycast Address)
        • 任播地址标识一组网络接口(通常属于不同的节点)。
        • 目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
        • 实际上任播地址与单播地址使用同一个地址空间,也就是说,由路由器决定数据包是做任播转发还是单播转发。
      • IPv6没有定义广播地址(Broadcast Address)
    • IPv6单播地址
      • 可聚合全球单播地址
        • 全球单播地址定义用于IPv6 Internet。它们是全局唯一的和全局可路由的。
          • 类似IPv4公网地址。
          • 由前缀、子网ID和接口标识组成。

 

  • 全局路由前缀:由提供商指定给一个组织机构,一般至少为48bit。目前已经分配的全局路由前缀的前3bit均为001。因此前缀为2000::/3。
  • 子网:组织机构可以用子网ID来构建本地网络(Site),与IPv4中的子网号作用相似。子网ID通常最多分配到第64位。
  • 主机位:用来标识一个设备(Host),与IPv4中的主机ID作用相似。
  • 全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。
  • 链路本地地址
    • 在一个节点启动IPv6协议栈时,节点的每个接口会自动配置一个链路本地地址。该地址专门用来和相同链路上的其他主机通信。
      • 只能在连接到同一本地链路的节点之间使用,广泛应用于邻居发现、无状态地址等。
      • 链路本地地址前缀FE80::/10,将接口ID添加在后面作为地址的低64位。
      • 每一个IPv6接口都必须具备一个链路本地地址。

 

  • 链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。
  • 当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址(其固定的前缀+EUI-64规则形成的接口标识)。
  • 以链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。
  • 唯一本地地址
    • 为了代替站点本地地址的功能,又使这样的地址具有唯一性,避免产生像IPv4的私有地址泄漏到公网而造成的问题,RFC4193定义了唯一本地地址。
      • 唯一本地地址,概念上类似于IPv4中的私网地址,仅能够在本地网络使用,在IPv6 Internet上不可被路由。
      • 唯一本地地址固定前缀FC00::/7。它被分为两块,其中FC00::/8暂未定义,另一块是FD00::/8,其格式如下:

 

  • 字段解释
    • 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

 

  • 假设一个接口的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中其它机制的基础。

 

  • 协议类型号(即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邻居表。

 

  • 在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地址。
    • 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的主机将加入默认路由器列表中。
  • 收到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报文,并据此报文来更新自己的时间参数。
  • 几个生存时间
    • 当地址处于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与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手动隧道的一种;
  • 源地址和目的地址均需手工指定;
  • 用于边界路由器与边界路由器,或者主机与边界路由器之间。
    • 如果一个边界设备要与多个设备建立手动隧道,就需要在设备上配置多个隧道,配置比较麻烦。
    • 所以手动隧道通常用于两个边界路由器之间,为两个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报文头中的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涵盖的案例;
    • 熟练掌握理解课程中设计的案例场景。

datacom-WAN

WAN

  • 前言
    • WAN网络中的常见的接口、PPP/MP、POS/IP-Trunk以及PPPoE的原理与配置。
  • 目标
    • 描述广域网中常见的Ethernet及POS接口
    • 描述PPP/MP的原理与配置
    • 描述IP-Trunk的原理与配置
    • 描述PPPoE的原理与配置
  • 1、广域网接口
    • 路由器广域网接口演进
      • 路由器物理接口带宽演进
        • 接口的核心要素:带宽、距离、成本、功耗、密度、兼容、演进

 

  • 路由器POS/Ethernet接口演进趋势
    • POS接口现网成熟应用,以太接口持续发展

 

  • Ethernet接口
    • 10M以太网(标准以太网)/100M以太网(快速以太网)
      • 10M/100M以太网物理层按照速率等级和传输介质来划分。
      • 常见的类型:
        • 10BASE-T: 采用电话双绞线;
        • 100BASE-T: 所有的100Mb/s介质的统称;
        • 100BASE-X: 100BASE-TX和100BASE-FX的统称;
        • 100BASE-TX: 采用两对屏蔽双绞线或高质量的5类非屏蔽双绞线;
        • 100BASE-FX: 采用两根光纤,一根用于发送,一根用于接收。
      • 1000M以太网(千兆以太网)
        • 1000BASE-T: IEEE802.3ab,5类非屏蔽双绞线
        • 1000BASE-X: IEEE802.3z,多模光纤、单模光纤和150欧平衡屏蔽式双绞线。
        • 1000BASE-CX: 由于最大长度25米,现在应用已经很少。
        • 1000BASE-SX: 短波850nm,激光范围(770~860nm)只用于多模光纤。
        • 1000BASE-LX: 长波1310nm,激光范围(1270~1355nm)主要用于单模光纤,但也可以用于多模光纤。
      • 10G以太网(万兆以太网)
        • 标准:3ae
        • 10Gbs/s以太网有两类:
          • 串行的10GBase-S/L/E-R/W :
            • 10GBase-S:短距;850nm;多模。
            • 10GBase-L:长距;1310nm;单模。
            • 10GBase-E:超长距;1550nm;单模。
            • W= WAN PHY广域网物理层,9.95328Gb/s 码率,采用SONETSTS-192c及SDHVC-4-64C封装,可以使用DWDM或SDH/SONET光/传输网作传送,使10G以太网无缝接入SDH。
            • R= LAN PHY局域网物理层,10.3125Gb/s码率。
          • 4路并行WDM (波分复用)的10GBase-LX4:
            • 10GBase-LX4:1310nm;多模。
            • 10GBase-LX4:1310nm;单模。
          • 100G以太网(100G以太网)
            • 100G以太网(100GE)标准从开始讨论制订到正式获批发布,经历了长达4年之久:2010年6月,IEEE正式对外宣布IEEE802.3ba标准。
            • 在当前正式发布的3ba标准中,对于100GbpsMAC速率,提供了如下物理层规范:
              • 40km单模光纤(SMF): 对应的PHY为100GBASE-ER4,由4个WDM(1310nm, 800GHz波长间隔)通道组成。
              • 10km单模光纤: 对应的PHY为100GBASE-LR4,由4个WDM(1310nm,800GHz波长间隔)通道组成。
              • 100m OM3多模光纤: 对应的PHY为100GBASE-SR10,由10条独立的多模光纤通道(850nm)组成。
              • 7m铜线: 对应的PHY为100GBASE-CR10,由10条独立的铜缆通道组成。
            • POS接口
              • PacketOver SONET/SDH:在SONET/SDH上承载IP包或其他数据包的传输技术。
              • POS将长度可变的数据包直接映射进SONET同步载荷中,使用SONET物理层传输标准,提供了一种高速、可靠、点到点的数据连接。采用光纤进行传输。
              • OC-n:Optical Carrier level n(光载体等级)是光纤传输的一种单位,最小的单位为OC-1,其传输数据量约为51.84Mbps。
              • POS常用接口速率:
                • OC-3/STM-1: 155.52Mbps
                • OC-12/STM-4: 622.08Mbps
                • OC48/STM-16: 2488.32Mbps
                • OC192/STM-64: 9953.28Mbps
                • OC768/STM-256:39813.12Mbps
              • SONET(SynchronousOptical Network)同步光网络,OC-n/STM-n序列。
              • SDH(SynchronousDigital Hierarchy)同步数字系列,是CCITT定义的,它使用了SONET速率的一个子集,STM-n序列。
              • STM:Synchronous Transport Module,同步传输模块。
            • Ethernet接口与POS接口比较
              • 速率
                • Ethernet接口和POS接口在速率上,都可以达到10G、40G。在100GEthernet标准发布后,速率上Ethernet接口更胜一筹。
              • 报文
                • POS端口里采用PPP或HDLC的二层封装来承载IP,二层报头开销最长9个字节,也可能是7个字节。
                • 而10GLAN和WAN都是以太封装,二层报头开销是18个字节。由此看出,POS接口对IP报文的传输效率更高。
              • 成本
                • 成本上,Ethernet接口/Ethernet单板价格更低。例如10GEEthernet,近似10GPOS价格的一半。
              • 接口LAN/WAN模式
                • 10GXFP多模光收发模块可以工作在LAN或WAN两种模式,需要根据实际的应用来选择合适的模式。
                • 10GLAN/WAN的区别在于封装不同。
                  • 10GLAN是纯Ethernet封装。
                  • 10GWAN接口链路层采用Ethernet封装,但是在物理层把封装好的数据直接映射到SDH的序列中。
                • 无论是LAN或是WAN模式,都可以用来作为WAN口实现广域网长距离传输。在广域网的两端,两台路由设备接口模式必须相同。
                • 在路由器之间存在传输设备的情况下,需要注意与传输设备的配合。一般来说,当传输设备是10GPOS时,路由器可以用10GPOS、10GEWAN来配合;当传输设备是10G以太时,路由器只能用10GELAN来配合。需要注意的是,对于当前较新的传输设备而言,无论路由器侧是10GELAN/WAN还是10GPOS都可以支持,只需要更换单板模块和软件配置即可。
              • 2、PPP原理与配置
                • PPP基本概念
                  • 定义
                    • PPP协议在TCP/IP协议栈中位于数据链路层,是目前应用最广泛的点到点链路层协议。
                    • 数据封装方式定义了如何封装多种类型的上层协议数据包。
                    • 为了能适应多种多样的链路类型,PPP定义了链路控制协议LCP。LCP可以自动检测链路环境,如是否存在环路;协商链路参数,如最大数据包长度,使用何种认证协议等等。
                    • 与其他数据链路层协议相比,PPP协议的一个重要特点是可以提供认证功能,链路两端可以协商使用何种认证协议并实施认证过程,只有认证成功才会建立连接。这个特点使PPP协议适合运营商用来接入分散的用户。
                    • PPP定义了一组网络层控制协议NCP,每一个协议对应一种网络层协议,用于协商网络层地址等参数,例如IPCP用于协商控制IP,IPXCP用于协商控制IPX协议等。
                  • 三大组件
                    • 数据封装方式
                      • 定义封装多协议数据包的方法。
                    • 链路控制协议(Link Control Protocol,LCP)
                      • 定义建立、协商和测试数据链路层连接的方法。
                    • 网络层控制协议(Network Control Protocol,NCP)
                      • 包含一组协议,用于对不同的网络层协议进行连接建立和参数协商。
                    • 报文结构

 

  • PPP报文封装格式
    • Flag域
      • Flag域标识一个物理帧的起始和结束,该字节为0x7E。
    • Address域
      • Address域可以唯一标识对端。
      • PPP协议是被运用在点对点的链路上,因此,使用PPP协议互连的两个通信设备无须知道对方的数据链路层地址。
      • 按照协议的规定将该字节填充为全1的广播地址,对于PPP协议来说,该字段无实际意义。
    • Control域
      • 该字段默认值为0x03,表明为无序号帧,PPP默认没有采用序列号和确认来实现可靠传输。
      • Address和Control域一起标识此报文为PPP报文,即PPP报文头为FF03。
    • Protocol域
      • 协议域可用来区分PPP数据帧中信息域所承载的数据报类型。
    • LCP报文封装格式
      • Code域
        • 代码域的长度为一个字节,主要是用来标识LCP数据报文的类型。
      • Identifier域
        • 标识域为1个字节,用来匹配请求和响应,当标识域值为非法时,该报文将被丢弃
        • 通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致。
      • Length域
        • 长度域的值就是该LCP报文的总字节数据。它是代码域、标志域、长度域和数据域四个域长度的总和。
        • 长度域所指示字节数之外的字节将被当作填充字节而忽略掉,而且该域的内容不能超过MRU的值。
      • Data域
        • Type为协商选项类型。
        • Length为协商选项长度,它是指Data域的总长度,也就是包含Type、Length和Data。
        • Data为协商的选项具体内容。
      • 建链过程

 

  • 建链过程
    • Dead
      • 这是PPP工作开始和结束的阶段。当物理层变为可用状态(UP)之后,PPP进入Establish阶段。
    • Establish
      • PPP在此阶段使用LCP协商链路层参数。
      • 如果链路层参数协商不成功(FAIL),则PPP连接建立不成功,PPP退回到Dead阶段。
      • 如果链路层参数协商成功(OPENED),则PPP进入Authenticate阶段。
    • Authenticate
      • PPP在此阶段认证对端,如果认证失败(FAIL),则PPP进入Terminate阶段。
      • 如果认证成功(SUCCESS)或者没配置认证(NONE),则PPP进入Network阶段。
    • Network
      • PPP在此阶段使用NCP进行网络层参数协商,协商成功则PPP连接建立成功,开始传输网络层数据包。
      • 当上层协议认为应当关闭此连接(例如按需电路)或者管理员手工关闭PPP连接(CLOSING),则PPP进入Terminate阶段。
    • Terminate
      • PPP在此阶段使用LCP关闭PPP连接。
      • PPP连接关闭(Down)后,PPP进入Dead阶段。
    • 注意
      • 此处列出的是PPP的工作阶段,并非PPP的协议状态。
      • 由于PPP是由一组协议组成的,因此PPP本身没有协议状态。
      • 只有特定的的协议如LCP和NCP等才有协议状态和状态转换(协议状态机)。
    • LCP协议
      • 报文类型
        • Configure-Request
          • 包含发送者试图使用的、没有使用默认值的参数列表。
        • Configure-Ack
          • 表示完全接受对端发送的Configure-Request的参数取值。
        • Configure-Nak
          • 表示对端发送的Configure-Request中的参数取值在本地不合法。
        • Configure-Reject
          • 表示对端发送的Configure-Request中的参数本地不能识别。
        • LCP协议有3大类报文
          • 链路配置包
            • 用于建立和配置链路。
            • Configure-Request(匹配请求)。
            • Configure-Ack(匹配确认)。
            • Configure-Nak(匹配否认)。
            • 和Configure-Reject(匹配拒绝)。
          • 链路结束包
            • 用于结束一个链路。
            • Terminate-Request(终止请求)。
            • Terminate-Ack(终止确认)。
          • 链路维修包
            • 用于管理和调试一个链路。
            • Code-Reject(代码拒绝)。
            • Protocol-Reject(协议拒绝)。
            • Echo-Request(回波请求)。
            • Echo-Reply(回波应答)。
            • 和 Discard-Request(抛弃请求)。
          • LCP用于协商的参数

 

  • MRU
    • 在VRP平台上,MRU参数使用接口上配置的最大传输单元(MTU)值来表示的。
  • 认证协议
    • 常用的PPP认证协议有PAP和CHAP。
    • 一条PPP链路的两端可以使用不同的认证协议认证对端。
    • 但是被认证方必须支持认证方使用的认证协议并正确配置用户名和密码等认证信息。
  • 魔术字
    • LCP使用魔术字(Magic-Number)检测链路环路和其它异常情况。
    • 魔术字为随机产生的一个数字,随机机制需要保证两端产生相同魔术字的可能性几乎为0。
    • 收到一个Configure-Request报文之后,其包含的魔术字需要和本地产生的魔术字做比较,
      • 如果收到的Configure-Request报文和自身产生的魔术字不同
        • 表示链路无环路。则使用Confugure-Ack报文确认(其他参数也协商成功),表示魔术字协商成功。
        • 在后续发送的报文中,如果报文含有魔术字字段,则该字段设置为协商成功的魔术字,LCP不再产生新的魔术字。
      • 如果收到的Configure-Request报文和自身产生的魔术字相同
        • 则发送一个Configure-Nak报文,携带一个新的魔术字。
        • 然后,不管新收到的Configure-Nak报文中是否携带相同的魔术字,LCP都发送一个新的Configure-Request报文,携带一个新的魔术字。
        • 如果链路有环路,则这个过程会不停的持续下去,如果链路没有环路,则报文交互会很快恢复正常。
      • LCP链路协商
        • LCP链路协商成功

 

  • 如图所示,R1和R2使用串行链路相连,运行PPP。
  • 当物理层链路变为可用状态之后,R1和R2使用LCP协商链路参数。
  • 本例中,R1首先发送一个LCP报文。
  • R1向R2发送Configure-Request报文,此报文包含在发送者(R1)上配置的链路层参数,每个链路层参数使用“类型,长度,取值”的结构表示。
  • 当R2收到此Configure-Request报文之后,如果R2能识别此报文中的所有链路层参数,并且认为每个参数的取值都是可以接受的,则向R1回应一个Configure-Ack报文。
  • 在没有收到Configure-Ack报文的情况下,每隔3秒重传一次Configure-Request报文,如果连续10次发送Configure-Request报文仍然没有收到Configure-Ack报文,则认为对端不可用,停止发送Configure-Request报文。
  • 注意
    • 完成上述过程只是表明R2认为R1上的链路参数配置是可接受的。
    • R2也需要向R1发送Configure-Request报文,使R1检测R2上的链路参数配置是不是可接受的。
  • LCP链路协商不成功

 

  • 当R2收到R1发送的Configure-Request报文之后,如果R2能识别此报文中携带的所有链路层参数,但是认为部分或全部参数的取值不能接受,即参数的取值协商不成功,则R2需要向R1回应一个Configure-Nak报文。
  • 在这个Configure-Nak报文中,只包含不能接受的那部分链路层参数列表,每一个包含在此报文中链路层参数的取值均被修改为此报文的发送者(R2)上可以接受的取值(或取值范围)。
  • 在收到Configure-Nak报文之后,R1需要根据此报文中的链路层参数重新选择本地使用的相关参数,并重新发送一个Configure-Request。
  • 连续五次协商仍然不成功的参数将被禁用,不再继续协商。
  • LCP链路协商不识别

 

  • 当R2收到R1发送的Configure-Request报文之后,如果R2不能识别此报文中携带的部分或全部链路层参数,则R2需要向R1回应一个Configure-Reject报文。
  • 在此Configure-Reject报文中,只包含不被识别的那部分链路层参数列表。
  • 在收到Configure-Reject报文之后,R1需要向R2重新发送一个Configure-Request报文,在新的Configure-Request报文中,不再包含不被对端(R2)识别的参数。
  • 检测链路状态

 

  • LCP建立连接之后,可以使用Echo-Request报文和Echo-Reply报文检测链路状态,收到一个Echo-Request报文之后应当回应一个Echo-Reply报文,表示链路状态正常。
  • VRP平台默认每隔10秒发送一次Echo-Request报文。
  • 连接关闭

 

  • 认证不成功或者管理员手工关闭等原因可以使LCP关闭已经建立的连接。
  • LCP关闭连接使用Terminate-Request报文和Terminate-Ack报文,Terminate-Request报文用于请求对端关闭连接,一旦收到一个Terminate-Request报文,LCP必须回应一个Terminate-Ack报文确认连接关闭。
  • 在没有收到Terminate-Ack报文的情况下,每隔3秒重传一次Terminate-Request报文,连续两次重传没有收到Terminate-Ack报文,则认为对端不可用,连接关闭。
  • PAP认证协议
    • 报文类型
      • Authenticate-Request
        • 用于被验证方发送用户名和密码,Data字段包含明文用户名和密码信息。
      • Authenticate-Ack
        • 用于验证方发送验证成功信息,Data字段可以包含文本提示信息。
      • Authenticate-Nak
        • 用于验证方发送验证失败信息,Data字段可以包含文本提示信息。
      • 工作原理

 

  • PAP工作模式
    • 被认证方将配置的用户名和密码信息使用Authenticate-Request报文以明文方式发送给认证方,本例中,用户名为“huawei”,密码为“hello”;
    • 认证方收到被认证方发送的用户名和密码信息之后,根据本地配置的用户名和密码数据库检查用户名和密码信息是否正确匹配,
      • 如果正确,则返回Authenticate-Ack报文,表示认证成功。
      • 如果不能正确匹配,则返回Authenticate-Nak报文,表示认证失败。
    • PAP报文直接封装在PPP报文中。
  • CHAP认证协议
    • 报文类型
      • Challenge
        • 用于验证方向被验证方发送Challenge,发起验证过程,Data字段包含Challenge.
        • 使用Challenge对密码做加密运算的算法为MD5{ Identifier+密码+Challenge },意思是将Identifier、密码和Challenge三部分连成一个字符串整体,然后对此字符串做MD5运算,得到一个16字节长的摘要信息,在Response报文中Data字段包含的加密运算之后的密码信息就是此摘要信息。
      • Response
        • 用于被验证方向验证方返回用户信息,Data字段含有返回的用户名以及加密运算之后的密码信息。
      • Success
        • 用于验证方向被验证方发送认证成功信息,Data字段可以包含文本提示信息。
      • Failure
        • 用于验证方向被验证方发送认证失败信息,Data字段可以包含文本提示信息。
      • 工作原理

 

  • CHAP的认证过程需要三次报文的交互。
  • 为了匹配请求报文和回应报文,报文中含有Identifier字段,一次认证过程所使用的报文均使用相同的Identifier信息。
  • CHAP单向验证过程分为两种情况:验证方配置了用户名和验证方没有配置用户名。
    • 验证方配置了用户名的验证过程
      • 即接口配置命令ppp chap user username
      • 推荐使用验证方配置用户名的方式,这样可以对验证方的用户名进行确认。
      • 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge),并同时将本端的用户名附带上一起发送给被验证方。
      • 被验证方接到验证方的验证请求后,先检查本端接口上是否配置了pppchap password命令
        • 如果配置了该命令,则被验证方将生成的密文((Identifier+密码+随机数)的MD5)和自己的用户名发回验证方(Response)。
        • 如果接口上未配置pppchap password命令,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,将密文((Identifier+密码+随机数)的MD5)和被验证方自己的用户名发回验证方(Response)。
      • 验证方将自己本身保存的密码、Identifier和随机数进行MD5算法,和收到respone中的密文进行比较,以验证认证是否正确。
    • 验证方没有配置用户名
      • 即接口没有配置命令ppp chap user username
      • 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge)。
      • 被验证方接到验证方的验证请求后,利用Identifier、pppchap password命令配置的CHAP密码和随机数进行MD5算法,将生成的密文和自己的用户名发回验证方(Response)。
      • 验证方将自己本身保存的密码、Identifier和随机数进行MD5算法,和收到respone中的密文进行比较,以验证认证是否正确。
    • NCP协议
      • IPCP静态协商IP地址

 

  • IPCP,用于协商控制IP参数,使PPP可用于传输IP数据包。
  • IPCP使用和LCP相同的协商机制、报文类型,但IPCP并非调用LCP,只是工作过程、报文等和LCP相同。
    • 两端配置的IP地址分别为12.1.1.1/24和12.1.1.2/24(两端IP地址即使不在同一网段也会通过IPCP协商)。
    • 两端静态配置IP地址的时候协商过程
      • R1和R2都要发送Configure-Request报文,在此报文中包含本地配置的IP地址。
      • R1和R2接收到对端的Configure-Request报文之后,检查其中的IP地址,如果IP地址是一个合法的单播IP地址,而且和本地配置的IP地址不同(没有IP冲突),则认为对端可以使用该地址,回应一个Configure-Ack报文。
      • 通过IPCP发送的信息,PPP链路的两端都可以知道对端使用的32位IP地址。
    • IPCP动态协商IP地址

 

  • 如图所示,R1配置为请求对端分配IP地址,R2配置静态IP地址12.1.1.2/24,并且启用R2给对端分配IP地址的能力,给R1分配IP地址12.1.1.1。
  • 两端动态协商IP地址的过程
    • R1向R2发送一个Configure-Request报文,此报文中含有IP地址0.0.0.0,一个含有0.0.0.0的IP地址的Configure-Request报文表示向对端请求IP地址;
    • R2收到上述Configure-Request报文后,认为其中包含的地址(0.0.0.0)不合法,使用Configure-Nak回应一个新的IP地址12.1.1.1;
    • R1收到此Configure-Nak报文之后,更新本地IP地址,并重新发送一个Configure-Request报文,包含新的IP地址12.1.1.1;
    • R2收到Configure-Request报文后,认为其中包含的IP地址为合法地址,回应一个Configure-Ack报文;
    • 同时,R2也要向R1发送Configure-Request报文请求使用地址12.1.1.2,R1认为此地址合法,回应Configure-Ack报文。
  • MP基本原理
    • MP基本原理
      • 增加带宽,将多个PPP链路捆绑使用。
      • MultiLink PPP允许将报文分片,分片将从多个点对点链路上送到同一个目的地。
    • MP方式下链路协商过程
      • LCP阶段,也需验证对端接口是否工作在MP方式下。
      • NCP阶段,根据MP-Group接口或指定虚拟接口模板的各项NCP参数(如IP地址等)进行NCP协商。
    • 实现方式
      • 虚拟接口模板方式。
      • MP-Group方式。
    • PPP/MP配置
      • 配置PPP
        • 配置R1和R2的互联接口封装类型为PPP,使用CHAP认证,用户名为Huawei,密码为Hello。

 

  • R1
    • aaa
    • local-user Huawei password cipherHello
    • local-user Huawei service-type ppp
    • #
    • interface Serial1/0/0
    • link-protocol ppp
    • ppp authentication-mode chap //命令用来设置本端PPP协议对对端设备的认证方式,有chap | pap两种
    • ppp chapuser Huawei //命令用来配置CHAP验证的用户名
    • ip address ppp-negotiate //命令用来为本端接口配置IP地址可协商属性,使本端接口接受PPP协商产生的由对端分配的IP地址
  • R2
    • interface Serial1/0/0
    • link-protocol ppp
    • remote address 12.1.1.1
    • ppp chapuser Huawei
    • ppp chappassword cipher Hello //命令用来配置CHAP验证的口令,有cipher(密文显示) | simple(明文显示)
    • ip address 12.1.1.2 255.255.255.0 //命令用来配置为对端分配IP地址或指定地址池
  • 配置MP
    • 为了增加接口带宽,将R1与R2的所有互连PPP接口采用MP-Group进行MP绑定;R1与R2之间PAP认证,R1为认证端,R2为被认证端,且用户名为Huawei,密码为Hello。

 

  • R1
    • aaa
    • local-user Huawei password cipher Hello
    • local-user Huawei service-type ppp
    • #
    • interface Mp-group 0/0/0 //命令用来创建一个MP-Group类型的接口并进入MP-Group接口视图
    • ip address 12.1.1.1 255.255.255.0
    • #
    • interface Serial1/0/0
    • link-protocol ppp
    • ppp authentication-mode pap
    • ppp mp Mp-group0/0/0 //命令用来将接口加入指定的MP-group,使该接口工作在MP方式
    • #
    • interface Serial1/0/1
    • link-protocol ppp
    • ppp authentication-mode pap
    • ppp mp Mp-group0/0/0
  • R2
    • interface Mp-group 0/0/0
    • ip address 12.1.1.2 255.255.255.0
    • #
    • interface Serial1/0/0
    • link-protocol ppp
    • ppp paplocal-user Huawei password simple Hello
    • ppp mp Mp-group0/0/0
    • #
    • interface Serial1/0/1
    • link-protocol ppp
    • ppp paplocal-user Huawei password simple Hello
    • ppp mp Mp-group0/0/0
  • prestart 命令用来重新启动当前接口。
  • 3、IP-Trunk
    • IP-Trunk原理
      • Trunk接口分为Eth-Trunk和IP-Trunk两种。
        • Eth-Trunk只能由以太网链路构成。
        • IP-Trunk一般由POS接口构成。
      • 在一个IP-Trunk内,可以实现流量负载分担。负载分担分为逐流负载分担和逐包负载分担。
        • 逐流负载分担:当报文的源IP地址和目的IP地址都相同时,这些报文从同一个成员链路上通过。
        • 逐包负载分担:以报文为单位分别从不同的成员链路上发送。
      • IP-Trunk的成员接口只能使用HDLC封装形式。
      • IP-Trunk的原理与Eth-Trunk类似。
    • IP-Trunk配置

 

  • 4、PPPoE原理与配置
    • PPPoE原理
      • PPPoE概述
        • PPP应用于以太网以实现广播式的网络中多台主机连接到远端的接入服务器的技术。
        • PPPoE利用以太网将大量主机组成网络,通过一个远端接入设备连入因特网,并运用PPP协议对接入的每个主机进行控制,具有适用范围广、安全性高、计费方便的特点。
        • PPPoE组网结构采用Client/Server 模型。

 

  • PPPoE会话建立过程
    • PPPoE可分为三个阶段,即Discovery阶段、Session阶段和Terminate阶段

 

  • Discovery阶段
    • PPPoE Client广播发送一个PADI(PPPoEActive Discovery Initial)报文,在此报文中包含PPPoE Client想要得到的服务类型信息。
    • 所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer)报文。
    • 根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoEClient选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR(PPPoE Active Discovery Request)报文。
    • PPPoE Server产生一个唯一的会话ID(Session ID),标识和PPPoEClient的这个会话,通过发送一个PADS(PPPoE Active Discovery Session-confirmation)报文把会话ID发送给PPPoE Client,会话建立成功后便进入PPPoE Session阶段。
    • 完成后通信双方都会知道PPPoE的Session_ID及对方MAC,它们共同确定唯一的PPPoE Session。
  • Seesion阶段
    • PPPoE Session上的PPP协商和普通的PPP协商方式一致。
    • PPPoE Session的PPP协商成功后,就可以承载PPP数据报文。
    • 在PPPoE Session阶段所有的以太网数据包都是单播发送的
  • Terminate阶段
    • 进入PPPoE Session阶段后,PPPoE Client和PPPoE Server都可以通过发送PADT报文的方式来结束PPPoE连接。
    • PADT数据包可以在会话建立以后的任意时刻单播发送。
    • 在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了。
  • PPPoE配置
    • 公司A希望部署PPPoE,现根据需求完成如下配置

 

  • R4为PPPoE Server端,为客户端分配IP地址池范围1.1.1.0/24,使用PAP认证模式;
  • R1为PPPoE Client端,认证用户名/密码为HuaweiR1/R1;
  • R2为PPPoE Client端,认证用户名/密码为HuaweiR2/R2;
  • R3为PPPoE Client端,认证用户名/密码为HuaweiR3/R3。
  • Client R1的配置

 

  • Server R4的配置

 

  • 验证
    • 此例中,R1模拟PPPoE客户机PC进行PPPoE拨号上网,R4作为PPPoE Server对其进行验证和地址分配。
  • 总结
    • 常见的广域网接口
    • Ethernet接口
    • POS接口/IP-Trunk
    • PPP/MP
    • PPPoE