CCNP路由实验之十一 IPv6
IPv4是互联网协议(InternetProtocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议。IPv4可以运行在各种各样的底层网络上,比如端对端的串行数据链路(PPP协议和SLIP协议),卫星链路, 以太网等等。全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议。IPv4中规定IP地址长度为32,即有2^32-1个地址IANA组织将IP地址分为A,B,C,D 4类,把32位的地址分为两个部分:前面的部分代表网络地址,由IANA分配,后面部分代表局域网地址。如在C类网络中,前24位为网络地址,后8位为局域网地址,可提供254个设备地址(因为有两个地址不能为网络设备使用: 255为广播地址,0代表此网络本身) 。网络掩码(Netmask)限制了网络的范围,1代表网络部分,0代表设备地址部分,例如C类地址常用的网络掩码为255.255.255.0。 P包由首部(header)和实际的数据部分组成。数据部分一般用来传送其它的协议,如TCP,UDP,ICMP等。数据部分最长可为65515字节(Byte)(=2xx16 - 1 - 最短首部长度20字节) 。一般而言,低层(链路层)的特性会限制能支持的IP包长。例如以太网(Ethernet)协议,有一个协议参数,即所谓的最大传输单元(Maximum Transfer Unit, MTU) ,为1518字节,以太网的帧首部使用18字节,剩给整个IP包(首部+数据部分)的只有1500字节。还有一些底层网络只能支持更短的包长。这种情况下,IP协议提供一个分割(fragment)的可选功能。长的IP包会被分割成许多短的IP包,每一个包中携带一个标志(Fragmentid)。发送方(比如一个路由器) 将长IP包分割,一个一个发送,接送方(如另一个路由器)按照相应的IP地址和分割标志将这些短IP包再组装还原成原来的长IP包。IPv4协议结构
Version - 4位字段,指出当前使用的 IP 版本。
IP Header Length (IHL) ─ 指数据报协议头长度,表示协议头具有32位字长的数量。指向数据起点。正确协议头最小值为5。
Type-of-Service ─ 指出上层协议对处理当前数据报所期望的服务质量,并对数据报按照重要性级别进行分配。这些8位字段用于分配优先级、延迟、吞吐量以及可靠性。(即TOS)
Total Length ─ 指定整个 IP 数据包的字节长度,包括数据和协议头。其最大值为65,535字节。典型的主机可以接收576字节的数据报。
Identification ─ 包含一个整数,用于识别当前数据报。该字段由发送端分配帮助接收端集中数据报分片。
Flags ─ 由3位字段构成,其中最低位(MF)控制分片,存在下一个分片置为1,否则置0代表结束分片。中间位(DF)指出数据包是否可进行分片。第三位即最高位保留不使用,但是必须为0。
Fragment Offset ─ 13位字段,指出与源数据报的起始端相关的分片数据位置,支持目标IP适当重建源数据报。
Time-to-Live ─ 是一种计数器,在丢弃数据报的每个点值依次减1直至减少为0。这样确保数据包无止境的环路过程(即TTL)。
Protocol ─ 指出在 IP 处理过程完成之后,有哪种上层协议接收导入数据包。
Header Checksum ─ 帮助确保 IP 协议头的完整性。由于某些协议头字段的改变,如生存期(Time toLive),这就需要对每个点重新计算和检验。Internet 协议头需要进行处理。
Source Address ─ 源主机IP地址。
Destination Address ─ 目标主机IP地址。
Options ─ 允许 IP 支持各种选项,如安全性。
Data ─ 包括上层信息。
IPv6是IETF(互联网工程任务组,InternetEngineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。随着互联网的发展,IPv4面临的最大问题是网络地址资源有限,从理论上讲,编址1600万个网络、40亿台主机。但采用A、B、C三类编址方式后,可用的网络地址和主机地址的数目大打折扣。在这样的环境下,IPv6应运而生。单从数量级上来说,IPv6所拥有的地址容量是IPv4的约8×10^28倍,达到2^128(算上全零的)个。这不但解决了网络地址资源数量的问题,同时也为除电脑外的设备连入互联网在数量限制上扫清了障碍。如果说IPv4实现的只是人机对话,而IPv6则扩展到任意事物之间的对话,它不仅可以为人类服务,还将服务于众多硬件设备,如家用电器、传感器、远程照相机、汽车等,它将是无时不在,无处不在的深入社会每个角落的真正的宽带网。而且它所带来的经济效益将非常巨大。
IPv6包由IPv6包头(40字节固定长度)、扩展包头和上层协议数据单元三部分组成。
IPv6包扩展包头中的分段包头(下文详述)中指明了IPv6包的分段情况。其中不可分段部分包括:IPv6包头、Hop-by-Hop选项包头、目的地选项包头(适用于中转路由器)和路由包头;可分段部分包括:认证包头、ESP协议包头、目的地选项包头(适用于最终目的地)和上层协议数据单元。但是需要注意的是,在IPv6中,只有源节点才能对负载进行分段,并且IPv6超大包不能使用该项服务。
(A)IPv6包头长度固定为40字节,去掉了IPv4中一切可选项,只包括8个必要的字段,因此尽管IPv6地址长度为IPv4的四倍,IPv6包头长度仅为IPv4包头长度的两倍。其中的各个字段分别为:
Version(版本号):4位,IP协议版本号,值= 6。
Traffic Class(通信类别):8位,指示IPv6数据流通信类别或优先级。功能类似于IPv4的服务类型(TOS)字段。
Flow Label(流标记):20位,IPv6新增字段,标记需要IPv6路由器特殊处理的数据流。该字段用于某些对连接的服务质量有特殊要求的通信,诸如音频或视频等实时数据传输。在IPv6中,同一信源和信宿之间可以有多种不同的数据流,彼此之间以非“0”流标记区分。如果不要求路由器做特殊处理,则该字段值置为“0”。
Payload Length(负载长度):16位负载长度。负载长度包括扩展头和上层PDU,16位最多可表示65535字节负载长度。超过这一字节数的负载,该字段值置为“0”,使用扩展头逐个跳段(Hop-by-Hop)选项中的巨量负载(Jumbo Payload)选项。
Next Header(下一包头):8位,识别紧跟IPv6头后的包头类型,如扩展头(有的话)或某个传输层协议头(诸如TCP,UDP或着ICMPv6)。
Hop Limit(跳段数限制):8位,类似于IPv4的TTL(生命期)字段,用包在路由器之间的转发次数来限定包的生命期。包每经过一次转发,该字段减1,减到0时就把这个包丢弃。Source Address(源地址):128位,发送方主机地址。Destination Address(目的地址):128位,在大多数情况下,目的地址即信宿地址。但如果存在路由扩展头的话,目的地址可能是发送方路由表中下一个路由器接口。
(B)流标签RFC2460对IPv6流标签的特征进行了说明:
一对源和目的之间有可能有多个激活的流,也可能有不属于任何一个流的流量,一个流由源地址和流标签的组合唯一确定。
所携带的流标签值为 0 的数据包不属于任何一个流。
需要发送流的源节点赋给其流标签特定的值。流标签是一个随机数,目的是使所产生的流标签都能作为哈希关键字。对那些不支持流标签处理的设备节点和应用把流标签值赋值为 0,或者不对该字段处理。
一个流那些的所有数据包产生时必须具有相同的属性,包括源地址、目的地址、非 0 的流标签。
如果其中任何一个数据包包含逐跳选项报头,那么流的每一个包都必须包含相同的逐跳选项报头(逐跳选项报头的下一个报头字段除外)。
流路径中流处理状态的最大生命周期要在状态建立机制中说明。
当一个结点重启时,例如死机后的恢复运行,必须小心使用流标签,因为该流标签有可能在前面仍处于最大生存周期内的的流中使用。
不要求所有或至少大多数数据包属于某一个流,即都携带有非 0 的流标签.
(C)扩展包头IPv6包头设计中对原IPv4包头所做的一项重要改进就是将所有可选字段移出IPv6包头,置于扩展头中。由于除Hop-by-Hop选项扩展头外,其他扩展头不受中转路由器检查或处理,这样就能提高路由器处理包含选项的IPv6分组的性能。通常,一个典型的IPv6包,没有扩展头。仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节限制,以便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展头总是8字节长度的整数倍。RFC 2460中定义了以下6个IPv6扩展头:Hop-by-Hop(逐个跳段)选项包头、目的地选项包头、路由包头、分段包头、认证包头和ESP协议包头。IPv6包头结构
Hop-by-Hop选项包头包含分组传送过程中,每个路由器都必须检查和处理的特殊参数选项。其中的选项描述一个分组的某些特性或用于提供填充。这些选项有:
Pad1选项(选项类型为0),填充单字节。
PadN选项(选项类型为1),填充2个以上字节。
Jumbo Payload选项(选项类型为194),用于传送超大分组。使用Jumbo Payload选项,分组有效载荷长度最大可达4,294,967,295字节。负载长度超过65,535字节的IPv6包称为“超大包”。
路由器警告选项(选项类型为5),提醒路由器分组内容需要做特殊处理。路由器警告选项用于组播收听者发现和RSVP(资源预定)协议。
此选项头被转发路径所有节点处理。目前在路由告警(RSVP和MLDv1)与Jumbo帧处理中使用了逐跳选项头。路由告警需要通知到转发路径中所有节点,需要使用逐跳选项头。Jumbo帧是长度超过65535的报文,传输这种报文需要转发路径中所有节点都能正常处理,
因此也需要使用逐跳选项头功能。
目的地选项包头指名需要被中间目的地或最终目的地检查的信息。有两种用法:
如果存在路由扩展头,则每一个中转路由器都要处理这些选项。
如果没有路由扩展头,则只有最终目的节点需要处理这些选项。
路由包头类似于IPv4的松散源路由。IPv6的源节点可以利用路由扩展包头指定一个松散源路由,即分组从信源到信宿需要经过的中转路由器列表。路由扩展选项Type 0已在RFC5095中建议不再使用,目前其它类型主要应用于移动。
分段包头提供分段和重装服务。当分组大于链路最大传输单元(MTU)时,源节点负责对分组进行分段,并在分段扩展包头中提供重装信息。
认证包头提供数据源认证、数据完整性检查和反重播保护。认证包头不提供数据加密服务,需要加密服务的数据包,可以结合使用ESP协议。
ESP协议包头提供加密服务。
(D)数据包
IPv6数据包:上层协议数据单元。上层数据单元即PDU,全称为Protocol Data Unit。
PDU由传输头及其负载(如ICMPv6消息、或UDP消息等)组成。而IPv6包有效负载则包括IPv6扩展头和PDU,通常所能允许的最大字节数为65535字节,大于该字节数的负载可通过使用扩展头中的Jumbo Payload选项进行发送。
编址
从IPv4到IPv6最显著的变化就是网络地址的长度。RFC 2373 和RFC 2374定义的IPv6地址,就像下面章节所描述的,有128位长;IPv6地址的表达形式一般采用32个十六进制数。IPv6中可能的地址有3.4×10^38个。也可以想象为16个因为32位地址每位可以取16个不同的值。在很多场合,IPv6地址由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成,叫做EUI-64(或者64-位扩展唯一标识)。IPv6地址为128位长,但通常写作8组,每组为四个十六进制数的形式。例如:
FE80:0000:0000:0000:AAAA:0000:00C2:0002是一个合法的IPv6地址。
IPv6网络地址和IPv4网络地址的转化关系,要是嫌这个地址看起来还是太长,这里还有种办法来缩减其长度,叫做零压缩法。如果几个连续段位的值都是0,那么这些0就可以简单的以::来表示,上述地址就可以写成FE80::AAAA:0000:00C2:0002。这里要注意的是只能简化连续的段位的0,其前后的0都要保留,比如FE80的最后的这个0,不能被简化。还有这个只能用一次,在上例中的AAAA后面的0000就不能再次简化。当然也可以在AAAA后面使用::,这样的话前面的12个0就不能压缩了。这个限制的目的是为了能准确还原被压缩的0.不然就无法确定每个::代表了多少个0.
另外一个IPv6地址可以将一个IPv4地址内嵌进去,并且写成IPv6形式和平常习惯的IPv4形式的混合体。IPv6有两种内嵌IPv4的方式:IPv4映像地址和IPv4兼容地址。
IPv4映像地址有如下格式:::ffff:192.168.89.9,这个地址仍然是一个IPv6地址,只是0000:0000:0000:0000:0000:ffff:c0a8:5909的另外一种写法罢了。IPv4映像地址布局如下:
| 80bits |16 | 32bits |
0000....................0000 |FFFF | IPv4 address |
IPv4兼容地址(已淘汰)写法如下:::192.168.89.9,这个地址仍然是一个IPv6地址,只是0000:0000:0000:0000:0000:0000:c0a8:5909的另外一种写法罢了。IPv4兼容地址布局如下:
| 80bits |16 | 32bits |
0000....................0000 |0000 | IPv4 address |
IPv6单播地址被划分为两部分。第一部分包含地址前缀,第二部分包含接口标识符。表示 IPv6 地址/前缀组合的简明方式如下所示:ipv6 地址/前缀长度。以下是具有64 位前缀的地址的示例。
3FFE:FFFF:0:CD30:0:0:0:0/64.
此示例中的前缀是 3FFE:FFFF:0:CD30。该地址还可以以压缩形式写入,如 3FFE:FFFF:0:CD30::/64。
IPv6单播地址(Unicast) 用于单个接口的标识符。发送到此地址的数据包被传递给标识的接口。通过高序位八位字节的值来将单播地址与多路广播地址区分开来。多路广播地址的高序列八位字节具有十六进制值 FF。此八位字节的任何其他值都标识单播地址。单播地址包括:全局地址(可聚集全球地址)、保留地址(由IETF使用)、私有地址(链路本地地址)、环回地址。
链路本地地址。这些地址用于单个链路并且具有以下形式:FE80::InterfaceID。链路-本地地址用在链路上的各节点之间,用于自动地址配置、邻居发现或未提供路由器的情况。链路-本地地址主要用于启动时以及系统尚未获取较大范围的地址之时。
站点本地地址。这些地址用于单个站点并具有以下格式:FEC0::SubnetID:InterfaceID。站点本地地址用于不需要全局前缀的站点内的寻址。通常,节点始终具有链路本地地址。它可以具有站点本地地址和一个或多个全局地址
可聚集全球地址。这些地址可用在 Internet 上并具有以下格式:001(FP,3 位)TLA ID(13 位)Reserved(8 位)NLA ID(24 位)SLA ID(16 位)InterfaceID(64 位)。
镶有IPv4地址的IPv6地址。这些地址主要是用在自动隧道上,这类节点即支持IPv4也支持IPv6,兼容的地址通过设备以隧道方式传送报文。
IPv6任播地址(Anycast) 任播,也叫泛播。一组接口的标识符(通常属于不同的节点)。发送到此地址的数据包被传递给该地址标识的所有接口(根据路由走最近的路线)。任播地址类型代替 IPv4广播地址。
IPv6组播地址(Multicast) IPv6中的组播在功能上与IPv4中的组播类似:表现为一组接口对看到的流量都很感兴趣。组播分组前8比特设置为FF。接下来的4比特是地址生存期:0是永久的,而1是临时的。接下来的4比特说明了组播地址范围(分组可以达到多远):1为节点,2为链路,5为站点,8为组织,而E是全局(整个因特网)。
IPv6路由协议
IPv6支持的路由协议:静态路由,ripng,ospfv3,eigrpv6, IS-ISv6。
IPv6的优点之一就是提供灵活的路由机制。由于分配 IPv4 网络 ID 所用的方式,要求位于 Internet 中枢上的路由器维护大型路由表。这些路由器必须知道所有的路由,以便转发可能定向到 Internet 上的任何节点的数据包。通过其聚合地址能力,IPv6支持灵活的寻址方式,大大减小了路由表的规模。在这一新的寻址结构中,中间路由器必须只跟踪其网络的本地部分,以便适当地转发消息。邻居发现提供以下一些功能:
路由器发现。这允许主机标识本地路由器。
地址解析。这允许节点为相应的下一跃点地址解析链路层地址(替代地址解析协议ARP)。
地址自动配置。这允许主机自动配置站点-本地地址和全局地址。
邻居发现将Internet 控制消息协议用于 IPv6 (ICMPv6) 消息,这些消息包括:
路由器广告。在伪定期的基础上或响应路由器请求由路由器发送。IPv6 路由器使用路由器广告来公布其可用性、地址前缀和其他参数。
路由器请求。由主机发送,用于请求链路上的路由器立即发送路由器广告。
邻居请求。由节点发送,以用于地址解析、重复地址检测,或用于确认邻居是否仍可访问。
邻居广告。由节点发送,以响应邻居请求或通知邻居链路层地址中发生了更改。
重定向。由路由器发送,从而为某一发送节点指示指向特定目标的更好的下一跃点地址。
IPv4到IPv6的过渡技术
由于Internet的规模以及网络中数量庞大的IPv4用户和设备,IPv4到v6的过渡不可能一次性实现。而且,许多企业和用户的日常工作越来越依赖于Internet,它们无法容忍在协议过渡过程中出现的问题。所以IPv4到v6的过渡必须是一个循序渐进的过程,在体验IPv6带来的好处的同时仍能与网络中其余的IPv4用户通信。能否顺利地实现从IPv4到IPv6的过渡也是IPv6能否取得成功的一个重要因素。
实际上,IPv6在设计的过程中就已经考虑到了IPv4到IPv6的过渡问题,并提供了一些特性使过渡过程简化。例如,IPv6地址可以使用IPv4兼容地址,自动由IPv4地址产生;也可以在IPv4的网络上构建隧道,连接IPv6孤岛。到2012年底,针对IPv4-v6过渡问题已经提出了许多机制,它们的实现原理和应用环境各有侧重,这一部分里将对IPv4-v6过渡的基本策略和机制做一个系统性的介绍。在IPv4-IPv6过渡的过程中,必须遵循如下的原则和目标:
保证IPv4和IPv6主机之间的互通。从单向互通到双向互通,从物理互通到应用互通;
在更新过程中避免设备之间的依赖性(即某个设备的更新不依赖于其它设备的更新)
对于网络管理者和终端用户来说,过渡过程易于理解和实现;
过渡可以逐个进行;
用户、运营商可以自己决定何时过渡以及如何过渡。
过渡技主要分三方面面:IP层的过渡策略与技术、链路层对IPv6的支持、IPv6对上层的影响。主流技术大致可分如下几类:
双栈策略 实现IPv6结点与IPv4结点互通的最直接的方式是在IPv6结点中加入IPv4协议栈。具有双协议栈的结点称作“IPv6/v4结点”,这些结点既可以收发IPv4分组,也可以收发IPv6分组。它们可以使用IPv4与IPv4结点互通,也可以直接使用IPv6与IPv6结点互通。双栈技术不需要构造隧道,但后文介绍的隧道技术中要用到双栈。IPv6/v4结点可以只支持手工配置隧道,也可以既支持手工配置也支持自动隧道。
隧道技术 在IPV6发展初期,必然有许多局部的纯IPV6网络,这些IPV6网络被IPV4骨干网络隔离开来,为了使这些孤立的“IPV6岛”互通,就采取隧道技术的方式来解决。利用穿越现存IPV4因特网的隧道技术将许多个“IPV6孤岛”连接起来,逐步扩大IPV6的实现范围,这就是国际IPV6试验床6Bone的计划。
工作机理:在IPV6网络与IPV4网络间的隧道入口处,路由器将IPV6的数据分组封装入IPV4中,IPV4分组的源地址和目的地址分别是隧道入口和出口的IPV4地址。在隧道的出口处再将IPV6分组取出转发给目的节点。隧道技术在实践中有四种具体形式:构造隧道、自动配置隧道、组播隧道以及6to4。
TB(TunnelBroker,隧道代理) 对于独立的v6用户,要通过现有的IPv4网络连接IPv6网络上,必须使用隧道技术。但是手工配置隧道的扩展性很差,TB的主要目的就是简化隧道的配置,提供自动的配置手段。对于已经建立起IPv6的ISP来说,使用TB技术为网络用户的扩展提供了一个方便的手段。从这个意义上说,TB可以看作是一个虚拟的IPv6 ISP,它为已经连接到IPv4网络上的用户提供连接到IPv6网络的手段,而连接到IPv4网络上的用户就是TB的客户。
双栈转换机制(DSTM) DSTM的目标是实现新的IPv6网络与现有的IPv4网络之间的互通。使用DSTM,IPv6网络中的双栈结点与一个IPv4网络中的IPv4主机可以互相通信。DSTM的基本组成部分包括:
·DHCPv6服务器,为IPv6网络中的双栈主机分配一个临时的IPv4全网唯一地址,同时保留这个临时分配的IPv4地址与主机IPv6永久地址之间的映射关系,此外提供IPv6隧道的隧道末端(TEP)信息;
·动态隧道端口DTI:每个DSTM主机上都有一个IPv4端口,用于将IPv4报文打包到IPv6报文里;
·DSTM Deamon:与DHCPv6客户端协同工作,实现IPv6地址与IPv4地址之间的解析。
协议转换技术 其主要思想是在V6节点与V4节点的通信时需借助于中间的协议转换服务器,此协议转换服务器的主要功能是把网络层协议头进行V6/V4间的转换,以适应对端的协议类型。
优点:能有效解决V4节点与V6节点互通的问题。
缺点:不能支持所有的应用。这些应用层程序包括:① 应用层协议中如果包含有IP地址、端口等信息的应用程序,如果不将高层报文中的IP地址进行变换,则这些应用程序就无法工作,如FTP、STMP等。② 含有在应用层进行认证、加密的应用程序无法在此协议转换中工作。
SOCKS64 一个是在客户端里引入SOCKS库,这个过程称为“socks化”(socksifying),它处在应用层和socket之间,对应用层的socket API和DNS名字解析API进行替换;
另一个是SOCKS网关,它安装在IPv6/v4双栈结点上,是一个增强型的SOCKS服务器,能实现客户端C和目的端D之间任何协议组合的中继。当C上的SOCKS库发起一个请求后,由网关产生一个相应的线程负责对连接进行中继。SOCKS库与网关之间通过SOCKS(SOCKSv5)协议通信,因此它们之间的连接是“SOCKS化”的连接,不仅包括业务数据也包括控制信息;而G和D之间的连接未作改动,属于正常连接。D上的应用程序并不知道C的存在,它认为通信对端是G。
传输层中继(TransportRelay) 与SOCKS64的工作机理相似,只不过是在传输层中继器进行传输层的“协议翻译”,而SOCKS64是在网络层进行协议翻译。它相对于SOCKS64,可以避免“IP分组分片”和“ICMP报文转换”带来的问题,因为每个连接都是真正的IPV4或IPV6连接。但同样无法解决网络应用程序数据中含有网络地址信息所带来的地址无法转换的问题。
应用层代理网关(ALG)ALG是ApplicationLevel Gateway的简称,与SOCKS64、传输层中继等技术一样,都是在V4与V6间提供一个双栈网关,提供“协议翻译”的功能,只不过ALG是在应用层级进行协议翻译。这样可以有效解决应用程序中带有网络地址的问题,但ALG必须针对每个业务编写单独的ALG代理,同时还需要客户端应用也在不同程序上支持ALG代理,灵活性很差。显然,此技术必须与其它过渡技术综合使用,才有推广意义(比较全面,且具有代表性的双向应用互通系统是由北京网能[16] 开发的VENO)。
与IPV4相比,IPV6具有以下几个优势:
IPv6具有更大的地址空间。IPv4中规定IP地址长度为32,最大地址个数为2^32;而IPv6中IP地址的长度为128,即最大地址个数为2^128。与32位地址空间相比,其地址空间增加了2^128-2^32个。IPv4采用32位地址长度,约有43亿地址,而IPv6采用128位地址长度可以忽略不计无限制的地址,有足够的地址资源。地址的丰富将完全删除在IPv4互联网应用上有很多的限制,如IP地址,每一个电话,每一个带电的东西可以有一个IP地址,与真正形成一个数字家庭的家庭。IPv6的技术优势,目前在一定程度上解决IPv4互联网存在的问题,这使得IPv4向IPv6演进的重要动力之一。
IPv6使用更小的路由表。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
IPv6增加了增强的组播(Multicast)支持以及对流的控制(Flow Control),这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS,Quality of Service)控制提供了良好的网络平台。
IPv6加入了对自动配置(Auto Configuration)的支持。一种全状态自动配置,此类型的配置需要某种程度的人为干预,因为它需要动态主机配置协议来用于 IPv6 (DHCPv6) 服务器,以便用于节点的安装和管理。DHCPv6 服务器保留它为之提供配置信息的节点的列表。它还维护状态信息,以便服务器知道每个在使用中的地址的使用时间长度以及该地址何时可供重新分配。另一种无状态自动配置,此类型配置适合于小型组织和个体。在此情况下,每一主机根据接收的路由器广告的内容确定其地址。通过使用 IEEEEUI-64标准来定义地址的网络 ID 部分,可以合理假定该主机地址在链路上是唯一的。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。IPv6协议中自动配置功能无需采用动态主机配置协议(DHCP,Dynamic Host ConfigurationProtoco1)。IPv6协议可为任意主机生成一个“本地IP地址”,这个地址内嵌一个以太网卡地址,由于MAC地址是全球唯一的,这样IP地址就不会重复,IPv6的自动配置功能正是基于这种唯一IP地址的概念。
IPv6具有更高的安全性。在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,在IPV6中的加密与鉴别选项提供了分组的保密性与完整性。极大的增强了网络的安全性。
允许扩充。如果新的技术或应用需要时,IPV6允许协议进行扩充。
更好的头部格式。IPV6使用新的头部格式,其选项与基本头部分开,如果需要,可将选项插入到基本头部与上层数据之间。这就简化和加速了路由选择过程,因为大多数的选项不需要由路由选择。
新的选项。IPV6有一些新的选项来实现附加的功能。
IPv4 与IPv6对比表:
IPv4 |
IPv6 |
地址位数:32 |
地址位数:128 |
地址格式:点分十进制 |
地址格式:冒号分十六进制,带零压缩 |
按A,B,C,D,E地址划分 |
不适用,按传输类型分 |
网络表示:子网掩码或前缀长度 |
网络表示:仅以前缀长度格式表示 |
环路地址:127.0.0.1 |
环路地址: ::1 |
公共IP地址 |
IPv6的公共地址为“可聚集全球单点传送地址” |
自动配置地址:169.254.0.0/16 |
链路本地地址: FE80::/64 |
多播地址:224.0.0.0/4 |
IPv6多播地址:FF00::/8 |
包含广播地址 |
没有定义 |
未指明的地址为:0.0.0.0 |
未指明地址为: :: (0:0:0:0:0:0:0:0) |
私有IP地址:10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 |
站点本地地址: FEC0::/48 |
域名解析:A资源记录 |
域名解析:AAAA资源记录或A6 |
逆向域名解析:IN-ADDR.ARPA |
逆向域名解析:IP6.INT域 |
实验一、IPv4到IPv6过渡技术之双协议栈
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#ip default-gateway 192.168.1.1
PC1(config)#ipv6 route ::/0 2014::1
PC1(config)#int e0/0
PC1(config-if)#ip add 192.168.1.2 255.255.255.0
PC1(config-if)#ipv6 add 2014::2/96
PC1(config-if)#no sh
PC1(config-if)#exit
R1配置:
R1#conf t
R1(config)#ipv6 unicast-routing
R1(config)#int e0/0
R1(config-if)#ip add 192.168.1.1 255.255.255.0
R1(config-if)#ipv6 add 2014::1/96
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int e0/1
R1(config-if)#ip add 192.168.12.1255.255.255.0
R1(config-if)#ipv6 add 2012::1/96
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#ip route 192.168.2.0 255.255.255.0192.168.12.2
R1(config)#ipv6 route 2023::0/96 2012::2
R2配置:
R2#conf t
R2(config)#ipv6 unicast-routing
R2(config)#int e0/1
R2(config-if)#ip add 192.168.12.2255.255.255.0
R2(config-if)#ipv6 add 2012::2/96
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int e0/0
R2(config-if)#ip add 192.168.2.1 255.255.255.0
R2(config-if)#ipv6 add 2023::1/96
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#ip route 192.168.1.0 255.255.255.0192.168.12.1
R2(config)#ipv6 route 2014::0/96 2012::1
PC2配置
PC2#conf t
PC2(config)#no ip routing
PC2(config)#ip default-gateway 192.168.2.1
PC2(config)#ipv6 route::/0 2023::1
PC2(config)#int e0/0
PC2(config-if)#ip add 192.168.2.2255.255.255.0
PC2(config-if)#ipv6 add 2023::2/96
PC2(config-if)#no sh
PC2(config-if)#exit
测试连通情况:
PC1#ping 2023::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2023::2,timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-tripmin/avg/max = 56/68/104 ms
PC1#ping 192.168.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.2,timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-tripmin/avg/max = 56/68/104 ms
R1#debug ipv6 icmp
R1#ping 2023::2
*Mar 1 01:16:17.067: ICMPv6: Sending echo requestto 2023::2
*Mar 1 01:16:17.139: ICMPv6: Received echo replyfrom 2023::2
*Mar 1 01:16:17.139: ICMPv6: Sending echo requestto 2023::2
*Mar 1 01:16:17.175: ICMPv6: Received echo replyfrom 2023::2
*Mar 1 01:16:17.175: ICMPv6: Sending echo requestto 2023::2
*Mar 1 01:16:17.215: ICMPv6: Received echo replyfrom 2023::2
*Mar 1 01:16:17.215: ICMPv6: Sending echo requestto 2023::2
*Mar 1 01:16:17.255: ICMPv6: Received echo replyfrom 2023::2
*Mar 1 01:16:17.255: ICMPv6: Sending echo requestto 2023::2
*Mar 1 01:16:17.295: ICMPv6: Received echo replyfrom 2023::2
*Mar 1 01:18:02.451: ICMPv6: Received ICMPv6packet from FE80::CE01:1FFF:FE54:1, type 135
*Mar 1 01:18:07.479: ICMPv6: Received ICMPv6packet from FE80::CE01:1FFF:FE54:1, type 136
双栈(dual stack)表示主机和路由器同时使用IPv4和IPv6。对主机来说,这意味着每个NIC都与一个IPv4地址和一个IPv6地址相关联,主机可将IPv4分组发送给其他IPv4主机,还可将IPv6分组发送给其他IPv6主机。对路由器来说,需同时支持IPv4和IPv6路由协议。 对路由器进行配置使其能够同时转发IPv4分组和IPv6分组后,该路由器便是双栈路由器.另外IPv6协议使用NDP(邻居发现协议),用于地址解析、邻居发现以及路由器及网络参数发现。本协议栈不支持路由功能,所以无需实现发送路由器通告报文,但必须接受路由器通告报文,以完成路由发现功能。同时支持邻居通告和邻居请求报文的接收和发送,以实现地址解析和重复探测取代ARP。
实验二、IPv4到IPv6过渡技术之6to4隧道
PC1配置:
PC1#conf t
PC1(config)#no iprouting
PC1(config)#int e0/0
PC1(config-if)#ipv6add 2002::2/16
PC1(config-if)#no sh
PC1(config-if)#exit
PC1(config)#ipv6route ::/0 2002::1
R1配置:
R1#conf t
R1(config)#ipv6unicast-routing
R1(config)#int e0/0
R1(config-if)#ipv6add 2002::1/16
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int e0/1
R1(config-if)#ip add192.168.12.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#interfacetunnel 0
R1(config-if)#ipv6add 2014:1::1/96
R1(config-if)#tunnelsource 192.168.12.1
R1(config-if)#tunneldestination 192.168.23.3
R1(config-if)#tunnelmode ipv6ip
R1(config-if)#exit
R1(config)#ipv6route 2023::/16 2014:1::2
R1(config)#ip route0.0.0.0 0.0.0.0 e0/1
R2配置:
R2#conf t
R2(config)#int e0/0
R2(config-if)#ip add192.168.12.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int e0/1
R2(config-if)#ip add192.168.23.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R3配置:
R3#conf t
R3(config)#ipv6unicast-routing
R3(config)#int e0/0
R3(config-if)#ipv6add 2023::1/16
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#int e0/1
R3(config-if)#ip add192.168.23.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#inttunnel 0
R3(config-if)#ipv6add 2014:1::2/96
R3(config-if)#tunnelsource 192.168.23.3
R3(config-if)#tunneldestination 192.168.12.1
R3(config-if)#tunnelmode ipv6ip
R3(config-if)#exit
R3(config)#ip route0.0.0.0 0.0.0.0 e0/1
R3(config)#ipv6route 2002::/16 2014:1::1
PC2配置:
PC2#conf t
PC2(config)#no iprouting
PC2(config)#ipv6route ::/0 2023::1
PC2(config)#int e0/0
PC2(config-if)#ipv6add 2023::2/16
PC2(config-if)#no sh
PC2(config-if)#exit
测试联通:
PC1#traceroute2023::2
Type escape sequenceto abort.
Tracing the route to2023::2
1 2002::1 72 msec 16 msec 20 msec
2 2014:1::2 112 msec 100 msec 60 msec
3 2023::2 112 msec 80 msec 68 msec
PC1#ping 2023::2
Type escape sequenceto abort.
Sending 5, 100-byteICMP Echos to 2023::2, timeout is 2 seconds:
!!!!!
Success rate is 100percent (5/5), round-trip min/avg/max = 68/96/188 ms
R1#debug tunnel
Tunnel Interface debugging is on
*Mar 100:33:19.579: Tunnel0: IPv6/IP encapsulated 192.168.12.1->192.168.23.3(linktype=79, len=120)
*Mar 100:33:19.583: Tunnel0 count tx, adding 20 encap bytes
*Mar 100:33:19.699: Tunnel0: IPv6/IP to classify 192.168.23.3->192.168.12.1(tbl=0,"default" len=120 ttl=253 tos=0x0)
*Mar 100:33:19.703: Tunnel0: IPv6/IP (PS) to decaps 192.168.23.3->192.168.12.1(tbl=0, "default", len=120,ttl=253)
*Mar 100:33:19.703: Tunnel0: decapsulated IPv6/IP packet (len 120)
6to4隧道是一种自动构造隧道的方式。它是点到多点的自动隧道,主要用于将多个IPv6孤岛通过IPv4网络连接到IPv6网络。6to4隧道通过IPv6报文的目的地址中嵌入的IPv4地址,可以自动获取隧道的终点。6to4隧道采用特殊的地址:它以2002开头,后面跟着32位的IPv4地址转化的32位16进制表示,构成一个48位的6to4前缀2002:IPv4ADDR::/48。
6to4隧道只能将前缀为2002::/16的网络连接起来,但在IPv6网络中也会使用像2001::/16这样的非6to4网络地址。为了使这些地址可达,必须有一台6to4路由器作为网关转发到IPv6网络的报文,从而实现6to4网络(地址前缀以2002开始)与IPv6网络的互通,这台路由器就叫做6to4中继(6to4 Relay)路由器。在配置IPv6隧道时,两端的tunnel0接口也要配置IPv6地址,这两个IPv6地址必须在一个网段,这样你的IPv6网络就可以认为有三个网段,同时要想使这三个IPv6网络通,必须在路由器上添加到对方网络的IPv6路由。隧道注解:
隧道类型 |
推荐用法 |
注释 |
Tunnel Mode |
TunnelSource |
Tunnel Destination |
接口前缀或地址 |
manaul |
在站点内或站点间配置简单的点到点隧道 |
只能携带IPv6数据包 |
ipv6ip |
一个IPv4地址或一个配置了IPv4地址的接口 |
一个IPv4地址 |
一个IPv6地址 |
GRE/IPv4 |
在站点内或站点间配置简单的点到点隧道 |
能携带IPv6, CLNS和其他类型的数据包 |
gre ip |
一个IPv4地址 |
一个IPv6地址 |
|
IPv4-compatible |
点到多点隧道 |
使用::/96 的前缀(不推荐这种方法) |
ipv6ip auto-tunnel |
不要求.这些是点到多点类型的隧道,是通过基于每个包的IPv6目的计算出的IPv4地址 |
不必要,这些接口地址是通过::tunnel-source/96前缀产生的0:0:0:0:0:0:A.B.C.D/96 |
|
自动6to4 |
在被IPv4隔离的两个IPv6站点间配置点到多点隧道 |
站点使用 2002::/16前缀的地址
|
ipv6ip 6to4 |
一个IPv6地址,必须将Tunnel Source的IPv4地址嵌入这个IPv6地址中2002:Tunnel Source-IPv4-address::/48 |
||
ISATAP |
在一个使用IPv6系统的站点间通过IPv4配置点到多点隧道 |
站点能使用任何IPv6单播地址(Cisco推荐这种方法) |
ipv6ip isatap |
一个IPv6地址,eui-64格式 |
实验三、IPv4到IPv6过渡技术之ISATAP(站间自动隧道寻址协议)
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#ipdefault-gateway 192.168.0.1
PC1(config)#int e0/0
PC1(config-if)#ip add192.168.0.2 255.255.255.0
PC1(config-if)#no sh
PC1(config-if)#exit
PC1(config)#int tunnel 0
PC1(config-if)#ipv6 addressautoconfig //ipv6地址设置成自动配置
PC1(config-if)#tunnel modeipv6ip //设置隧道模式为ipv6ip
PC1(config-if)#tunnel sourcee0/0 //隧道的源端口
PC1(config-if)#tunnel destination192.168.12.2//指定ISATAP路由器地址,ISATAP路由器就会分配给计算机一个路由器前缀,所有配置了ISATAP隧道的计算机都会分配到一个IPv6网段,也就是和ISATAP路由器的Tunnel 0接口在同一个网段。
R1配置:
R1#conf t
R1(config)#int e0/0
R1(config-if)#ip add192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int e0/1
R1(config-if)#ip add192.168.12.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#ip route 0.0.0.00.0.0.0 192.168.12.2
R2配置:
R2#conf t
R2(config)#ipv6unicast-routing
R2(config)#int e0/0
R2(config-if)#ip add192.168.12.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int e0/1
R2(config-if)#ipv6 add2323::1/64
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#ip route192.168.0.0 255.255.255.0 192.168.12.1
R2(config)#ipv6 route2002::/96 2323::2
R2(config)#int tunnel 0
R2(config-if)#ipv6 add2001:3::/64 eui-64//注意IPv6的必须使用eui-64方式指定
R2(config-if)#no ipv6 ndsuppress-ra//在 IPv6 的接口上将不会发送路由器公告报文
R2(config-if)#tunnel source192.168.12.2//隧道源为e0/0接口IP,
R2(config-if)#tunnel modeipv6ip isatap//隧道模式为ISATAPServer
R2(config-if)#exit
R3配置:
R3#conf t
R3(config)#ipv6unicast-routing
R3(config)#int e0/0
R3(config-if)#ipv6 add2002::1/96
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#int e0/1
R3(config-if)#ipv6 add2323::2/64
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#ipv6 route ::/02323::1
PC2配置:
PC2#conf t
PC2(config)#no ip routing
PC2(config)#ipv6 route ::/02002::1
PC2(config)#int e0/0
PC2(config-if)#ipv6 add2002::2/96
PC2(config-if)#no sh
PC2(config-if)#exit
测试网络:
PC1#sh ipv6 interface brief
Ethernet0/0 [up/up]
Tunnel0 [up/up]
FE80::C0A8:2
2001:3::C0A8:2
PC1#ping 2002::2 //PC1去ping PC2
Type escape sequence toabort.
Sending 5, 100-byte ICMPEchos to 2002::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent(5/5), round-trip min/avg/max = 60/95/172 ms
PC2#ping 2001:3::C0A8:2 //PC2去ping PC1
Type escape sequence toabort.
Sending 5, 100-byte ICMPEchos to 2001:3::C0A8:2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent(5/5), round-trip min/avg/max = 60/86/180 ms
R2#debug tunnel
Tunnel Interface debugging ison
*Mar 1 01:11:11.823: Tunnel0: IPv6/IP to classify192.168.0.2->192.168.12.2 (tbl=0,"default" len=120 ttl=253tos=0x0)
*Mar 1 01:11:11.831: Tunnel0: IPv6/IP (PS) todecaps 192.168.0.2->192.168.12.2 (tbl=0, "default",len=120,ttl=253)
*Mar 1 01:11:11.831: Tunnel0: decapsulated IPv6/IPpacket (len 120)
*Mar 1 01:11:11.903: Tunnel0 count tx, adding 20encap bytes
ISATAP (Intra-Site Automatic Tunnel Addressing Protocol,站间自动隧道寻址协议)是一种地址分配和主机到主机、主机到路由器和路由器到主机的自动隧道技术.它为IPv6主机之间提供了跨越IPv4内部网络的单播IPv6连通性。任何有效的IPv6单播地址的64位前缀都可以和ISATAP接口标识符相结合,它们包括链路本地地址前缀(FE80::/64)、全球前缀(包括6 to 4前缀)和站点本地前缀。ISATAP地址中也包含了一个内嵌的IPv4地址,这一点与IPv4映射地址、6 over 4地址和6to 4地址类似。内嵌的IPv4地址的作用是:在发往ISATAP地址的IPv6通信流通过隧道跨越了IPv4网络后,可用它来确定IPv4报头中的源IPv4地址或目标IPv4地址。
在一个IPv4网络中,我们可以非常轻松的进行ISATAP的部署,首先你的PC需是V4/V6双栈PC,然后,需要有一台支持ISATAP的路由器,ISATAP路由器可以在网络中的任何位置,只要PC能够联通路由器。那么接下去,我们可以通过在路由器上部署ISATAP,这样网络中支持ISATAP的双栈主机,在需要访问IPv6资源时,可以与ISATAP路由器建立起ISATAP隧道,ISATAP主机根据ISATAP路由器下发的IPv6前缀构造自己的IPv6地址(这个IPv6地址是被自动关联到ISATAP主机本地产生的一个ISATAP虚拟网卡上),并且将这台ISATAP路由器设置为自己的IPv6默认网关,这样主机就能够通过这台ISATAP路由器去访问IPv6的资源。
实验四、IPv4到IPv6过渡技术之NAT-PT
NAT-PT(网络地址转换-协议转换)是一种地址转换技术,它可以把IPv6地址转换成IPv4地址,反之亦然。NAT-PT基于RFC2766中定义的无状态IP/ICMP转换器(SIIT)算法。SIIT算法互译IPv4和IPv6数据包头部,也包括ICMP头部。需要注意的是,在IPv6环境中,不建议像IPv4对待NAT的态度哪样,去使用NAT。仅仅在V4单协议与V6单协议网络需要互相通信的时候,才建议使用NAT-PT。
PC1配置:
PC1#conf t
PC1(config)#noip routing
PC1(config)#inte0/0
PC1(config-if)#ipv6add 2012::11/16
PC1(config-if)#nosh
PC1(config-if)#exit
PC1(config)#ipv6route ::/0 2012::1
PC2配置:
PC2#conf t
PC2(config)#noip routing
PC2(config)#inte0/0
PC2(config-if)#ipv6add 2012::22/16
PC2(config-if)#nosh
PC2(config-if)#exit
PC2(config)#ipv6route ::/0 2012::1
PC3配置:
PC3#conf t
PC3(config)#noip routing
PC3(config)#ipdefault-gateway 192.168.34.1
PC3(config)#inte0/0
PC3(config-if)#ipadd 192.168.34.3 255.255.255.0
PC3(config-if)#nosh
PC3(config-if)#exit
PC4配置:
PC4#conf t
PC4(config)#noip routing
PC4(config)#ipdefault-gateway 192.168.34.1
PC4(config)#inte0/0
PC4(config-if)#ipadd 192.168.34.4 255.255.255.0
PC4(config-if)#nosh
PC4(config-if)#exit
R1基本配置:
R2#conf t
R2(config)#ipv6unicast-routing
R2(config)#intfa0/0
R2(config-if)#ipv6add 2012::1/16
R2(config-if)#nosh
R2(config-if)#exit
R2(config)#intfa0/1
R2(config-if)#ipadd 192.168.34.1 255.255.255.0
R2(config-if)#nosh
R2(config-if)#exit
方法一使用静态双向NAT-PT使网络联通,如下配置R1,然后测试PC1与PC3
R2#conf t
R2(config)# ipv6 natprefix 2034:34:34::/96 //抓取IPv4转换成IPv6后的前缀,不能与现有网络相同
R2(config)# ipv6 nat v4v6source 192.168.34.3 2034:34:34::3//将ipv4映射到ipv6
R2(config)# ipv6 natv4v6 source 192.168.34.4 2034:34:34::4//将ipv4映射到ipv6
R2(config)#ipv6nat v6v4 source 2012::11 192.168.34.11//将ipv6映射到ipv4
R2(config)#ipv6nat v6v4 source 2012::22 192.168.34.22//将ipv6映射到ipv4
R2(config)#intfa0/0
R2(config-if)#ipv6nat
R2(config-if)#exit
R2(config)#intfa0/1
R2(config-if)#ipv6nat
R2(config-if)#exit
PC1#ping2034:34:34::3 repeat 1
Typeescape sequence to abort.
Sending 5,100-byte ICMP Echos to 2034:34:34::3, timeout is 2 seconds:
!!!!!
Successrate is 100 percent (5/5), round-trip min/avg/max = 48/89/152 ms
PC3#ping192.168.34.11 repeat 1
Typeescape sequence to abort.
Sending 5,100-byte ICMP Echos to 192.168.34.11, timeout is 2 seconds:
!!!!!
Successrate is 100 percent (5/5), round-trip min/avg/max = 20/52/144 ms
R2#debugipv6 nat
*Mar 1 00:40:25.519: IPv6 NAT: icmp src (2012::11)-> (192.168.34.11), dst (2034:34:34::3) -> (192.168.34.3)
*Mar 1 00:40:25.527: IPv6 NAT: icmp src(192.168.34.3) -> (2034:34:34::3), dst (192.168.34.11) -> (2012::11)
*Mar 1 00:42:37.235: IPv6 NAT: icmp src(192.168.34.3) -> (2034:34:34::3), dst (192.168.34.11) -> (2012::11)
*Mar 1 00:42:37.287: IPv6 NAT: icmp src (2012::11)-> (192.168.34.11), dst (2034:34:34::3) -> (192.168.34.3)
方法二动态NAT-PT(V4地址池),配置R1,然后测试PC1与PC3联通
R2#conf t
R2(config)#ipv6access-list ipv6-network permit 2012::/16 any //定义允许被IPv6 nat的源地址
R2(config)#ipv6 nat v6v4 pool ip6v4-pool 192.168.34.100 192.168.34.200 prefix-length 24 //定义需要将IPv6转换成IPv4的地址池
R2(config)#ipv6nat v6v4 source list ipv6-network pool ip6v4-pool //设置IPv6转换成IPv4
R2(config)#ipv6nat prefix 2034:34:34::/96 //抓取IPv4转换成IPv6后的前缀,不能与现有网络相同
R2(config)# ipv6 natv4v6 source 192.168.34.3 2034:34:34::3//将ipv4映射到ipv6
R2(config)# ipv6 natv4v6 source 192.168.34.4 2034:34:34::4//将ipv4映射到ipv6
R2(config)#intfa0/0
R2(config-if)#ipv6nat
R2(config-if)#exit
R2(config)#intfa0/1
R2(config-if)#ipv6nat
R2(config-if)#exit
PC1#ping2034:34:34::3 repeat 1//必须先从动态转换的一方去ping静态转换的一方
Typeescape sequence to abort.
Sending 1,100-byte ICMP Echos to 2034:34:34::3, timeout is 2 seconds:!
Successrate is 100 percent (1/1), round-trip min/avg/max = 112/112/112 ms
PC3#ping192.168.34.100 repeat 1//再从静态转换一方去ping另一方动态转换后的地址
Typeescape sequence to abort.
Sending 1,100-byte ICMP Echos to 192.168.34.100, timeout is 2 seconds:!
Successrate is 100 percent (1/1), round-trip min/avg/max = 120/120/120 ms
R2#debugipv6 nat
IPv6NAT-PT debugging is on
*Mar 1 02:20:41.519: IPv6 NAT: icmp src (2012::11)-> (192.168.34.100), dst (2034:34:34::3) -> (192.168.34.3)
*Mar 1 02:20:41.591: IPv6 NAT: icmp src(192.168.34.3) -> (2034:34:34::3), dst (192.168.34.100) -> (2012::11)
*Mar 1 02:20:47.087: IPv6 NAT: icmp src(192.168.34.3) -> (2034:34:34::3), dst (192.168.34.100) -> (2012::11)
*Mar 1 02:20:47.135: IPv6 NAT: icmp src (2012::11)-> (192.168.34.100), dst (2034:34:34::3) -> (192.168.34.3)
方法三动态NAT-PT(V6地址池),配置R1,然后测试PC1与PC3联通
R2#conf t
R2(config)#access-list1 permit 192.168.34.0 0.0.0.255 //匹配要转换的网络
R2(config)#ipv6nat v4v6 pool ip4v6-pool 2034:34:34::3 2034:34:34::4 prefix-length 96 //创建一个IPv6的地址池
R2(config)#ipv6nat prefix 2034:34:34::/96 //抓取IPv4转换成IPv6后的前缀
R2(config)#ipv6nat v4v6 source list 1 pool ip4v6-pool //将IPv4转换成IPv6地址池的任意地址
R2(config)#ipv6nat v6v4 source 2012::11 192.168.34.11//将IPv6静态映射为IPv4
R2(config)#ipv6nat v6v4 source 2012::22 192.168.34.22//将IPv6静态映射为IPv4
R2(config)#intfa0/0
R2(config-if)#ipv6nat
R2(config-if)#exit
R2(config)#intfa0/1
R2(config-if)#ipv6nat
R2(config-if)#exit
PC3#ping192.168.34.11 repeat 1 //必须先从动态转换的一方去ping静态转换的一方
Typeescape sequence to abort.
Sending 1,100-byte ICMP Echos to 192.168.34.11, timeout is 2 seconds:!
Successrate is 100 percent (1/1), round-trip min/avg/max = 104/104/104 ms
PC1#ping2034:34:34::3 repeat 1//再从静态转换一方去ping另一方动态转换后的地址
Typeescape sequence to abort.
Sending 1,100-byte ICMP Echos to 2034:34:34::3, timeout is 2 seconds:!
Successrate is 100 percent (1/1), round-trip min/avg/max = 132/132/132 ms
R2#debugipv6 nat
IPv6NAT-PT debugging is on
*Mar 1 03:05:08.043: IPv6 NAT: icmp src (2012::11)-> (192.168.34.11), dst (2034:34:34::3) -> (192.168.34.3)
*Mar 1 03:05:08.119: IPv6 NAT: icmp src(192.168.34.3) -> (2034:34:34::3), dst (192.168.34.11) -> (2012::11)
*Mar 1 03:05:14.891: IPv6 NAT: icmp src (192.168.34.3)-> (2034:34:34::3), dst (192.168.34.11) -> (2012::11)
*Mar 1 03:05:14.947: IPv6 NAT: icmp src (2012::11)-> (192.168.34.11), dst (2034:34:34::3) -> (192.168.34.3)
方法四动态NAT-PT之v4-Mapped,配置R1,然后测试PC1与PC3联通
R2(config)#ipv6access-list ipv6-network permit 2012::/16 any
R2(config)#ipv6nat v6v4 pool v6v4-pool 192.168.34.11 192.168.34.22 prefix-length 24
R2(config)#ipv6nat v6v4 source list ipv6only-network pool v6v4-pool
R2(config)#ipv6access-list IPv4over6 permit 2012:1::/16 2034:34:34::/96
R2(config)#ipv6nat prefix 2034:34:34::/96 v4-mapped IPv4over6
R2(config)#intfa0/0
R2(config-if)#ipv6nat
R2(config-if)#exit
R2(config)#intfa0/1
R2(config-if)#ipv6nat
R2(config-if)#exit
然后将192.168.34.3和192.168.34.4换算成IPv6地址,即分别为
fe80:0:0:0:0:0:c0a8:2203和fe80:0:0:0:0:0:c0a8:2204
接着再把前缀换成2034:34:34::/96,最后变成
2034:34:34::c0a8:2203/96 和2034:34:34::c0a8:2204/96
PC1#ping2034:34:34::c0a8:2204 repeat 1 //必须先从IPv6一方ping通IPv4
Typeescape sequence to abort.
Sending 1,100-byte ICMP Echos to 2034:34:34::C0A8:2204, timeout is 2 seconds:!
Successrate is 100 percent (1/1), round-trip min/avg/max = 120/120/120 ms
PC3#ping192.168.34.4 repeat 1//再从IPv4一方ping通IPv6从地址池转换后的地址
Typeescape sequence to abort.
Sending 1,100-byte ICMP Echos to 192.168.34.4, timeout is 2 seconds:!
Successrate is 100 percent (1/1), round-trip min/avg/max = 44/44/44 ms
R2#debugipv6 nat
IPv6NAT-PT debugging is on
*Mar 1 03:49:47.115: IPv6 NAT: icmp src (2012::11)-> (192.168.34.11), dst (2034:34:34::C0A8:2204) -> (192.168.34.4)
*Mar 1 03:49:47.191: IPv6 NAT: icmp src(192.168.34.4) -> (2034:34:34::C0A8:2204), dst (192.168.34.11) ->(2012::11)
v4-mapped整个流程是:先用一条IPv6的ACL来匹配需要进行v4-mapped的流量,注意这条ACL的目的地就是NAT-PT的IPv6前缀,然后使用ipv6 nat prefix 2034:34:34::/96 v4-mapped IPv4over6命令关联这条ACL。这样一来当PC1访问PC4时,可以直接使用2034:34:34::c0a8:2204这个地址,后面的c0a8:2204是将要被翻译成IPv4的地址,也就是PC4的192.168.34.4。因此R1收到这个IPv6数据包的时候,发现数据包匹配上了v4map这个ACL,因此将目的IPv6地址的最后32bits翻译成IPv4格式(这就是IPv4目的地址),然后从V4地址池中取出一个地址替换掉IPv6地址。这样做的目的是减少IPv4的手动配置映射
实验五、IPv6静态路由及默认路由
PC1配置:
PC1#conf t
PC1(config)#noip routing //关闭路由功能,作PC
PC1(config)#ipv6route ::/0 2001::1 //设置IPv6的网关
PC1(config)#inte0/0
PC1(config-if)#ipv6add 2001::2/16 //设置端口的IPv6地址
PC1(config-if)#nosh//启动端口
PC1(config-if)#exit
R1配置:
R1#conf t
R1(config)#ipv6unicast-routing//开启IPv6路由功能支持
R1(config)#inte0/0
R1(config-if)#ipv6add 2001::1/16
R1(config-if)#nosh
R1(config-if)#exit
R1(config)#inte0/1
R1(config-if)#ipv6add 1212:1212:1212::1/64
R1(config-if)#nosh
R1(config-if)#exit
R1(config)# ipv6 route::/0 1212:1212:1212::2 //设置IPv6默认路由
R2配置:
R2#conf t
R2(config)#ipv6unicast-routing //开启IPv6路由功能支持
R2(config)#inte0/0
R2(config-if)#ipv6add 1212:1212:1212::2/64
R2(config-if)#nosh
R2(config-if)#exit
R2(config)#inte0/1
R2(config-if)#ipv6add 2323:2323:2323::2/96
R2(config-if)#nosh
R2(config-if)#exit
R2(config)#ipv6route 2001::/16 1212:1212:1212::1//IPv6静态路由去往2001::/16
R2(config)#ipv6route 2002::/16 2323:2323:2323::3//IPv6静态路由去往2002::/16
R3配置:
R3#conf t
R3(config)#ipv6unicast-routing
R3(config)#inte0/1
R3(config-if)#ipv6add 2323:2323:2323::3/96
R3(config-if)#nosh
R3(config-if)#exit
R3(config)#inte0/0
R3(config-if)#ipv6 add 2002::1/16
R3(config-if)#nosh
R3(config-if)#exit
R3(config)#ipv6route ::/0 2323:2323:2323::2
PC2配置:
PC2#conf t
PC2(config)#noip routing
PC2(config)#inte0/0
PC2(config-if)#ipv6add 2002::2/16
PC2(config-if)#nosh
PC2(config-if)#exit
PC2(config)#ipv6route ::/0 2002::1
测试网络联通:
PC1#traceroute2002::2
Typeescape sequence to abort.
Tracingthe route to 2002::2
1 2001::1 68 msec 20 msec 20 msec
2 1212:1212:1212::2 60 msec 52 msec 40 msec
3 2323:2323:2323::3 72 msec 60 msec 60 msec
4 2002::2 128 msec 72 msec 68 msec
PC2#traceroute2001::2
Typeescape sequence to abort.
Tracingthe route to 2001::2
1 2002::1 12 msec 60 msec 20 msec
2 2323:2323:2323::2 60 msec 40 msec 40 msec
3 1212:1212:1212::1 76 msec 60 msec 60 msec
4 2001::2 108 msec 80 msec 80 msec
实验六、IPv6动态路由之RIPng
PC1配置:
PC1#conf t
PC1(config)#noip routing
PC1(config)#ipv6route ::/0 2001::1
PC1(config)#inte0/0
PC1(config-if)#ipv6add 2001::2/16
PC1(config-if)#nosh
PC1(config-if)#exit
R1配置:
R1#conf t
R1(config)#ipv6unicast-routing //开启IPv6路由支持功能
R1(config)#ipv6router rip 1//开启IPv6 RIP协议,进程名称为1
R1(config-rtr)#split-horizon//设置IPv6 RIP 进程使用水平分割
R1(config-rtr)#poison-reverse//设置IPv6 RIP 进程使用毒性逆转
R1(config-rtr)#exit
R1(config)#inte0/0
R1(config-if)#ipv6add 2001::1/16
R1(config-if)#ipv6rip 1 enable //将接口宣告进RIP进程1中
R1(config-if)#nosh
R1(config-if)#exit
R1(config)#inte0/1
R1(config-if)#ipv6add 1212:1212:1212::1/48
R1(config-if)#ipv6rip 1 enable
R1(config-if)#nosh
R1(config-if)#exit
R2配置:
R2#conf t
R2(config)#ipv6unicast-routing
R2(config)#ipv6route ::/0 null0 //添加一条空接口的默认路由,用于宣告进RIP
R2(config)#inte0/0
R2(config-if)#exit
R2(config)#ipv6router rip 1
R2(config-rtr)#split-horizon
R2(config-rtr)#poison-reverse
R2(config-rtr)#exit
R2(config)#inte0/0
R2(config-if)#ipv6add 1212:1212:1212::2/48
R2(config-if)#ipv6rip 1 default-information originate //将默认路由通过RIP从这个接口宣告出去
R2(config-if)#ipv6rip 1 enable
R2(config-if)#nosh
R2(config-if)#exit
R2(config)#inte0/1
R2(config-if)#ipv6add 2323:2323:2323:2323::2/64
R2(config-if)#ipv6rip 1 enable
R2(config-if)#ipv6rip 1 default-information originate
R2(config-if)#nosh
R2(config-if)#exit
R3配置:
R3#conf t
R3(config)#ipv6unicast-routing
R3(config)#ipv6router rip 1
R3(config-rtr)#split-horizon
R3(config-rtr)#poison-reverse
R3(config-rtr)#exit
R3(config)#inte0/1
R3(config-if)#ipv6add 2323:2323:2323:2323::3/64
R3(config-if)#ipv6rip 1 enable
R3(config-if)#nosh
R3(config-if)#exit
R3(config)#inte0/0
R3(config-if)#ipv6add 2002::1/16
R3(config-if)#ipv6rip 1 enable
R3(config-if)#nosh
R3(config-if)#exit
PC2配置:
PC2#conf t
PC2(config)#noip routing
PC2(config)#ipv6route ::/0 2002::1
PC2(config)#inte0/0
PC2(config-if)#ipv6add 2002::2/16
PC2(config-if)#nosh
PC2(config-if)#exit
配置完成,测试联通,查看路由表:
PC2#ping2001::2
Typeescape sequence to abort.
Sending 5,100-byte ICMP Echos to 2001::2, timeout is 2 seconds:
!!!!!
Successrate is 100 percent (5/5), round-trip min/avg/max = 68/111/248 ms
R3#sh ipv6route
IPv6Routing Table - 9 entries
Codes: C -Connected, L - Local, S - Static, R - RIP, B - BGP
U - Per-user Static route
I1 - ISIS L1, I2 - ISIS L2, IA - ISISinterarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 -OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSAext 2
R ::/0 [120/2]
via FE80::CE01:BFF:FE1C:1, Ethernet0/1
R 1212:1212:1212::/48 [120/2]
via FE80::CE01:BFF:FE1C:1, Ethernet0/1
R 2001::/16 [120/3]
via FE80::CE01:BFF:FE1C:1, Ethernet0/1
C 2002::/16 [0/0]
via ::, Ethernet0/0
L 2002::1/128 [0/0]
via ::, Ethernet0/0
C 2323:2323:2323:2323::/64 [0/0]
via ::, Ethernet0/1
L 2323:2323:2323:2323::3/128 [0/0]
via ::, Ethernet0/1
L FE80::/10 [0/0]
via ::, Null0
L FF00::/8 [0/0]
via ::, Null0
R3#sh ipv6rip database
RIPprocess "1", local RIB
1212:1212:1212::/48, metric 2, installed
Ethernet0/1/FE80::CE01:BFF:FE1C:1, expiresin 158 secs
2001::/16, metric 3, installed
Ethernet0/1/FE80::CE01:BFF:FE1C:1, expiresin 158 secs
2323:2323:2323:2323::/64, metric 2
Ethernet0/1/FE80::CE01:BFF:FE1C:1, expiresin 158 secs
::/0, metric 2, installed
Ethernet0/1/FE80::CE01:BFF:FE1C:1, expiresin 158 secs
R3#debugipv6 rip
RIPRouting Protocol debugging is on
*Mar 1 00:28:36.675: RIPng: response received fromFE80::CE01:BFF:FE1C:1 on Ethernet0/1 for 1
*Mar 1 00:28:36.675: src=FE80::CE01:BFF:FE1C:1 (Ethernet0/1)
*Mar 1 00:28:36.679: dst=FF02::9
*Mar 1 00:28:36.679: sport=521, dport=521, length=112
*Mar 1 00:28:36.679: command=2, version=1, mbz=0, #rte=5
*Mar 1 00:28:36.679: tag=0, metric=1,prefix=1212:1212:1212::/48
*Mar 1 00:28:36.679: tag=0, metric=1,prefix=2323:2323:2323:2323::/64
*Mar 1 00:28:36.683: tag=0, metric=2, prefix=2001::/16
*Mar 1 00:28:36.683: tag=0, metric=16, prefix=2002::/16
*Mar 1 00:28:36.683: tag=0, metric=1, prefix=::/0
*Mar 1 00:28:35.283: RIPng: Sending multicast update on Ethernet0/0 for 1
*Mar 1 00:28:35.283: src=FE80::CE02:BFF:FE1C:0
*Mar 1 00:28:35.283: dst=FF02::9 (Ethernet0/0)
*Mar 1 00:28:35.287: sport=521, dport=521, length=112
*Mar 1 00:28:35.287: command=2, version=1, mbz=0, #rte=5
*Mar 1 00:28:35.287: tag=0, metric=1,prefix=2323:2323:2323:2323::/64
*Mar 1 00:28:35.287: tag=0, metric=1, prefix=2002::/16
*Mar 1 00:28:35.287: tag=0, metric=2,prefix=1212:1212:1212::/48
*Mar 1 00:28:35.287: tag=0, metric=3, prefix=2001::/16
*Mar 1 00:28:35.291: tag=0, metric=2, prefix=::/0
*Mar 1 00:28:35.291: RIPng: Sending multicast updateon Ethernet0/1 for 1
*Mar 1 00:28:35.291: src=FE80::CE02:BFF:FE1C:1
*Mar 1 00:28:35.291: dst=FF02::9 (Ethernet0/1)
*Mar 1 00:28:35.295: sport=521, dport=521, length=112
*Mar 1 00:28:35.295: command=2, version=1, mbz=0, #rte=5
*Mar 1 00:28:35.295: tag=0, metric=1,prefix=2323:2323:2323:2323::/64
*Mar 1 00:28:35.295: tag=0, metric=1, prefix=2002::/16
*Mar 1 00:28:35.295: tag=0, metric=16,prefix=1212:1212:1212::/48
*Mar 1 00:28:35.299: tag=0, metric=16, prefix=2001::/16
*Mar 1 00:28:35.299: tag=0, metric=16, prefix=::/0
IPv6的RIPng协议是基于RIPv2协议的,但它并不是RrPv2的简单扩展,它实际上是一个完全独立的协议。RIPng协议不支持IPv4, 如果同时在IPv4和IPv6环境里使用RIP作为路由选择协议,就必须运行支持IPv4的RIPvl或RIPv2,以及支持IPv6的RIPng。RIPng使用与RlPv2相同的计时器、过程处理和消息类型。例如,RIPng像RIPv2—样,使用30s的更新计时器抖动来避免消息同步,还有180的超时周期、120s的垃圾收集计时器和180s的抑制计时器(默认显示0)。它也使用相同的跳数度量,16跳表示不可到达。RIPng也用与RIPv2相同的方式使用请求和响应消息(command1和command2)。另外,除了类似于RIPvl和RIPv2一样用到少数单播方式外,像RIPv2一样,RIPng大多是以多播方式收发请求和响应消息。RIPng使用的IPv6多播地址是FF02::9。除了上述这些类似的功能外,一个例外之处是认证功能。RIPng本身并没有认证机制,但是承担认证功能的特性已经集成到IPv6中了。当然,Rpng也不需要像RIPv2那样要求具有对R1Pvl的兼容性开关,因为它本来就不向后支持IPv4协议,RIPng采用UDP521端口(可修改),不再支持自动汇总,因为IPv6已经没有了A、B、C的主类分类,支持接口下的手工汇总
实验七、IPv6动态路由协议之EIGRP
IPv6 的EIGRP在本质上和IPv4没有区别,依旧采用DUAL算法,采用组播更新,触发更新。IPv6 的EIGRP直接配置在接口上,这样使得接口可以没有IPv6全局单播地址, IPv6的EIGRP没有网络状态. EIGRP在 IPv6上需要配置一个路由器ID(默认情况下会选择一个环回口作为RID,推荐手动设备EIGRPRID)。默认情况下eigrp进程是关闭的,需要在进程下用no shutdown 开启
PC1配置:
PC1#conf t
PC1(config)#noip routing
PC1(config)#ipv6route ::/0 2001::1
PC1(config)#intfa0/0
PC1(config-if)#ipv6add 2001::2/16
PC1(config-if)#nosh
PC1(config-if)#exit
R1配置:
R1#conf t
R1(config)#ipv6unicast-routing //开启IPv6路由功能
R1(config)#intfa0/0
R1(config-if)#ipv6add 2001::1/16
R1(config-if)#ipv6eigrp 1 //设置IPv6的eigrp进程
R2(config-rtr)#router-id1.1.1.1//设置eigrp路由器ID
R1(config-if)#nosh//启动eigrp进程
R1(config-if)#exit
R1(config)#intfa0/1
R1(config-if)#ipv6add 1212:1212:1212::1/48
R1(config-if)#ipv6eigrp 1 //将接口宣告到eigrp进程中
R1(config-if)#nosh
R1(config-if)#exit
R1(config)#ipv6router eigrp 1
R1(config-rtr)#nosh
R1(config-rtr)#exit
R2配置:
R2#conf t
R2(config)#ipv6 un
R2(config)#ipv6 unicast-routing
R2(config)#ipv6 router eigrp 1
R2(config-rtr)#router-id 2.2.2.2
R2(config-rtr)#no sh
R2(config-rtr)#exit
R2(config)#int fa0/0
R2(config-if)#ipv6 add1212:1212:1212::2/48
R2(config-if)#ipv6 eigrp 1
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int fa0/1
R2(config-if)#ipv6 add2323:2323:2323:2323::3/64
R2(config-if)#ipv6 eigrp 1
R2(config-if)#no sh
R2(config-if)#exit
R3配置:
R3#conf t
R3(config)#ipv6 un
R3(config)#ipv6 unicast-routing
R3(config)#ipv6 router eigrp 1
R3(config-rtr)#router-id 3.3.3.3
R3(config-rtr)#no sh
R3(config-rtr)#exit
R3(config)#int fa0/1
R3(config-if)#ipv6 add 2323:2323:2323:2323::3/64
R3(config-if)#ipv6 eigrp 1
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#int fa0/0
R3(config-if)#ipv6 add 2002::1/16
R3(config-if)#ipv6 eigrp 1
R3(config-if)#no sh
R3(config-if)#exit
PC2配置:
PC2#conf t
PC2(config)#no ip routing
PC2(config)#ipv6 route ::/0 2002::1
PC2(config)#int fa0/0
PC2(config-if)#ipv6 add 2002::2/16
PC2(config-if)#no sh
PC2(config-if)#exit
测试网络联通:
PC2#ping 2001::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to2001::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5),round-trip min/avg/max = 72/138/316 ms
R3#sh ipv6 route eigrp
IPv6 Routing Table - 6 entries
Codes: C - Connected, L - Local, S -Static, R - RIP, B - BGP
U - Per-user Static route, M - MIPv6
I1 - ISIS L1, I2 - ISIS L2, IA - ISISinterarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 -OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSAext 2
D - EIGRP, EX - EIGRP external
D 1212:1212:1212::/48 [90/307200]
via FE80::C601:1CFF:FE30:1, FastEthernet0/1
D 2001::/16 [90/332800]
via FE80::C601:1CFF:FE30:1, FastEthernet0/1
R3#sh ipv6 eigrp topology
IPv6-EIGRP Topology Table forAS(1)/ID(3.3.3.3)
Codes: P - Passive, A - Active, U - Update,Q - Query, R - Reply,
r - reply Status, s - sia Status
P 2323:2323:2323:2323::/64, 0successors, FD is Inaccessible
via FE80::C601:1CFF:FE30:1(307200/281600), FastEthernet0/1
P 2001::/16, 1 successors, FD is332800
via FE80::C601:1CFF:FE30:1(332800/307200), FastEthernet0/1
P 2002::/16, 1 successors, FD is281600
via Connected, FastEthernet0/0
P 1212:1212:1212::/48, 1 successors,FD is 307200
via FE80::C601:1CFF:FE30:1(307200/281600), FastEthernet0/1
R2#debug ipv6 eigrp 1
IP-EIGRP Route Events debugging ison
*Mar 1 00:56:17.511: IPv6-EIGRP(0:1): Processing incoming UPDATE packet
*Mar 1 00:56:17.931: IPv6-EIGRP(0:1): Processing incoming UPDATE packet
*Mar 1 00:56:17.935: IPv6-EIGRP(0:1): Int 2001::/16 M 307200 - 256000 51200SM 281600 - 256000 25600
*Mar 1 00:56:17.935: IPv6-EIGRP(0:1): 2001::/16 (90/307200) added to RIB
*Mar 1 00:56:17.939: IPv6-EIGRP(0:1): Int 1212:1212:1212::/48 M 307200 -256000 51200 SM 281600 - 256000 25600
*Mar 1 00:56:17.939: IPv6-EIGRP(0:1): 1212:1212:1212::/48 routing table notupdated
*Mar 1 00:56:17.943: IPv6-EIGRP(0:1): 2323:2323:2323:2323::/64 - do advertiseout FastEthernet0/0
*Mar 1 00:56:17.943: IPv6-EIGRP(0:1): Int 2323:2323:2323:2323::/64 metric281600 - 256000 25600
*Mar 1 00:56:17.947: IPv6-EIGRP(0:1): 2002::/16 - do advertise outFastEthernet0/0
*Mar 1 00:56:17.947: IPv6-EIGRP(0:1): Int 2002::/16 metric 307200 - 25600051200
*Mar 1 00:56:17.959: IPv6-EIGRP(0:1): 2001::/16 - do advertise outFastEthernet0/1
*Mar 1 00:56:17.959: IPv6-EIGRP(0:1): Int 2001::/16 metric 307200 - 25600051200
*Mar 1 00:56:17.971: IPv6-EIGRP(0:1): Processing incoming UPDATE packet
*Mar 1 00:56:17.971: IPv6-EIGRP(0:1): Int 2001::/16 M 307200 - 256000 51200SM 281600 - 256000 25600
*Mar 1 00:56:17.975: IPv6-EIGRP(0:1): Int 1212:1212:1212::/48 M 307200 -256000 51200 SM 281600 - 256000 25600
*Mar 1 00:56:17.979: IPv6-EIGRP(0:1): 1212:1212:1212::/48 - do advertise outFastEthernet0/0
*Mar 1 00:56:17.983: IPv6-EIGRP(0:1): Int 1212:1212:1212::/48 metric 281600 -256000 25600
*Mar 1 00:56:17.983: IPv6-EIGRP(0:1): Int 2001::/16 metric 307200 - 25600051200
*Mar 1 00:56:18.087: IPv6-EIGRP(0:1): 2323:2323:2323:2323::/64 - do advertiseout FastEthernet0/0
*Mar 1 00:56:18.087: IPv6-EIGRP(0:1): Int 2323:2323:2323:2323::/64 metric281600 - 256000 25600
*Mar 1 00:56:18.087: IPv6-EIGRP(0:1): 2002::/16 - do advertise outFastEthernet0/0
*Mar 1 00:56:18.087: IPv6-EIGRP(0:1): Int 2002::/16 metric 307200 - 25600051200
实验八、IPv6动态路由协议之OSPF
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#ipv6 route ::/0 2001::1
PC1(config)#int fa0/0
PC1(config-if)#ipv6 add 2001::2/16
PC1(config-if)#no sh
PC1(config-if)#exit
R1配置:
R1#conf t
R1(config)#ipv6 unicast-routing
R1(config)#ipv6 router ospf 1 //创建一个名为1的ospf进程
R1(config-rtr)#router-id 1.1.1.1//设置进程的路由器ID为1.1.1.1
R1(config-rtr)#exit
R1(config)#int fa0/0
R1(config-if)#ipv6 add 2001::1/16
R1(config-if)#ipv6 ospf 1 area 0 //把接口宣告到ospf进程中,并指定属于区域0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ipv6 add1212:1212:1212::1/48
R1(config-if)#ipv6 ospf 1 area 0
R1(config-if)#no sh
R1(config-if)#exit
R2配置:
R2#conf t
R2(config)#ipv6 unicast-routing
R2(config)#ipv6 router ospf 1
R2(config-rtr)#router-id 2.2.2.2
R2(config-rtr)#exit
R2(config)#int fa0/0
R2(config-if)#ipv6 add1212:1212:1212::2/48
R2(config-if)#ipv6 ospf 1 area 0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int fa0/1
R2(config-if)#ipv6 add2323:2323:2323:2323::2/64
R2(config-if)#ipv6 ospf 1 area 0
R2(config-if)#no sh
R2(config-if)#exit
R3配置:
R3#conf t
R3(config)#ipv6 unicast-routing
R3(config)#ipv6 router ospf 1
R3(config-rtr)#router-id 3.3.3.3
R3(config-rtr)#exit
R3(config)#int fa0/0
R3(config-if)#ipv6 add 2002::1/16
R3(config-if)#ipv6 ospf 1 area 0
R3(config-if)#no sh
R3(config-if)#exit
R3(config)#int fa0/1
R3(config-if)#ipv6 add2323:2323:2323:2323::3/64
R3(config-if)#ipv6 ospf 1 area 0
R3(config-if)#no sh
R3(config-if)#exit
PC2配置:
PC2#conf t
PC2(config)#no ip routing
PC2(config)#ipv6 route ::/0 2002::1
PC2(config)#int fa0/0
PC2(config-if)#ipv6 add 2002::2/16
PC2(config-if)#no sh
PC2(config-if)#exit
测试网络:
PC2#ping 2001::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to2001::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5),round-trip min/avg/max = 68/123/332 ms
R2#sh ipv6 route ospf
IPv6 Routing Table - 7 entries
Codes: C - Connected, L - Local, S -Static, R - RIP, B - BGP
U - Per-user Static route, M - MIPv6
I1 - ISIS L1, I2 - ISIS L2, IA - ISISinterarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 -OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSAext 2
D - EIGRP, EX - EIGRP external
O 2001::/16 [110/20]
via FE80::C600:70FF:FE68:1, FastEthernet0/0
O 2002::/16 [110/20]
via FE80::C602:70FF:FE68:1, FastEthernet0/1
R2#sh ipv6 ospf neighbor
Neighbor ID Pri State Dead Time Interface ID Interface
3.3.3.3 1 FULL/BDR 00:00:39 5 FastEthernet0/1
1.1.1.1 1 FULL/DR 00:00:33 5 FastEthernet0/0
R2#sh ipv6 ospf database
OSPFv3 Router with ID (2.2.2.2)(Process ID 1)
Router Link States (Area 0)
ADV Router Age Seq# Fragment ID Link count Bits
1.1.1.1 580 0x80000006 0 1 None
2.2.2.2 325 0x80000007 0 2 None
3.3.3.3 319 0x80000006 0 1 None
Net Link States (Area 0)
ADV Router Age Seq# Link ID Rtr count
1.1.1.1 580 0x80000001 5 2
2.2.2.2 325 0x80000001 5 2
Link (Type-8) Link States (Area0)
ADV Router Age Seq# Link ID Interface
2.2.2.2 527 0x80000002 5 Fa0/1
3.3.3.3 321 0x80000002 5 Fa0/1
1.1.1.1 716 0x80000002 5 Fa0/0
2.2.2.2 574 0x80000002 4 Fa0/0
Intra Area Prefix Link States(Area 0)
ADV Router Age Seq# Link ID Ref-lstype Ref-LSID
1.1.1.1 580 0x80000003 0 0x2001 0
1.1.1.1 583 0x80000001 5120 0x2002 5
2.2.2.2 328 0x80000001 5120 0x2002 5
3.3.3.3 372 0x80000001 0 0x2001 0
R2#debug ipv6 ospf packet
OSPFv3 packet debugging is on
*Mar 1 00:08:54.383: OSPFv3: rcv. v:3 t:1 l:40 rid:1.1.1.1
aid:0.0.0.0 chk:BC0C inst:0 from FastEthernet0/0
*Mar 1 00:08:59.599: OSPFv3: rcv. v:3 t:1 l:40 rid:3.3.3.3
aid:0.0.0.0 chk:B402 inst:0 from FastEthernet0/1
OSPFV3是在原有OSPF V2基础上开发的支持IPV6的协议,它使用的仍然是链路状态算法,OSPFV2的基本机制,如洪泛(flooding)、DR选举、区域划分、SPF算法保持不变。相对于OSPFV2,OSPFV3最大的变化就是对IPV6地址的支持,以及对IPv6体系架构的兼容。另外,OSPFv3在OSPFv2的基础上,对功能做了以下增强。
从per-sub到per-link: IPv6使用链路(link)表示节点赖以在链路层通信的媒介或工具。Interface连接到链路上。多个IPv6地址前缀可以分配到一个单独的链路上;对连接到链路上的两个节点,即使他们的IPv6地址前缀不同,也可以直接通信。OSPFv3也是运行在链路上,而不象IPv4中是基于网段的。链路的概念取代了OSPFv2中的网络和子网。因此,我们说OSPF接口是连接到链路上而不是子网上。这一变化影响了Hello报文的接收以及Hello报文和Network-LSA的内容。
地址:在OSPFv3中,OSPF协议报文头和大部分LSA中去掉了地址部分,从而与网络层协议无关。具体说来有以下方面:除了LSU报文中的LSA载荷包含IPv6地址信息外,其他的协议报文中都不含有地址字段;Router-LSA和Network-LSA中去掉了网段地址,用拓扑信息取而代之; OSPFv3中的Router ID、Area ID和Link State ID保留IPv4中的格式——32bit;在所有类型的网络中,包括广播和NBMA,都使用Router ID来识别邻居
洪泛范围,LSA的洪泛范围归纳为3类,放在LSA的LS类型域(field)。这三类是:本地链路范围:LSA只在本地链路上传播,这类LSA是Link-LSA;区域范围:LSA只在一个OSPF区域内部传播,这类LSA包括Router-LSA、Network-LSA、Inter-Area-Prefix-LSA、Inter-Area-Router-LSA和Intra-Area-Prefix-LSA;自治系统范围:LSA在整个自治系统内传播,这类LSA只有AS-external-LSA。
多实例:OSPFv3支持在单链路上运行多实例。这使得多个供应商在共享一台甚至多台网络设备的情况下,仍然可以保持各自网络的独立运行。在OSPFv2中,是通过设置不同的OSPF验证来实现的。在单链路上运行多实例是通过在OSPF报文头和OSPF接口数据结构中包含实例号(Instance ID)做到的。实例号只影响OSPF报文接收。
使用link-local地址:IPv6中的本地链路地址用于单链路上的邻居发现,无状态自动配置等等。对于以本地链路地址作为源地址的报文,IPv6路由器不作转发。本地链路单播地址范围是FF80/10。OSPFv3假定每个路由器的物理接口都分配了本地链路单播地址。除了虚连接以外,所有的OSPFv3接口都使用本地链路单播地址作为报文的源地址。路由器从链路上学到其他路由器的本地链路单播地址,再使用这些地址作为转发报文的下一跳。虚连接使用全球范围地址或本地站点地址作为OSPF报文源地址。本地链路地址只出现在Link-LSA中,其他OSPF LSA不使用本地链路地址。Inter-area-prefix-LSA、AS-external-LSA和intra-area-prefix-LSA中决不能携带本地链路地址。在接口下配置这个命令ipv6 enable,就会自动生成一个IPv6 link-local地址
认证:OSPFv3本身没有认证(Authentication)功能。因此,OSPFv3报文头中去掉了AuType和Authentication字段。相应的,所有的OSPF区域和接口数据结构都去掉了认证相关域(field)。OSPFv3的认证依赖于IPv6报文的认证头和IP封装安全有效载荷报头。OSPFv3通过这些IP报文头来确保路由交换的完整性和认证/保密。OSPFv3报文利用IPv6标准的16位完整校验和防止报文数据的随机错误。该校验和覆盖了整个OSPF报文和伪IPv6头。
报文格式: OSPFv3报文直接封装在IPv6报文中。OSPFv3报文头中去除了素有的地址相关字段,做到与网络协议无关。所有的地址信息都放在各种LSA中。OSPFv3报文的具体变有:
OSPF版本变为3;
Hello报文和DD报文的Option字段扩展到24位;
OSPF报文头除去了Authentication和AuType字段;
Hello报文不含有任何地址信息,包含Interface ID。发送路由器为链路上的接口分配Interface ID,并用Interface ID唯一的标识这些接口。在Network-LSA中,使用DR的Interface ID作为Link State ID。
在报文Option字段增加了