IPv6基础知识

互联网通信协议第6版(Internet Protocol version 6,简写:IPv6)是互联网协议的最新版本,用于数据包交换互联网络的网络层协议,旨在解决IPv4地址枯竭的问题,IPv6意图取代IPv4,而IPv4在网络上仍然占据着绝大多数的份额。

IPv6报文格式

IPv6报文有8个字段,固定大小为40字节,每一个IPv6数据包都必须包含报头,基本报头结构如下图所示:

  1. 0 1 2 3
  2. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |Version| Traffic Class | Flow Label |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. | PlayLoad Length | Next Header | Hop Limit |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. | Source |
  9. | Address |
  10. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  11. | Destination |
  12. | Address |
  13. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Version:版本号,长度为4bit,对于IPv6,其值为6
  • Traffic Class:流类别,长度为8bit,用于表示数据报的优先级,用于QoS
  • Flow Label:流标签,长度为20bit,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流
  • PlayLoad Length:有效载荷长度,长度为16bit,指的是紧跟IPv6报头的数据包的其他部分(扩展报头和上层协议数据单元)。该字段只能表示最大长度为65535字节的有效载荷。如果长度超过这个值,该字段会置0,而有效载荷长度用逐跳选项扩展报头中的超大有效载荷选项来表示
  • Next Header:下一个报头,长度为8bit,该字段定义了紧跟在IPv6报头后面的第一个扩展报头的类型,或者上层协议数据单元中的协议类型
  • Hop Limit:跳数限制,长度为8bit,该字段类似于IPv4中的TTL字段,定义了IP数据包经过的最大跳数。
  • Source Address:源地址,128bit,发送方的地址
  • Destination Address:目的地址,128bit,接收方的地址

    IPv6扩展报头

IPv4中,报头包含了可选字段,因而其报头长度是不定长的,在路由转发过程中,处理携带可选字段的IPv4报文会占用很大的资源,因而在IPv6中将扩展报头放在了IPV6报头和上层协议数据单元之间。IPV6可拥有0个、1个或多个的扩展头,扩展报头由前一段的next hdr标识。

IPv6支持的扩展报头有:逐跳选项扩展报头、路由扩展报头、分片扩展报头、目的选项扩展报头、身份验证扩展报头、封装安全有效载荷扩展报头,由于每一个扩展头的内容可以决定是否处理下一个报头,所以扩展报头出现的次序必须遵循一定的原则,一般来说会按照如下的顺序排列:1)IPV6报头 2)逐跳选项扩展报头 3)目的选项扩展报头 4)路由扩展报头 5)分片扩展报头 6)身份认证扩展报头 7)封装安全有效载荷扩展报头 8)目的选项扩展报头 9)上层应用报头,除了目的选项扩展报头外,其他扩展报头只能出现一次,每个扩展头的含义如下:

  • 逐跳选项扩展报头,定义了转发路径中每个节点需要处理的信息
  • 目的选项扩展报头,目的节点需要处理的信息
  • 路由扩展报头,可用于强制数据包经过的特定设备
  • 分片扩展报头,发送大于MTU的包,不同于IPV4,IPV6只在源节点进行数据的分片
  • 身份认证扩展报头,确保数据来源于可信任的源点
  • 封装安全有效载荷扩展报头,可以有效避免在数据传输过程中被窃听、抓取内容等行为

    IPv4与IPv6对比

  • 地址空间,IPv6拥有比IPv4多得多的地址空间,由于IPv6采用了128位的地址,可支持(43亿×43亿×43亿×43亿)个地址,无疑地址空间是IPv6的最大优势。

  • 报文格式,IPv6报头中删除了首部长度、DSCP、标识符、标志、分片偏移、首部检验和的6个域,修改了traffic class(流量分类)、playload length(负载长度)、hop limit(跳数限制)域,对应于IPv4中的协议、全长、存活时间,增加了Flow Label(流标签)域,并且由于IPv6采用了固定长度的报头,IPv6的报文处理效率较IPv4更加高效。
  • 安全性,在IPv4中安全机制往往在应用层实现,而在IPv6中增加了IPsec的加密与认证,可以保证端对端传输的安全。
  • 服务质量的保证,由于IPv6报头中增加了流标签域,可提供QoS的支持,这符合多媒体网络迅速发展的趋势。
  • 移动性的改进,IPv6的地址自动配置协议简化了移动节点的转交地址的分配,从而避免了外地代理的使用,并由于IPv6扩展报头的设计,可解决移动IPv4的三角路由、源地址过滤问题,移动通信处理效率更高。

    IPv6地址

IPv6地址格式

IPv6地址包含128比特,以16位为一组,每组以冒号“:”隔开,可分为8组,每组以4位十六进制方式表示,以下为合法的IPv6地址:“2001:0DB8:02de:0000:0000:0000:0000:0e13”,同时IPv6还支持省略规则:

规则1:每项数字前导0可省略,省略后前导数字仍为0的可继续,上述的地址可等效为:“2001:DB8:2de:0:0:0:0:e13”

规则2:可用双冒号“::”来表示一组或多组的0,但只可出现一次,上述的地址可等效为:"2001:DB8:2de::e13"

IPv6地址分类

IPv6地址可分为三类:

  • 单播(unicast)地址

单播地址标示一个网络接口。协议会把送往地址的数据包投送其接口,IPv6的单播地址包括了未指定地址、环回地址、全球单播地址、链路本地地址、唯一本地地址ULA(Unique Local Address)。

  • 任播(anycast)地址

任播是IPv6特有的数据发送方式,它拥有一组接收节点的地址栏表,但指定为Anycast的数据包,只会发送给距离最近或者发送成本最低的其中一个接收地址。任播地址设计用来给多个主机或者节点提供相同服务时提供冗余功能和负载分担功能,任播地址与单播地址拥有相同的地址空间,主要用于移动IPv6中。

  • 多播(multicast)地址

多播地址也称为组播地址。多播地址被指定为一群不同的接口,发送到多播地址的数据包会被发送到所有的地址。多播地址由皆为1的字节起始,它们的前置为FF00::/8。其中第二个字节的最后四个比特用以表示“范畴”,有node-local(0x1),link-local(0x2),site-local(0x5),organization-local(0x8),global(0xE)。

邻居发现协议

邻居发现协议(Neighbor Discovery Protocol,简写:NDP或ND),是用于替代IPv4中的ARP协议的,用于实现网络层地址与链路层地址之间的映射,NDP实现效率要比ARP高。IPv6邻居发现协议可提供以下功能:1)无服务器的自动配置 2)路由发现 3)地址解析 4)邻居不可达检测 5)链路MTU发现 6)下一跳决定 7)重复地址检测等功能。邻居发现协议定义了5种ICMPv6类型:

  • 路由请求:

当节点不愿意等到下一次周期性的路由器宣告时,可发起一次路由器请求的多播包。正在初始化的节点可使用路由器请求,这样即可得到路由相关参数

  • 路由通告:

路由器可周期性的发送路由器宣告包,这样链路内的节点就可获得相关的路由配置信息,路由器宣告包的跳数限制为255,这样防止非本链路的路由发送路由器宣告包来干扰本链路的通信

  • 邻居请求

用于确定邻居的链路层地址,判断缓存中的链路层地址是否可达,判断链路中是否存在重复的IP地址。这里的跳数限制仍然为255,防止邻居请求包通过路由器

  • 邻居通告

一种情况是应答邻居请求,另一种情况是当节点发生改变时发送多播包给本链路中的节点通知链路层地址改变信息。

  • 重定向

由路由器发送,用于把数据包重定向到两路中链路质量更好的节点