2017年11月“两办”印发了《推进互联网协议第六版(IPv6)规模部署行动计划》,使得IPv6开始落地,并强制执行。计划提出要用5到10年时间,形成下一代互联网自主技术体系和产业生态,建成全球最大规模的IPv6商业应用网络。
到2018年末,市场驱动的良性发展环境基本形成,IPv6活跃用户数达到2亿,在互联网用户中的占比不低于20%。
到2020年末,市场驱动的良性发展环境日臻完善,IPv6活跃用户数超过5亿,在互联网用户中的占比超过50%,新增网络地址不再使用私有IPv4地址。
到2025年末,我国IPv6网络规模、用户规模、流量规模位居世界第一位,网络、应用、终端全面支持IPv6,全面完成向下一代互联网的平滑演进升级。
由此可见,针对2018年底要求完成2亿活跃用户的目标,对于ISP、ICP都是一个很大的挑战。而且,对于国家机关的网站的IPv6迁移也是硬性指标。这给CDN市场带来了新机遇,有很大的机会为客户、潜在客户快速安全地实现IPv6业务合规上线和迁移。本文将为大家介绍IPv6的关键技术知识点。
IPv6地址
IPv4的地址长度为32位,地址空间为2的32次方,约42亿个(世界上平均3个人有2个IP地址)。
IPv6的地址长度为128位,地址空间为2的128次方,约3.4×10^38个。
IPv6地址的表示
IPv4地址表示
二进制:10101100 00010000 00000001 00000001
十进制:172.16.1.1
IPv6地址表示
十六进制:2001:0410:0000:0001:0000:0000:0000:45ff
IPv6地址与IPv4地址表示方法有所不同,用十六进制表示,4位一组,中间用“:”隔开。
IPv6地址的压缩表示
如图可见,地址中,以“0”开头的组,就可以省略0,而多个连续的全0字段,则通过“::”来压缩代替。
IPv6 地址 = 前缀 + 接口标识
其中,前缀相当于IPv4地址中的网络ID,接口标识则相当于IPv4地址中的主机ID。前缀长度就是和IPv4地址标识一样,采用/xx来表示,如:2001:da8:207::8207/64。
IPv6地址分类
单播地址(unicast address)
如同 IPv4 的Unicast模式,适用在单一节点对单一节点的数据传送。标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。
这种类型的IPv6地址可区分为Global、Site-Local、Link-Local和IPv4-Compatible 4种型态。
下面针对这几种类型加以介绍:
Global 地址
前3bits为首码,内容固定是001,最后的64bits为接口标识(Interface ID)。Interface ID的功能如同IPv4的主机地址(Host ID)。
Site-Local 地址
前10bits为首码,内容固定为1111111011,间隔38bits的0之后,接着16bits 的子网地址(Subnet ID),最后才是 64bits的接口标识。
Link-Local 地址
也是用前10bits为首码,内容固定为1111111010,接着是连续54bits的0,最后的64bits也是接口标识。
IPv4-Compatible 地址
没有所谓的首码与接口标识,只有原本32bits的IPv4地址前面,加上96bits的0。
组播地址 (multicast address)
IPv6的组播整合了IPv4的Multicast及广播传送 (Broadcast),适用于单一节点对多节点的传送。标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。
而4-bit的lifetime如果取值0,则为永久属性,而取值1,则为临时属性。
常见的组播地址有:
任播地址 (anycast address)
Anycast的特殊之处在于:一个Anycast地址可以被多个节点使用,但是传送给此地址的报文,并非真的将它送到这些节点来,而仅仅是送给距离最近或成本最低(根据路由表来判断)的一个节点。
以RFC4291的规定,目前的Anycast地址只能分配给路由器,不能分配给电脑使用,而且不能作为发送端的地址。这种IPv6地址的首码长度不固定,首码以外的位元都是0。
设备IPv6地址的设置方式
由前文可知,设备的后64bit的地址是和设备相关的。因此如何设置这64bit的地址段则就是设备相关的。
目前,共有4种设置方式:
通过EUI-64设置的
通过自动生成的伪随机数设置的
通过DHCPv6设置
手动设置
EUI-64
EUI-64就是通过设备的MAC地址来生成这64bit地址字段。而由于MAC地址是48bit,通过将48bit的MAC地址对分为两段,两段之间填入0xFFFE来补齐为64bit。
自动生成的伪随机数
针对EUI-64有可能造成的主机MAC地址和IPv6地址对应关系所引发的安全隐患,采用自动生成的伪随机数来规避的方法。
ICMPv6 和Neighbor Discovery
ICMPv6 是基于RFC 2463,相对于IPv4的ICMP的演进,基本的信令模式是类似的,但是信令的种类和code进行了变化。
ICMPv6,提供了以下信息的承载:
错误信息
提示类信息
MTU的路径探测
Neighbor Discovery
ICMPv6的错误信息
目标不可达 (ICMP packet type1)
目标不可达会通过解释码来告知不可达的原因:
o 0 - No route to destination
o 1 - Access is administratively prohibited
o 3 - Address unreachable
o 4 - Port unreachable
数据包太大 (ICMP packet type2)
说明数据包大于IPv6链路的MTU。由于IPv6不会根据MTU而将数据包分包,所以会通过ICMP信息通知源数据包大于MTU。
超时 (ICMP packet type3)
超出了跳数。
参数错 (ICMP packet type4)
同样的,有个解释码来告知原因:
o 0 - Erroneous header field
o 1 - Unrecognized next-header type
o 2 - Unrecognized IPv6 option
Neighbor Discovery
Neighbor Discovery Protocol提供了IPv6下设备使能的能力:
自动配置地址和地址前缀的发现
冲突地址的发现
MTU的发现
路由发现
地址解析
IPv6的路由器定期发送Router Advertisement (RA),来提示路由的存在和提供主机的配置信息。RA信息是ICMP type 134 信息,从发送路由器的单播地址作为源,目的地址是link-scope all-nodes的组播地址。RA设置255为跳数限制,而且不能发送到local link之外的网络。
主机通过RA来进行本机的路由配置,而主机也可以通过发送Router Solicitation( RS) 来请求RA 。
IPv6和DNS
相对于IPv4的DNS中,hostname到IP的解析,IPv6的DNS中,从host那么到IP的解析是什么样的呢?
IPv6中,相对于IPv4的A记录,是AAAA记录,比如:
AAAA record:
www.abc.test AAAA 2001:db8:C18:1::2
而IPv6中,相对于IPv4的PTR记录,其PTR就要长的多了:
PTR record:
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.8.1.c.0.
8.b.d.0.1.0.0.2.ip6.arpa PTR www.abc.test.
IPv6下的移动IP
RFC 3775将移动IPv6协议定义为:不管IPv6节点位于IPv6网络的何处以及与移动IPv6节点通信的其他节点是否支持移动IPv6,始终可以对IPv6节点进行访问。
移动IPv6从移动IPv4中借鉴了许多概念和术语,例如:
移动节点(MN)
家乡代理(HA)
家乡地址
家乡链路
转交地址
外地链路
移动IP的机制实现
当移动节点在家乡链路时,它与通信节点采用传统的路由方式进行通信。
当移动节点移动到外地链路,通过无状态自动配置或有状态自动配置转交地址。然后移动节点注册它的primary转交地址到家乡链路的一个路由器上,请求这个路由器充当它的家乡代理,这个过程称为“绑定”。移动节点通过发送“binding update”的消息,然后家乡代理回应“binding acknowledgement”来完成“绑定”过程。
在这样的场景下,移动节点可以有两种方式和通信节点进行通信:
【1】 双向隧道模式
通信节点不要求支持移动IPv6,也不需要移动节点和通信节点间绑定注册。通信节点不知道移动节点的转交地址,它就像向其他任何固定节点发送数据包那样向移 动节点发送数据包。通信节点只是将移动节点的家乡地址(它知道的唯一地址)放入目的IPv6地址域中,并将它自己的地址放在源IPv6地址域中,然后将数 据包进行转发。这样,数据包将被送往移动节点的家乡链路,就像移动IPv4中那样。在家乡链路上,家乡代理上使用“代理邻居协议”(proxy ND),截获这个数据包,然后把这个包作为净荷,在其上面再加上一层IPv6报头,把新的数据包发送到移动节点的转交地址,这个过程应用的是“隧道技术”。移动节点将送过来的包拆封,发现内层数据包的目的地是它的家乡地址,于是将内层数据包交给高层协议处理。从移动节点发往通信节点的从“反向隧道”发往家乡代理,然后按照传统的路由方式发送到移动节点。
【2】路由优化的通信模式
需要通信节点必须支持移动IPv6,而且移动节点注册了它的绑定连接到通信节点。当通信节点发送报文到移动节点时,首先从其绑定缓存中查找包含移动节点的 IP地址的条目,如果找到,则使用type 2 路由头来发送报文(报文的目的IP地址为移动节点的转交地址),type 2路由头里包含了移动节点的家乡地址,当报文到达移动节点的转交地址时,移动节点把路由头里的Home address作为报文最后的目的地址,然后移动节点判断报文的目的地址为自己的家乡地址,则将内层数据包交给高层协议处理。类似的,移动节点使用home address option来通知通信节点自己的家乡地址。路由优化消除了与双向隧道向关联的传输延迟。