<为何要部署IPV6>
·IPv4的局限性:
  1.地址空间的局限性:IP地址空间的危机由来已久,并正是升级到IPv6的主要动力。
  2.安全性:IPv4在网络层没有安全性可言,安全性一直被认为是由网络层以上的层负责。
  3.自动配置:对于IPv4节点的配置,重编址比较复杂,让很多普通用户无所适从。
  4.NAT:破坏了Internet端到端的网络模型。
  5.由于IPv4地址分配杂乱无章,没有层次性,网络设备需要维护庞大的路由表项。
  6.IPv4包头过于复杂,使得网络节点处理的效率不高。

IPV6的好处:
  1、超大的地址空间
  2、全球可达性,不需要再用NAT
  3、全球重新部署,有规划,易于实现聚合,路由汇总
  4、多宿主。一个接口可以配多个主IP地址
  5、无状态自动配置。电脑通过路由器发送来的网络号和EUI64自动给自己配IP地址,实现即插即用
  6、方便的进行重编址
  7、包头简单,通过扩展包头技术可实现以后的新技术扩展

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


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中没有广播地址和网络号保留地址,即全0全1可用作主机号

------------------------------------------------------------------------------------------
IPv4与IPv6包头结构比较:
IPv4:

IPv6:

Field name kept from IPv4 to IPv6
Field not kept in IPv6
Name and position changed in IPv6
New field in IPv6


Traffic Class优先级设置
Payload Length负载长度,相当于v4头长度减去固定长度
Next Header下一跳包头,相当于v4的Protocol字段;或者表示扩展包头类型
Hop Limit相当于v4中的TTL
Flow label流标签字段


IPv6地址组成:
IPv6地址=前缀+接口标识
前缀:相当于v4中的网络号
接口标识:相当于v4当中的主机号


<IPV6的地址类型>
可分为三大类:
1、单播地址
2、组播地址
3、任意播地址


1、单播--Unicast : one to one
·单播地址用于一对一的连接
·IPv6单播地址有以下六种类型:

 1-Aggregate Global Unicast Address   2xxx:xxxxx/3  -  3FFF: :FFFF
                                        2001::/16  IPV6因特网地址
                                        2002::/16  6to4过渡地址
  2-Link Local Address              FE80::/10   (前10位以FE80开头)
  3-Site Local Address (Private)       FEC0::/10  (私网IP)
  4-Unspecified Address              0:0:0:0:0:0:0:0/128 => ::/128
  5-Loopback Address                0:0:0:0:0:0:0:1/128 => ::1/128
 6-IPv4 Compatible Address            ::192.168.30.1  => ::C0A8:1E01

以下是一些单播地址的具体说明:
1、可聚合全球单播地址Aggregate global unicast address
由IANA分配的可在全球路由的公网IP地址

目前已分配的前缀:2000::/3     占用了12.5%的IPV6地址空间
2000:0000:0000:0000:0000:0000:0000:0000--3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

这个前缀中总共包含216-3=8192个/16的前缀
2001::/16 目前实际用于IPV6因特网运作的前缀
2002::/16 为使用6-TO-4过渡机制的节点保留
3ffe::/16 用于6bone测试目的的前缀

2、本地链路地址:link-local address
当在一个节点启用IPV6,启动时节点的每个接口自动生成一个link-local address
其前缀64位为标准指定的,其后64位按EUI-64格式来构造
注意:在本链路上,路由表中看到的下一跳都是对端的Link Local地址,不是公网IP地址

前缀:FE80::/10
(前10位为FE80,如果没定义下54位为0,后64位为mac地址转化)
范围:只能在本地链路使用,不能在子网间路由

在一个接口可以配置很多IPv6地址,所以学习路由就有可能出现很多下一跳。所以必须使用Link Local地址唯一标识一个节点,(在每个接口只能有一个Link Local地址)。在本地链路看到下一跳都是对端的Link Local地址。
在网络重新编址过程中,节点和路由器的Link Local地址不会发生变化,可以很容易地做一个修改,不用担心网络不可达。

R1(config-if)#ipv6 address FE80:0:0:0:0123:0456:0789:0abc link-local   手工指定link-local地址

3、本地站点地址: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因特网进行通信的设备,比如:打印机、内部网服务器、网络交换机等

4、未指定地址Unspecified address
形式:0:0:0:0:0:0:0:0 (就这一个)
表示地址未指定,或者在写默认路由时代表所有路由

5、回环地址Loopack address
形式:0:0:0:0:0:0:0:1 (就这一个)  
相当于IPv4中127.0.0.1地址的含义一样,表示节点自已

6、内嵌IPV4地址的IPV6地址IPv4 Compatible Address 
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

EUI-64格式:扩展惟一标识符
在IPV6中,无状态自动配置机制使用EUI-64格式来自动配置IPV6地址
所谓无状态自动配置是指在网络中没有DHCP服务器的情况下,允许节点自行配置IPV6地址的机制。

EUI-64的构造规则--根据接口的MAC地址再加上固定的前缀来生成一个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

三、加上前缀--FE80::0250:3EFF:FEE4:4C00  这就是一个完整的IPV6地址
    (即FE80:0000:0000:0000:0250:3EFF:FEE4:4C00)

反转的原因:
  在MAC地址中,第7比特为1表示本地管理,为0表示全球管理
  在EUI-64格式中,第7位为1表示全球惟一,为0表示本地惟一

2、组播地址Multicast
在IPV6中没有广播,用组播来代替

前缀:FF00::/8   占用了0.38%的IPV6地址空间

      1111    1111    4bit       4bit
     |→固定值←||→标志←| |→范围←|

标志位为0000表示是永久保留的组播地址,分配给各种技术使用
标志位为0001表示是用户可使用的临时组播地址

范围段定义了组播地址的范围,其定义如下:

标志位为0000表示是永久保留的组播地址,分配给各种技术使用
标志位为0001表示是用户可使用的临时组播地址

范围段定义了组播地址的范围,其定义如下:
二进制    十六进制    范围类型
0001          1       本地接口范围
0010          2       本地链路范围
0011          3       本地子网范围
0100          4       本地管理范围
0101          5       本地站点范围    类似组播的私网地址
1000          8       组织机构范围
1110          E       全球范围        类似组播的公网地址

下面是一些组播指定地址:
FF02::1    all nodes   在本地链路范围的所有节点,包括路由器,电脑,只要运行IPv6。相当于v4中的224.0.0.1
FF02::2    all routers 在本地链路范围的所有路由器.相当于v4中的224.0.0.2
FF02::5    all ospf routers
FF02::9    all rip routers  所有运行RIP的路由器.相当于v4中的224.0.0.9
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

3、任意播地址Anycast address
应用在one-to-nearest(一到近)模式

任意播是多个设备共享一个地址.分配IPv6单播(unicast)地址给拥有相同功用的一些设备.发送方发送一个以任意播为目标地址的包,当路由器接受到这个包以后,就转发给具有这个地址的离它最近的设备.单播地址用来分配任意播地址.对于那些没有配备任意播的的地址就是单播地址;但是当一个单播地址分配给不止一个接口的时候,单播地址就成了任意播地址。

例如:Mobile方面的特性,移动设备漫游到其他区域,不必接入原始的接入点,只需要找到最近的即可。

必须的IPV6地址:

一旦节点启用IPV6,那么接口就会自动生成下列地址
1、本地链路地址
2、回环地址
3、所有节点多播地址FF02::1
4、如果是路由器,还会有FF02::2
5、被请求节点的组播地址

如果接口配了一个IPV6的单播地址,还会产生被请求节点的组播地址

《如何在帧中继中写MAP》
注意:必须写两条MAP,一条是所配IPV6地址的MAP,一条是link-local地址的MAP
否则会由于没有MAP映射导致无法PING通。

<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   让本接口使用另一个接口的MAC地址生成源地址
R1(config-if)#ipv6 mtu 1500    配置接口的MTU值
R1(config-if)#ipv6 nd suppress-ra    关闭自动下发前缀
R2(config-rtr)#no split-horizon  关闭水平分割  注意IPV6的水平分割是在进程下关闭,不是在接口下
Router#show ipv6 interface e0    显示IPV6接口的信息,包括IPV6地址,link-local地址,加入的组播地址及被请求节点组播地址

注意:串口和loopback口会借用以太口的MAC地址来生成link-local地址。