IPv6的拓展包头其实是将IPV4的Option字段,从IPv6基本包头中剥离,放到了扩展包头中。扩展包头被置于IPv6基本包头和上层协议数据单元之间,一个IPv6报文可以包含0个、1个或多个扩展包头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40 Byte限制,这样便于日后扩充新增选项。这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展包头总是8 Byte长度的整数倍。
当超过一种扩展包头被用在同一个IPv6报文里时,包头必须按照下列顺序出现:
接口ID可通过3种方法生成:手工配置、系统自动生成和IEEE EUI-64规范生成。
下面主要介绍IEEE EUI-64生成规范:
为什么需要将MAC地址的第七个比特位反转?
答:在单播MAC地址中,第1个Byte的第7bit是U/L(Universal/Local,也称为G/L,其中G表示Global)位,用于表示MAC地址的唯一性。如果U/L=0,则该MAC地址是全局管理地址,是由拥有OUI的厂商所分配的MAC地址;如果U/L=1,则是本地管理地址,是网络管理员基于业务目的自定义的MAC地址。而在EUI-64接口ID中,第7bit的含义与MAC地址正好相反,0表示本地管理,1表示全球管理,所以使用EUI-64格式的接口ID,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。这就是为什么要反转该位。
IPv6地址可以分为以下几类:
全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。全球单播地址由全球路由前缀(Global routing prefix)、子网ID(Subnet ID)和接口标识(Interface ID)组成,其格式如上图所示:
唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。唯一本地地址具有如下特点:
IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。
一个IPv6组播地址由前缀,标志(Flag)字段、范围(Scope)字段以及组播组ID(Global ID)4个部分组成:
0 | 保留 |
---|---|
1 | 接口本地范围 |
2 | 链路本地范围 |
7 | 汇聚点标记 |
Node-local:
Link-local:
被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于地址解析和地址重复检测功能。
任播地址与单播地址使用相同的地址空间,配置时须明确表明是任播地址,以此区别单播和任播,任播地址主要为DNS和HTTP提供服务,不过业界从来没有实施过该设计方案。
任播地址的报文会被送到最近的一个被标识接口,最近节点是由路由协议来定义的。
ICMPv6报文Type、Code字段组合的含义:
ICMPv6 4种错误报文的作用:
信息消息的作用:
NDP(Neighbor Discovery Protocol,邻居发现协议)实现了IPv6中诸多重要机制,如:
为了实现这些机制,NDP协议利用了ICMPv6的报文,具体如下表:
路由器发现过程使用两种报文RA和RS,具体过程如下:
路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文源地址是自身接口的链路本地地址,目标地址是所有节点的组播地址(FF02::1)。RA报文的Type字段值为134。
路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文源地址是自身接口的链路本地地址,目标地址是所有路由器的组播地址(FF02::2)。RS报文的Type字段值为133。
(1)IPv6主机无状态自动配置过程:
(2)当存在以下情况时忽略RA报文发送的前缀:
M位默认为0,为0时,收到该RA的主机使用RA中包含的IPv6前缀用于无状态地址自动配置。(等于控制所有前缀进行SLAAC)。当该值为1时,收到该RA的主机将采用有状态自动配置,也就是DHCPv6的方式来获取IPv6地址。使用如下命令,可将该值设置为1。
ipv6 nd autoconfig managed-address-flag
Other-Config-Flag,默认为0,表示主机不应该使用有状态自动配置机制来配置除了IPv6地址外的其他参数。该值置1,则主机需使用DHCPv6来配置除了IPv6地址外的其他信息,如DNS,域名等。使用如下命令,可将该值设置为1。
ipv6 nd autoconfig other-flag
M位和O位的组合意义:
重复地址检测确保网络中无两个相同的单播地址,所有地址都需要做DAD,使用NS(135)和NA(136)完成DAD交互过程。
(1)原理。
IPv6的地址解析不再使用ARP,也不再使用广播方式。通过ICMPv6(类型135的NS及类型136的NA报文)来实现地址解析。NS报文发送使用组播的方式,报文的目的IPv6地址为被请求的IPv6地址对应的“被请求节点组播地址”,报文的目的MAC为组播MAC。地址解析在三层完成,主要带来以下几个好处:
(1)IPv6组播地址的MAC地址映射。
33-33是专门为IPv6组播预留的MAC地址前缀,MAC地址的后32bit从对应的组播IPv6地址的后32bit拷贝而来。这样保证了组播IPv6地址和组播MAC地址的1对1映射。
(2)重定向的5个条件。
(3)重定向报文。
IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行。
(1)原理。
前缀重编址主要是利用在进行地址自动配置时获取的两个时间参数preferred lifetime和valid lifetime。这两个字段的意义和作用如下:
想进行无缝的前缀重编制可以进行如下配置:
int g0/0/0
ipv6 nd ra prefix 2001::/64 43200 0
此IP地址为原来IP 可用时间 首选时间
命令意思是,此IP地址,只能接受连接,不能主动发起连接。
ipv6 nd ra prefix 2001:db8:c18:2::/64 43200 43200
此IP地址为新换的IP,可主动连接,可被动接受。
当发现第2个IP地址,可以使用时,第一个IP地址就不用了。
5种邻居状态,分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)。它们的状态迁移图如下:
下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程:
目前解决过渡问题的基本技术主要有 3 种:双协议栈、隧道技术和NAT64。
网络中的节点同时支持IPv4和IPv6协议栈,源节点根据目的节点的不同选用不同的协议栈,而网络设备根据报文的协议类型选择不同的协议栈进行处理和转发。双栈可以在一个单一的设备上实现,也可以是一个双栈骨干网。对于双栈骨干网,其中的所有设备必须同时支持IPv4/IPv6协议栈,连接双栈网络的接口必须同时配置IPv4地址和IPv6地址。
(1)隧道基本概念。
隧道(Tunnel)是一种封装技术。它利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在自身的报文中,然后在网络中传输。
在过渡初期,IPv4网络已经大量部署,而IPv6网络只是散落在各地的“孤岛”,IPv6 over IPv4隧道就是通过隧道技术,使IPv6报文在IPv4网络中传输,实现IPv6网络之间的孤岛互连。根据隧道终点的 IPv4 地址的获取方式不同,隧道分为“配置隧道”及“自动隧道”。
(2)IPv6 over IPv4 隧道种类和对比。
IPv6 over IPv4手动隧道转发机制为:
当隧道边界设备的IPv6侧收到一个IPv6报文后, 根据IPv6报文的目的地址查找IPv6路由转发表,如果该报文是从此虚拟隧道接口转发出去,则根据隧道接口配置的隧道源端和目的端的IPv4地址进行封装。
封装后的报文变成一个IPv4报文,交给IPv4协议栈处理。报文通过IPv4网络转发到隧道的终点。
IPv6 over IPv4 GRE隧道: IPv6 over IPv4 GRE隧道的在隧道的边界路由器的传输机制和IPv6 over IPv4手动隧道相同,也是点到点之间的链路,只是需要GRE承载IPv6协议。GRE 隧道主要用于边缘路由器-边缘路由器、主机-边缘路由器定期安全通信的稳定连接。
IPv4的协议号为47,下面是手动隧道和gre隧道的对比:
手动隧道:
GRE隧道:
6to4隧道:6to4 隧道采用特殊的 6to4 地址,其格式为:2002: abcd :efgh:子网号::接口 ID/64,其中 2002 表示固定的 IPv6 地址前缀, abcd:efgh 表示该 6to4 隧道对应的 32 位全球唯一的 IPv4 源地址,用 16 进制表示(如 1.1.1.1 可以表示为 0101:0101)。 2002: abcd :efgh 之后的部分唯一标识了一个主机在6to4 网络内的位置。通过这个嵌入的 IPv4 地址可以自动确定隧道的终点,使隧道的建立非常方便。6to4自动隧道支持Router到Router、Host到Router、Router到Host、 Host到Host。
配置:
一个IPv4地址只能用于一个6to4隧道的源地址,如果一个边界设备连接了多个6to4网络使用同样的IPv4地址做为隧道的源地址,则使用6to4地址中的SLA ID来区分,但他们共用一个隧道。如上图的PC3和PC4。
6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址,该下一跳为路由器我们称之为6to4中继。实现普通IPv6网络与6to4网络通过IPv4网络互通。如上图PC3访问PC7。
ISATAP隧道:ISATAP主机的ISATAP地址的前64位是通过向ISATAP路由器发送请求来得到的,它可以进行地址自动配置。在ISATAP隧道的两端设备之间可以运行ND协议。
地址:如果IPv4地址是全局唯一的,则u位为1,否则u位为0。g位是IEEE群体/个体标志。所以当u置1,g置0时自动生成的ISATAP地址接口标识为0200:5EFE:IPv4;当u置0,g置0时自动生成的ISATAP地址接口标识为0000:5EFE:IPv4。
执行过程:
配置:
当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。
注意的点:
NAT64技术解决了IPv6与IPv4之间的网络地址与协议的转换,从而实现IPv6网络与IPv4网络的双向互访。应用场景是: