一、IPv6基础知识:
1、IPv6地址表示方法:
IPv6的地址长度为128位,是IPv4地址长度的4倍。采用十六进制表示。
IPv6地址分为两部分,分别是网络前缀和接口标识。
网络前缀:相当于IPv4中的网络ID;前缀可书写为:地址/前缀长度。例如:21DA:D3:0
:2f3b::/64
》》IPv6的3种表示方法:
(1)冒分十六进制表示法:
格式为 X:X:X:X:X:X:X:X,其中每个 X 表示地址中的16 bit,以十六进制表示。
每个 X 的签前导0是可以省略的。
(2)0位压缩表示法:
在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“ :: ”,但为保证地址解析的唯一性,地址中“ :: ”,只能出现一次。
(3)内嵌IPv4地址表示法:
为实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96 bit采用冒分十六进制表示,而最后的32 bit地址则使用IPv4 的点分十进制表示。
例如: ::192.168.0.1 与 ::FFFF:192.168.0.1 就是两个典型的例子。
注:在前96 bit中,压缩0位的方法依然适用。
2、IPv6报文内容:
IPv6报文的整体结构分为IPv6报头、扩展报头和上层协议数据 3部分。
- IPv6报头是必选报文头部,长度固定为40 B,包含该报文的基本信息。
- 扩展报头是可选报头,可能存在0个、1个或多个,IPv6协议通过扩展报头实现各种丰富的功能;
- 上层协议数据是该IPv6报文携带的上层数据,可能是ICMPv6报文、TCP报文、UDP报文或其他可能报文。
版本号 | 表示协议版本。值为6 |
流量等级 | 主要用于QoS |
流标签 | 用来标识统一个流里面的报文 |
载荷长度 | 表明该IPv6包头部后包含的字节数,包含扩展头部 |
下一报头 | 该字段用来指明报头后接的报文头部类型,若存在扩展头,表示第一个扩展头的类型,否则表示其上层协议的类型,它是IPv6各种功能的核心实现方法 |
跳数限制 | 该字段类似于IPv4中的TTL,每次转发跳数减一,该字段达到0时包将会被丢弃 |
源地址 | 标识该报文的来源地址 |
目的地址 | 标识该报文的目的地址 |
3、IPv6地址类型:
IPv6协议主要定义了三种地址类型:单播地址、组播地址、任播地址。
与原来的IPv4地址相比,新增了“任播地址”类型,取消了原来IPv4地址中的广播地址,因为在IPv6中的广播功能是通过组播来完成的。
(1)单播地址:
用来唯一标识一个接口,类似IPv4中的单播地址。
发送到单播地址的数据报文将被传送给此地址所标识的一个接口。
(2)组播地址:
用来标识一组接口(通常这组接口属于不同的节点),类似IPv4中的组播地址。
发送到组播地址的数据报文将被传送给此地址所标识所有接口。
使用适当的组播路由拓扑,将向组播地址发送的数据包发送给该地址识别的所有接口。
任意位置的IPv6节点可以侦听任意的IPv6组播地址上的组播通信。
IPv6节点可以同时侦听多个组播地址,也可以随时加入或离开组播组。
IPv6组播地址的最明显特征就是最高的8位固定为1 1 1 1 1 1 1 1 。IPv6地址很容易区分组播地址的,因为它总是以FF开始。
组播地址高8 bit为固定值FF,此高8个bit中4 bit为标志位,4 bit为组播组的作用域,后112位为组ID,用以标识组播组。
目前,RFC 2373并没有将所有的112位都定义为成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0。这样每个组播组ID都映射到一个唯一的以太网组播MAC地址。
(3)任播地址:
用来标识一组接口(通常这组接口属于不同的节点)。
发送到任播地址的数据报文将被传送给此地址所标识的一组接口中距离源节点最近(根据使用的路由协议进行度量)的一个接口。
IPv6地址类型是由地址前缀部分来确定的,主要地址类型与地址前缀的关系如下:
4、被请求节点组播地址(Solicited-Node Address)
被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。
该地址主要用于邻居发现机制和地址重复检测功能。
IPb6中没有广播地址,也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中,这个功能通过邻居请求NS报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址,会发送NS报文,该报文的目的IP就是需要解析的IPv6地址对应的被请求节点组播地址;只有具有该组播地址的节点会检查处理。
被请求节点组播地址由 前缀 FF02::1:FF00:0/104 和 单播地址的最后24位组成。
5、NDP:邻居发现协议
NDP协议是IPv6协议体系中一个重要的基础协议。
通过使用ICMPv6报文实现以下丰富的功能:
* 无状态自动配置(简化版的DHCP):路由器发现、前缀发现、参数发现;
* 重复地址检测(DAD),相当于IPv4的免费ARP;
* 地址解析,相当于IPv4的ARP;
* 邻居不可达检测(NUD);
* 路由器重定向。
与IPv4的ARP相比,IPv6地址解析技术工作在OSI参考模型的网络层,与链路层协议无关。
——》ICMPv6的报文格式:
——》ICMPv6消息类型中有5种是为了支持邻居发现协议而定义的。功能如下所示:
6、重复地址检测DAD:
重复地址检测DAD是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其他的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。
一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前成为试验地址。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES 组播组 和 试验地址所对应的Solicited-Node 组播组。
过程中使用了两种ICMPv6报文:邻居请求报文NS 、邻居通告报文NA。
- NS报文:Type 字段值为135,Code字段值为0,在地址解析中的作用类似与IPv4中的ARP请 求报文。
- NA报文:Type 字段值为136,Code字段值为0,在地址解析中的作用类似与IPv4中的ARP应 答报文。
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Sloicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通信。
——》举例:
PC A的IPv6地址 2000::1 为新配置地址,即 2000::1 为PC A的试验地址。
PC A向 2000::1的Solicited-Node组播地址 FF02::1:FF00:1 发送一个2000::1 为请求的目标地址的NS报文进行重复地址检测,由于 2000::1 并未正式指定,所以NS报文的源地址为 未指定地址。
当PC B收到该NS报文后,有两种处理办法:
- 如果PC B发现 2000::1 是自身的一个试验地址,则PC B放弃使用这个地址作为接口地址,并且不会发送NA报文。
- 如果PC B发现 2000::1 是一个已经正常使用的地址,则PC B放会向FF02::1 发送一个NA报文,该消息中会包含2000::1 。这样,PC A收到这个消息后就会发现自身的试验地址是重复的,从而放弃该地址。
7、地址解析:
在IPv4中,当主机需要和目标主机通信时,需要先通过ARP协议获得目的主机的MAC地址。在IPv6中,同样需要从IP地址解析到MAC地址的功能,邻居发现协议实现该功能。
- PC A在向PC B发送报文之前它要先解析出PC B的MAC地址,所以首先PC A会发送一个NS报文,其中源MAC地址为PC A的MAC地址,目的MAC地址为PC B的被请求节点组播IP地址映射而来(将被请求节点组播地址的后32位取出,填充为固定前缀是 3333 的MAC地址);源IP地址为PC A的IPv6地址,目的IP地址为PC B的被请求节点组播地址,需要解析的目标为PC B的IPv6地址,这就表示PC A想要知道PC B的MAC地址。同时,NS报文还携带了PC A的MAC地址。
- 当PC B接收到了NS报文之后,就会回应NA报文,其中源地址为PC B的IPv6地址,目的地址为PC A的IPv6地址(使用NS报文中的PC A的MAC地址进行单播) ,同时包含PC B的MAC地址。这样就完成了一次地址解析的过程。
8、NUD邻居不可达检测:
NUD(邻居不可达检测)的一个重要特征是检测同一链路上以前相连通的两个节点现在是否依然连通。NUD帮助维护多个邻居邻居条目组成的邻居缓存,每个邻居都有相应的状态,状态之间可以迁移,分别是:
- 未完成(Incomplete):表示正在解析地址,但邻居链路层地址尚未确定。
- 可达(Rechable):表示地址解析成功,该邻居可达。
- 陈旧(Stale):表示可达时间耗尽,未确定邻居是否可达。
- 延迟(Delay):邻居可达性未知。Delay状态不是一个稳定的状态,而是一个延时等待状态。
- 探测(Probe):邻居可达性未知,正在发送邻居请求探针以确认可达性。
——》举例:
以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。具体的迁移过程如下图所示:
邻居状态迁移过程:
- A先发送NS报文,并生成缓存条目,此时邻居状态为Incomplete。
- 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
- 经过邻居可达时间,邻居状态由Reachable(默认30s)变为Stale,即未知是否可达。
- 如果在Reachable状态,A收到B的费请求NA报文,且报文中携带的B的数据链路层地址和表项中不同,则邻居状态马上变为Stale。
- 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
- 在经过一段固定时间后,邻居状态由Delay(默认5s)变为Probe(每隔1s发送一次NS报文,连续发送3次),其间若有NA应答,则邻居状态由Delay变为Reachable。
- 在Probe状态,A每隔1s发送单播NS,发送3次后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。
9、IPv6数据转发:
根据源和目的所在位置的不同,IPv6数据的转发模式主要分为两种:
(1)同一链路上的数据转发:
同一链路上的数据转发主要通过两个技术:同一链路判断、地址解析。
数据转发以邻居缓存(类似ARP表项)为基础。
(2)不同链路上的数据转发:
不同链路上的数据转发通过 "PC-路由器-....路由器-PC" 转发,同IPv4一样,IPv6路由器和路由器间数据转发以IPv6路由表(完全类似ARP表)为基础,并由IPv6协议来维护。
IPv6的路由表项同IPv4一样,通常有三种:直连路由、静态路由、由动态路由协议发现的路由(RIPng、IS-ISv6、OSPFv6、BGP4+)。
二、IPv6过渡技术
针对IPv4过渡到IPv6的技术,主要分为三大类:双栈、隧道、地址转换。
1、IPv6/IPv4双协议栈技术:
双栈技术是指在网络节点上同时运行IPv4和IPv6两种协议,从而在IP网络中形成逻辑上相互独立的两张网络:IPv4网络、IPv6网络。
网络中的节点同时支持IPv4和IPv6协议栈,源节点根据目的节点的不同而选用不同的协议栈,同时网络设备根据报文的协议类型选择不同的协议栈进行处理和转发。
》优点:
互通性好,实现简单,允许应用逐渐从IPv4过渡到IPv6。
》缺点:
网络设备要同时支持双栈。
对每个IPv4节点都要升级、成本较大,没有解决IPv4地址紧缺的问题。
2、IPv6隧道技术:
隧道技术指将另外一个协议数据包的报头直接封装在数据包报文头前