<为何要部署IPV6>

·IPv4的局限性:
  1.地址空间的局限性:IP地址空间的危机由来已久,并正是升级到IPv6的主要动力。
  2.安全性:IPv4在网络层没有安全性可言,安全性一直被认为是由网络层以上的层负责。
  3.自动配置:对于IPv4节点的配置比较复杂,让很多普通用户无所适从。
  4.NAT:破坏了Internet端到端的网络模型。
  5.由于IPv4地址分配杂乱无章,没有层次性,网络设备需要维护庞大的路由表项。
  6.IPv4包头过于复杂,使得网络节点处理的效率不高。
 
IPV6的好处:
  1、超大的地址空间
  2、全球可达性,不需要再用NAT(nat的屏蔽性还是需要的)
  3、全球重新部署,有规划,易于实现聚合
  4、能自动配置,实现即插即用
  5、方便的进行重编址
  6、包头简单,通过扩展包头技术可实现以后的新技术扩展
 
ipv4 路由转发的时候,ip包会改变checksum(校验和) 和TTL(每经过一个路由器TTL值减一)
ipv6 只变TTL,没有校验和
 
CPU现在无法实现128位的转发。
最好只是64位的。
 
·Theoretical limit: 4.3 billion  (十亿)   43亿
  Practical limit  : 250 million  (百万)   2.5亿
 
  Over 420 million Internet in Y2001 
  (less than 10% of the worldwide population)
 
 
没有广播,组播代替广播。所以没有ARP。
IPv4中的广播(broadcast)可以导致网络性能的下降甚至广播风暴(broadcast storm).在IPv6中,就不存在广播这一概念了,取而代之的是组播(multicast)和任意播(anycast),任意播也称为泛播.
 
IPV6在以太网中的协议ID值是0x86DD
 
<IPV6地址的表示方法>
·IPv4  点分十进制      32bit
  IPv6  冒号分十六进制  128bit
  
0000:0000:0000:0000:0000:0000:0000:0000=>::
0000:0000:0000:0000:0000:0000:0000:0001=>0:0:0:0:0:0:0:1=>::1
2001:0000:0000:1234:0000:0000:0567:00ff=>2001::1234:0:0:567:ff   只能有一个::
fe80:0000:0000:0000:0000:0000:0000:0009=>fe80::9
 
内嵌IPV4地址的IPV6地址
1、IPV4兼容的IPV6地址--用于在IPV4网络上建立自动隧道,以传输IPV6数据包。
   其中高96bit设为0,后面跟32bit的IPV4地址
   0000:0000:0000:0000:0000:0000:206.123.31.2
   0000:0000:0000:0000:0000:0000:ce7b:1f01
 
   由于这种机制不太好,现在已经不再使用,转而采用更好的过渡机制
 
2、映射IPV4的IPV6地址--仅用于拥有IPV4和IPV6双协议栈节点的本地范围
   其中高80bit设为0,后16bit设为1,再跟IPV4地址
   0000:0000:0000:0000:0000:ffff:206.123.31.2
   0000:0000:0000:0000:0000:ffff:ce7b:1f01
 
URL的IPV6地址表示
   为了区分IPV6地址中的冒号和端口号前的冒号,要把IPV6地址用[]括起来
   <www.example.net:8080/index.html>
   <https:[2001:410:0:1:250:fcee:e450:33ab]:8443/abc.html>
 
IPV6中掩码的表示:
在IPV6中掩码只能使用CIDR表示法
 
2001:410:0:1::45ff/128
2001:410::1/64
 
注意:在IPV6中没有广播地址和网络号保留地址
 
<IPV6的基本命令>
 
R1(config)#ipv6 unicast-routing    在路由器上开启IPV6路由功能
R1(config-if)#ipv6 enable        在接口下启用IPV6,会自动生成一个link-local地址
R1(config-if)#ipv6 address 2001::1/64   指定一个IP地址,配置后会自动生成一个link-local地址
R1(config-if)#ipv6 address FE80:0:0:0:0123:0456:0789:0abc link-local   手工指定link-local地址
R1(config-if)#ipv6 address 2001:0410:0:1::/64 eui-64  使用eui-64格式自动生成IPV6地址的低64位
R1(config-if)#ipv6 unnumbered   让本接口使用另一个接口的单播IPV6地址作为源地址
R1(config-if)#ipv6 mtu 1500    配置接口的MTU值
R1(config-if)#ipv6 nd suppress-ra    关闭自动下发前缀
R2(config-rtr)#no split-horizon  关闭水平分割  注意IPV6的水平分割是在进程下关闭,不是在接口下
show ipv6 interface e0    显示IPV6接口的信息,包括IPV6地址,link-local地址,加入的组播地址及被请求节点组播地址
 
 
<IPV6的地址类型>
单播--Unicast : one to one
·单播地址用于一对一的连接
·IPv6单播地址有以下六 种类型:
  -Unspecified Address              0:0:0:0:0:0:0:0/128 => ::/128
  -Loopback Address                0:0:0:0:0:0:0:1/128 => ::1/128
 -IPv4 Compatible Address            ::192.168.30.1  => ::C0A8:1E01
 -Link Local Address              FE80::/10(前10位以FE80开头)
  -Site Local Address (Private)       FEC0::/10
 -Aggregate Global Unicast Address   2xxx:xxxxx/3  -  3FFF: :FFFF
    2001::/16  IPV6因特网地址
    2002::/16  6to4过渡地址
 
以下是一些单播地址的具体说明:
本地链路地址:link-local address
当在一个节点启用IPV6,启动时节点的每个接口自动生成一个link-local address
其前缀64位为标准指定的,其后64位按EUI-64格式来构造
注意:在本链路上,路由表中看到的下一跳都是对端的Link Local地址,不是公网IP地址
 
前缀:FE80::/10
范围:只能在本地链路使用,不能在子网间路由
 
为何需要link-local--在一个接口可以配置很多IPv6地址,所以学习路由就有可能出现很多下一跳。
所以出现Link Local地址唯一标识一个节点。在本地链路看到下一跳都是对端的Link Local地址。
在网络重新编址过程中,节点和路由器的Link Local地址不会发生变化,可以很容易地做一个修改,不用担心网络不可达。
 
EUI-64的构造规则--根据接口的MAC地址再加上固定的前缀来生成一个IPV6的link-local地址
 
例如:MAC地址--0010.7b80.032f以此为例来生成一个IPV6地址
1、将MAC地址从中间分为两段,0010.7b和80.032f
2、在两段的中间加入ff.fe--0010.7b.ff.fe.80.032f
3、将第7个比特位转换(0转1,1转0)--0210.7bff.fe80.32f
4、加上前缀--FE80::0210:7BFF:FE80:032F这是link-local地址
再生成被请求节点的组播地址--FF02::1:FF80:32F只接将后24位移下来就可
 
R1(config-if)#ipv6 address FE80:0:0:0:0123:0456:0789:0abc link-local   手工指定link-local地址
 
 
本地站点地址:site-local address
IPV6的私网地址,就像IPV4中的私网保留地址一样
只占用到整个IPV6地址空间的0.1%
 
前缀:FEC0::/10  其后的54比特用于子网ID  最后64位用于主机ID
范围:只能在本站点内使用,不能在公网上使用
 
例如:在本地分配十个子网
1、FEC0:0:0:0001::/64
2、FEC0:0:0:0002::/64
3、FEC0:0:0:0003::/64
10、FEC0:0:0:000A::/64
 
本地站点地址被设计用于永远不会与全球IPV6因特网进行通信的设备,比如:打印机、内部网服务器、网络交换机等
 
可聚合全球单播地址Aggregate global unicast address
 
由IANA分配的可在全球路由的公网IP地址
 
目前已分配的前缀:2000::/3     占用了12.5%的IPV6地址空间
2000:0000:0000:0000:0000:0000:0000:0000--3FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
 
这个前缀中总共包含8192个/16的前缀
目前实际用于IPV6因特网运作的前缀:2001::/16
2002::/16 为使用6-TO-4过渡机制的节点保留
3ffe::/16 用于6bone测试目的的前缀
 
未指定地址Unspecified address
 
形式:0:0:0:0:0:0:0:0 
表示地址未指定,或者在写默认路由时代表所有路由
 
回环地址Loopack address
 
形式:0:0:0:0:0:0:0:1
同IPV4中127.0.0.1地址的含义一样,表示节点自已
 
组播地址Multicast
在IPV6中没有广播,用组播来代替
 
前缀:FF00::/8   占用了0.38%的IPV6地址空间
          
      1111    1111    4bit       4bit
     |→固定值←||→标志←| |→范围←|
 
标志位为0000表示是永久保留的组播地址,分配给各种技术使用
标志位为0001表示是用户可自定义的临时组播地址
 
范围段定义了组播地址的范围,其定义如下:
 
二进制    十六进制    范围类型
0001          1       本地接口范围
0010          2       本地链路范围
0011          3       本地子网范围
0100          4       本地管理范围
0101          5       本地站点范围
1000          8       组织机构范围
1110          E       全球范围
 
下面是一些组播指定地址:
FF02::1    all nodes   在本地链路范围的所有节点
FF02::2    all routers 在本地链路范围的所有路由器
FF02::5    all ospf routers
FF02::9    all rip routers 所有运行RIP的路由器
FF02::A    all eigrp routers 所有运行eigrp的路由器
FF05::2                在一个站点范围内的所有路由器
 
 
 
 
被请求节点的组播地址solicited-node multicast address--重要的东东
一种特殊的组播地址,对于节点或路由器的接口上配置的每个单播和任意播地址,都会自动生成一个对应的被请求节点组播地址。注意link-local address也会生成一个被请求节点的组播地址。
 
工作范围:只在本地链路上有效
特点 :
1 在本地链路上,被请求接点的组播地址中只包含一个用户
2 只要知道一个接点的ipv6地址,就能计算出他的被请求节点的组播地址
作用:1、在IPV6中,没有ARP。ICMP代替了ARP的功能,被请求节点的组播地址被节点用来获得相同本地链路上邻居节点的链路层地址
      2、用于重复地址检测DAD,在使用无状态自动配置将某个地址配置为自已的IPV6地址之前,节点利用DAD验证在其本地链路上该地址是否已经被使用。
 
前缀:FF02:0000:0000:0000:0000:0001:FFxx:xxxx/104
      FF02::1:FFxx:xxxx/104
 
如何产生:被请求节点组播地址的前104位固定,将IP地址的后24位移下来填充到后面就可以了
   例如:IPv6---2001::1234:5678/64
   被请求节点组播地址---FF02::1:FF34:5678/104
   其中FF02::1:FF为固定部分,共104位
 
组播IP地址到MAC地址的映射:
 
映射规则:组播MAC地址的前16位固定为0x3333,将组播IPV6地址的后32位直接映射到组播MAC地址的后32位就可以了。
例:IPV6地址为--FF12::1234:5678/64
    对应的组播MAC地址为--3333:1234:5678
    0x3333为固定前缀
 
例:所有节点的组播地址:FF02::0001
    对应的组播MAC地址:3333:0000:0001
 
任意播地址Anycast address
应用在one-to-nearest(一到近)模式
 
组播的接受对象是一组成员,是个群体.任意播是多个设备共享一个地址.分配IPv6单播(unicast)地址给拥有相同功用的一些设备.发送方发送一个以任意播为目标地址的包,当路由器接受到这个包以后,就转发给具有这个地址的离它最近的设备.单播地址用来分配任意播地址.对于那些没有配备任意播的的地址就是单播地址;但是当一个单播地址分配给不止一个接口的时候,单播地址就成了任意播地址。
 
例如:Mobile方面的特性,移动设备漫游到其他区域,不必接入原始的接入点,只需要找到最近的即可。
 
必须的IPV6地址:
 
一旦节点启用IPV6,那么接口就会自动生成下列地址
1、本地链路地址
2、回环地址
3、所有节点多播地址FF01::1和FF02::1
 
如果接口配了一个IPV6的单播地址,还会产生被请求节点的组播地址
 
EUI-64格式:
在IPV6中,无状态自动配置机制使用EUI-64格式来自动配置IPV6地址
所谓无状态自动配置是指在网络中没有DHCP服务器的情况下,允许节点自行配置IPV6地址的机制。
 
工作原理:自动将48bit的以太网MAC地址扩展成64bit,再挂在一个64bit的前缀后面,组成一个IPV6地址
 
一、将48位的MAC地址从中间分开,插入一个固定数值FFFE
    0050:3EE4:4C00-->0050:3EFF:FEE4:4C00
 
二、将第7个比特位反转,如果原来是0,就变为1,如果原来是1,就变为0
    0050:3EFF:FEE4:4C00-->0250:3EFF:FEE4:4C00
 
反转的原因:
  在MAC地址中,第7比特为1表示本地管理,为0表示全球管理
  在EUI-64格式中,第7位为1表示全球惟一,为0表示本地惟一
 
《ICMP V6》
ICMP 用来向源节点报告关于向目的地传输ip数据包的错误和信息,定义了多种消息类型
ICMP V6在IPV6中的协议号是58
 
在IPV6中ICMP的功能得到极大增强,除了原有的P功能,还有以下几个主要作用
 
在IPV6中ICMP的主要功能:
1、替代地址解析协议--NDP
2、无状态自动配置--NDP
3、重复地址检测--NDP
4、前缀重新编址--NDP
5、路径MTU发现--PMTUD
 
一、PMTUD  path MTU discovery
作用:使用ICMP来检测数据包传输路径上最小的MTU值,检测到后使用ICMP 类型2消息(数据包超长)告知源路由器,这样分片的工作在源路由器上就可完成,中间路由器不必做这一工作。原理如下:
 
 
 
二、在IPV6中使用NDP
 
NDP-RFC2461
为NDP特有的范畴定义了新的ICMPV6消息:
NS (Neighbor Solicitation)  135   邻居请求
NA (Neighbor Advertisement) 136   邻居通告
 
RS 133   发到FF02::2   路由器请求信息,发给所有路由器
RA 134   发到FF02::1   路由器通告信息,每200S发一次,发向所有节点
 
类型137   重定向消息
 
三、替代ARP
 
使用NS 135和NA 136消息
 
主机使用邻居请求消息NS135发向邻居的被请求节点组播地址,请求一个MAC地址,邻居回应一个NA136邻居通告消息
 
show ipv6 neighbors   显示IPV6邻居的地址,生存期、链路层地址、和去往邻居的接口
router#ipv6 neighbor fec0::1:0:0:1:b e0 0080:12ff:6633   静态加入一个邻居项
clear ipv6 neighbors   清除邻居发现表
 
默认情况下邻居请求消息1000ms发送一次,可用以下命令修改:
router(config-if)#ipv6 nd ns-interval 1000
 
router(config-if)#ipv6 nd reachable-time 1800000   设置邻居的可达时间间隔,默认30分钟,如果30分钟内还没再收到邻居的消息,就会从邻居发现表中删除邻居表项
 
四、公告前缀--类似于DHCP
路由器周期性地发出RA134公告,第200S一次,主机收到后自动生成IP地址,并发回一个RS 133作确认
只要在路由器的接口上配置了一个本地站点或全球可聚合单播地址,就启用了CISCO路由器上的IPV6前缀通告
默认情况下:无状态自动配置公告的前缀长度为64比特
 
RS 133   发到FF02::2   请求信息,发给所有路由器
RA 134   发到FF02::1   通告信息,每200S发一次,发向所有节点
 
注意:有三种不同的生存期--
 
生存期:每一个被公告前缀都有生存期,可以从0到无穷大,路由器会不断检查这个值
 
有效生存期:主机节点保持有效状态的时间。
首选生存期:必须小于或等于有效生存期,到期后,IPV6地址不能主动去建立新的连接,但可以在有效生存期没过时之前接受别的连接。通常用于前缀重新编址。
在默认情况下,cisco设备中,有效生存期为30天,首选生存期为7天
 
Autoconfiguration自动配置 
 
来看下IPv6接口的自动配置:当本地链路的路由器发送网络类型信息(前缀)给所有节点的时候.支持IPv6的主机就把它自己64位的链路层地址(即MAC地址)附着在64位的前缀后面按EUI-64格式自动配置成128位长的地址,保证地址的唯一性.自动配置启用即插即用(Plug and Play)
 
show ipv6 interface e0 prefix  显示路由器接口上公告的前缀的参数
 
R1(config-if)#ipv6 nd ra-lifetime 1000000  设定路由器公告消息(RA134)的生存期,默认情况下为30min
 
R1(config-if)#ipv6 nd ra-interval 200  设定路由器公告消息的时间间隔,默认是200S
 
R1(config-if)#ipv6 nd prefix 2001:1:1::1/64 20000 10000  改写前缀公告的参数,后面分别是有效时间和首选时间
 
R1(config-if)#ipv6 nd suppress-ra   基于接口关闭路由器公告
 
R1(config-if)#ipv6 nd managed-config-flag  在主机节点上启用有状态自动配置
 
debug ipv6 nd    调试前缀公告信息
 
五、重编址
路由器发送组播数据包,其中数据包中包含2个前缀,一个是拥有比较短的生存期的旧前缀,还有一个是新的拥有正常时间的前缀.通知网络上的节点用完旧的前缀后换成新的前缀,这样就能进行平滑的前缀过渡
 
也是使用RS和RA消息
 
六、重复地址检测<DAD------Duplicate Address Detection>
使用邻居请求消息NS  135
用于确定准备配置的IPV6地址在网络上是否唯一。
 
七、路由器重定向
使用重定向消息,类型为137
 
路由器使用ICMPV6重定向消息通知链路上的节点,在链路上存在一个更好的转发数据包的路由器.
 
默认是启用的
 
R1(config-if)#no ipv6 redirects   关闭重定向
 
八、Ping 
echo 128
echo 129
 
 
 
《IPV6 ACL》
 
在IPV6中,ACL必须命名,写法类似IPV4扩展访问列表
Ipv6 access-list wolf
Deny ipv6 2001:12::2/128 any
Permit ipv6 any any 
 
Int s0
Ipv6 traffic-filter wolf out  在接口下调用
 
Ipv6的access-list语句的后面默认隐含三条语句:
Permit icmp any any nd-ns
Permit icmp any any nd-na
Deny ipv6 any any 
 
在接口应用了访问列表后,P包不通会提示AAAAA
 
<RIP>--ripng
在IPV6中使用UDP521端口,在IPV4中是520端口
R1(config)#ipv6 unicast-routing
R1(config)#ipv6 router rip wolf  必须要有一个进程号
R1(config-if)#ipv6 rip wolf enable   必须进入接口下开启接口的RIP
    
Show ipv6 route
Show ipv6 route rip
show ipv6 rip
show ipv6 database 
IPV6的metric值出口和入口都加1.
IPV6的水平分割是整个路由器开启(在进程中关闭),IPV4是在接口下开关的,在帧中继的HUB-stake模式中要关闭水平分割
clear ipv6 rip 清除rip的数据库
<OSPF>
在IPV6中使用的是OSPFV3版
R1(config)#Ipv6 router ospf 110
R1(config-router)#Router-id 2.2.2.2  注意:必须使用一个类似IPV4地址的标识
R1(config)#Int s0
R1(config-if)#Ipv6 ospf 110 area 0   也是在接口下宣告
R1(config)#Int lo0
R1(config-if)#Ipv6 ospf 110 area 0  环回口依然是主机路由,128位,可通过改网络类型来改动
 
Show ipv6 route ospf
 
R1(config)#Int s0
R1(config-if)#Ipv6 ospf neighbor 2001::2   注意OSPF手工指邻居在接口下做,而IPV4是在进程下做
 
 
<is-is>
本试验只能在Rack00上做
R1(config)#Router isis
R1(config-router)#Net 49.0001.2222.2222.2222.00
R1(config-router)#Log-adjacency-changes all    当邻居起来时出个提示
R1(config)#Int s0
R1(config-if)#Ipv6 router isis     IPV4的ISIS也是在接口下启用
 
重分布直连:
R1(config)#Router isis
R1(config-router)#Redistribute connected   在IPV4中直接在ISIS进程中重分布
 
R1(config)#Router isis
R1(config-router)#Address-family ipv6     在IPV6中重分布必须进这一进程
R1(config-router-af)#Redistribute connected  注意重分布命令必须在address-family进程中用
 
《BGP》
使用TCP179端口,和IPV4中一样
 
R1(config)#Router bgp 3
R1(config-router)#No autosummary
R1(config-router)#bgp router-id 3.3.3.3
R1(config-router)#No synchronization
R1(config-router)#Neighbor 2001:13::1 remote-as 1
R1(config-router)#Address-family ipv6   注意进入address-family进程下
R1(config-router-af)#Neighbor 2001:13::1 activate  必须在address-family进程下激活,否则不起效
R3(config-router-af)#network  3::/64     也要在address-family下宣告
 
Show bgp ipv6 neighbor
Show bgp ipv6 summary   注意bgp与ipv6反过来了
 
Clear ip bgp *   清邻居的命令和IPV4中一样
 
在ipv6中最终传输的地址是link-local地址
《IPV4到IPV6的过渡解决方案》
 
 
 
 
普通的Tunnel方案
 
Tunnel
R2(config)#int tunnel 2                 R3(config)#int tunnel 3     
             tunnel source 2.2.2.2                   tunnel source 3.3.3.3
             tunnel destination 3.3.3.3              tunnel destination 2.2.2.2
             tunnel mode ipv6ip                      tunnel mode ipv6ip
             ipv6 enable                             ipv6 enable
 
show ipv6 interface tunnel 2   注意在采用IPV6IP模式时,会用Tunnel源IP地址来生成本Tunnel的link-local地址,即使你不用ipv6 enable命令,而采用ipv6 unnumbered 命令借用别的地址,结果还是一样。
 
R2(config)#ipv6 router ospf 110
R2(config-router)#router-id 2.2.2.2
R2(config)#int tunnel 2
R2(config-if)#ipv6 ospf 110 area 0
R2(config)#int e0
R2(config-if)#ipv6 ospf 110 area 0
 
 
<6 TO 4>自动Tunnel方案
首先要注意E0接口的地址必须和源地址配合,且必须用2002这一前缀开头
而且后面32bit必须把tunnel的源地址转换成16进制
例: 一站点的源为2.2.2.2
则e0接口的地址为 2002:202:202::2/64
R2(config)#int tunnel 2                 R3(config)#int tunnel 3     
 tunnel source 2.2.2.2                 tunnel source 3.3.3.3
tunnel mode ipv6ip 6to4                 tunnel mode ipv6ip 6to4
ipv6 unnumbered e0                        ipv6 unnumbered e0
ipv6 enable                               ipv6 enable 
实际上会按源地址生成link-local地址
R2(config)#ipv6 route 2002::/16 tunnel 2    R3(config)#ipv6 route 2002::/16 tunnel 3  必须写上静态路由