IPv6特点
- 128bits的地址方案,为未来数十年提供了巨大的IP地址空间
- 多等级层次有助于路由聚合,提高了因特网网络路由的效率及可扩展性
- 自动配置过程允许IPv6网络中的节点更加便捷的接入IPv6网络
- 重新编址机制使得IPv6提供商之间的转换对最终用户是透明的
- 无需NAT
- 不再有广播、不再有ARP
- IPv6的包头比IPv4更有效率,数据字段更少,去掉了包头校验和。更简单的报头提高了路由器的处理效率。新的扩展包头替代了IPv4的选项字段,并且提供了更多的灵活性
- 更有效的支持移动性和安全性
- v4v6过渡方式丰富多彩
- 测试IPv6的情况:http://www.test-ipv6.com/
IPv6报头
IPv6报头改进
- 取消了IP的校验
第二层和第四层的校验已经足够健壮了,因此IPv6直接取消了IP的三层校验。 - 取消中间节点的分片功能
分片重组功能由源目端自己进行,通过PMTU机制来发现路径MTU - 定义最长的IPv6报头
有利于硬件的快速处理,如此一来中间节点可以避免处理而节省大量的资源 - 安全选项的支持
IPv6提供了对Ipsec的完美支持,如此上层协议可以省去许多安全选项,例如OSPFv3就取消了认证 - 增加流标签
提高QoS效率
扩展报头
在IPv6中,v4中的选项被移到了扩展报头中。一个IPv6数据包可能包括0个或多个扩展包头,当使用多个扩展包头时,通过前面的包头的Nexthead字段指明该扩展包头后的扩展包头。有了扩展包头,中间路由器就不需要处理每一个可能出现的选项,提高了路由器处理数据包的速度,提高了其转发性能。在扩展报头链的最后就是有效负载。
扩展报头可选,只有需要该扩展报头对应的功能,发送主机才会添加相应扩展报头
- 逐跳选项报头Hop-by—Hop Options Header(协议0)
- 传送路径上每个路由器都要处理,用于巨型数据包和路由器警报。如RSVP资源预留协议
- 目标选项报头Destination Options Header(协议60)
- 该包头承载特别针对数据包目的地的可选信息,例如用在移动节点和家乡代理之间交换注册信息,移动
IP是这样的一个协议,即使移动节点改变了连接点,仍允许它保持永久的IP地址
- 该包头承载特别针对数据包目的地的可选信息,例如用在移动节点和家乡代理之间交换注册信息,移动
- 分段报头Fragment Header (协议44)
- 在IPv6中,建议所有的节点使用PMTUD机制来发现链路的MTU,这样就不需要对数据进行分段了。但是如果IPv6节点不支持PMTUD,但又必须发送比路径MTU还大的数据包时,就不得不分段了,这时候需使用分段包头,节点将数据分段,使用分段包头发送每个分段。
- 认证报头Authentication Header (协议51)
- 封装安全有效载荷报头Encapsulating Security Payload Header(协议51)
IPv6编址
地址简写
IPv6地址在简写的时候多个前导0可以省略成一个0;
如:2001:00a8:0207:0000:0000:0000:0000:8207
可缩写成:2001:a8:207:0:0:0:0:8207
一个或多个连续的16比特字段为0
时,可用::
表示,但整个缩写中只允许有一个::
如上面的例子,可以进一步缩写成:2001:a8:207::8207
URL表示
http://[ipv6地址]:8080 !! 必须用[ ] 括起来
地址分类
单播地址
- 可聚合全局单播地址(Aggregatable global unicast address)
- 一般从运营商处申请到的IPv6地址空间为/48,再由自己根据需要进一步规划
- 本地站点地址 (Site-local address)
- 类似IPv4中的私有地址。
- 以FEC0::/10为前缀。
- 链路本地地址 (Link-local address)
- 以FE80::/10为前缀,11-64位为0,外加一个64bits的接口标识(一般是EUI-64)。
- 只能在连接到同一本地链路的节点之间使用,也就是链路范围内有效。
- 用于自动地址配置、邻居发现、路由器发现等。
- 当一个节点启动IPv6协议栈时,节点的每个接口会自动配置一个链路本地地址。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信。缺省网关建议使用链路本地地址,因为这个地址是最稳定的。
EUI-64
将48bits的MAC对半劈开,插入FFFE,然后设置第7位,也就是U/L位,该比特位确定48bits的MAC地址的唯一性与否。一个以太网地址可以有两种含义,地址可被全球管理或本地管理。全球管理指使用如0800-2bxx-xxxx之类的厂商MAC,本地管理指使用自己的值重写MAC地址,在这种情况下,这个特殊的位=1表示本地管理;为0表示全球管理。但是在EUI-64格式中,U/L的含义正好相反,0表示本地管理,1表示全球管理,所以使用EUI-64格式的地址IPv6地址,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。
特殊的地址
- 回环地址:
::1 0:0:0:0:0:1/128
或者::1/128
- 用于IPv6节点发送报文给自己
- IPv4兼容地址
- 在过渡技术中会使用到一些包含IPv4地址的IPv6地址,为了让IPv4地址显得更加突出一些,定义了内嵌IPv4地址的IPv6地址格式。
0:0:0:0:0:0:192.168.1.2
或者::192.168.1.2
(96个0)
组播
组播地址最高位前8位固定为全1,比如:FFXX::/8
- Flags
- 4bits,0000:永久分配或众所周知的; 0001:临时的
- Scop用来限制组播数据流在网络中发送的范围。
- 0:预留
- 1:节点本地范围; 单个接口有效,仅用于Loopback通讯
- 2:链路本地范围; 如FF02::1表示链路上的所有节点;FF02::9:表示链路上的所有RIP路由器
- 3:本地子网范围
- 4:本地管理范围
- 5:本地站点范围
- 8:组织机构范围
- E:全球范围
- F:预留
- Group-ID
- 该字段长度可以为112位,用来标识组播组,而112位最多可以生成2112个组ID
- 建议仅使用该112位的最低32位组ID,将剩余的80位都置0
组播地址的MAC映射
特殊组播地址
FF01::1 节点本地范围所有节点组播地址
FF01::2 节点本地范围所有路由器组播地址
FF02::1 链路本地范围所有节点组播地址
FF02::2 链路本地范围所有路由器组播地址
……
被请求节点组播地址Solicited-node
- 是一种特殊用途的地址,主要用于重复地址检测(DAD)和替代IPv4中的ARP。
- 由前缀FF02::1:FF00:0 / 104和ipv6单播地址的最后24位组成。
- 一个IPv6单播地址对应一个Solicited-node地址。
- Solicited-node地址有效范围为本地链路范围。
Anycast
任播地址没有专门的地址空间,使用的是单播的地址空间。一个IPv6地址被分配给多个接口,仅用于路由器,发往任播地址的数据包被路由给分配了任播地址中的最近的一个(由路由协议判断远近)。
配置IPv6地址
拓扑
手工配置
R1(config)#int e0/0
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address 2012::/64 eui-64
R1(config-if)#no shutdown
R1#show ipv6 interface brief
Ethernet0/0 [administratively down/down]
FE80::A8BB:CCFF:FE00:1000
2012::A8BB:CCFF:FE00:1000
上面这条命令的意思是使用2012::/64
作为前缀,并且追加64bits的EUI-64格式接口ID,构成接口的全局唯一IPv6地址。
R2(config)#int e0/0
R2(config-if)#ipv6 add 2012::2/64
R2(config-if)#no sh
R2(config-if)#int e0/1
R2(config-if)#ipv6 add 2023::2/64
R2(config-if)#no sh
R2#ping 2012::A8BB:CCFF:FE00:1000
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2012::A8BB:CCFF:FE00:1000, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 1/163/650 ms
自动配置
IPv6地址的自动配置一般有两种方式
无状态地址自动配置
IPv6通过前缀公告实现无状态地址自动配置,报文如下
- Cur Hop Limit
- 表示当PC使用该RA通告的前缀构建IPv6地址,那么该PC发送的IPv6报文hoplimit都是该值(64)
- Flags
- 如果not managed位为1表示主机使用有状态地址自动配置(如DHCPv6)
- not other位为1则表示主机使用有状态地址自动配置来获取除了地址以外的参数
- RouterLifetime
- 该RA关联的前缀发给PC后,PC将Router视为网关
- Reachable time及retrans timer如果为0则表示为指定,下面为指定的地方
- 有效生存期(Valid lifetime)
- 首选生存期(preferred lifetime)
- 当地址处于Deprecated状态,地址不能主动的发起连接只能是被动的接受连接,这也是为了保证上层应用而设计的,但是过了valid lifetime时间地址就变为invalid,这时任何连接都会down掉
拓扑
R2负责分配IP地址
R2(config)#ipv unicast-routing
R2(config)#int e0/0
R2(config-if)#ipv add 2012::2/64
R2(config-if)#no ipv nd ra suppress
R2(config-if)#no sh
R2(config-if)#int e0/1
R2(config-if)#ipv add 2023::2/64
R2(config-if)#no ipv nd ra suppress
R2(config-if)#no sh
R1(config)#int e0/0
R1(config-if)#ipv add autoconfig default
R1(config-if)#no sh
R1#sh ipv int br
Ethernet0/0 [up/up]
FE80::A8BB:CCFF:FE00:1000
2012::A8BB:CCFF:FE00:1000
R1#sh ipv route
ND ::/0 [2/0]
via FE80::A8BB:CCFF:FE00:2000, Ethernet0/0
NDp 2012::/64 [2/0]
via Ethernet0/0, directly connected
L 2012::A8BB:CCFF:FE00:1000/128 [0/0]
via Ethernet0/0, receive
L FF00::/8 [0/0]
via Null0, receive
如果加default关键字,则会在获取到地址的接口上添加一个默认网关(默认路由)
有状态地址自动配置(DHCPv6)
拓扑
R1为DHCP服务器
R1(config)#ipv6 unicast-routing
R1(config)#ipv6 dhcp pool dhcppool
R1(config-dhcpv6)#prefix-delegation pool dhcppool lifetime 1800 600
R1(config-dhcpv6)#dns-server 2400:3200::1
R1(config)#ipv6 local pool dhcppool 2001::/16 16
R1(config)#int e0/0
R1(config-if)#ipv add 2001::1/64
R1(config-if)#no sh
R1(config-if)#ipv6 nd other-config-flag
R1(config-if)#ipv6 nd managed-config-flag
R1(config-if)#ipv6 dhcp server dhcppool
R2(config)#int e0/0
R2(config-if)#ipv dhcp client pd test
R2(config-if)#ipv6 address test ::/64 eui-64
R2(config-if)#no sh
R2#sh ipv int br
Ethernet0/0 [up/up]
FE80::A8BB:CCFF:FE00:2000
2001::A8BB:CCFF:FE00:2000
当一个主机收到RA路由器通告的时候,它会去查看RA里M位,如果M位为1,则开始在LAN上寻找DHCP服务器。主机将使用linklocal地址作为源发送DHCP-solicit message,目的是ALL_DHCP_Agents
以下是DHCPv6可能使用到的地址及端口:FF02::1:2 = ALL DHCP Agents(servers or relays,link-local scope)
FF05::1:3 = ALL DHCP servers(Site-local scope)
DHCP报文 client侦听UDP546;servers及agents侦听UDP547