1. IPv4和IPv6协议栈的比较
(1)IPv6取代IPv4,支持IPv6的动态路由协议都属于IPv6协议(如RIPng、OSPFv3)。
(2)Internet控制消息协议IPv6版(ICMPv6)取代ICMP,它报告错误和其他信息以帮助你诊断不成功的数据包传送。其主要功能有邻居发现、地址解析和路由器发现以及地址自动配置。
(3)邻居发现(Neighbor Discovery, ND)协议取代ARP,它管理相邻IPv6节点间的交互,包括自动配置地址和将一下跃点IPv6地址解析为MAC地址。
(4)多播侦听器发现(Multicast Listener Discover, MLD)协议取代IGMP,它管理IPv6多播组成员身份。
2. IPv6报文格式
(1)扩展首部:
①版本(version):占4位。它指明了协议的版本,对于IPv6该字段为6。
②通信量类(traffic class):占8位。这是为了区分不同的IPv6数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
③流标号(flow label):占20位。所谓“流”是指互联网从指定源点到终点的一系列数据报,所有属于同一个流的数据报都具有同样的流标号。用来标记那些需要IPv6路由器特殊处理(如一种非默认服务质量或实时服务)的信息包顺序。
④有效载荷长度(payload length):占16位,它指明IPv6数据报除了基本首部以外的字节数(所有扩展首部部都算在有效载荷之内)。这个字段最大值是64KB。
⑤下一个首部(next header):占8位。相当于IPv4的协议字段或可选字段。当IPv6数据报没有扩展首部时,“下一个首部”字段的作用和IPv4协议字段一样,指明了基本首部后面的数据应交付IP上面的高层协议(如6或17分别表示交付给TCP或UDP)。如果有扩展首部,其表示的含义因该字段值有所不同,可参考后面的《扩展首部》的内容
⑥跳数限制(hop limit):占8位。用来防止数据报在网络中无限期地存在,相当于IPv4中的TTL。源点在每个数据报发出时即设定某个跳数限制(最大为255跳)。每个路由器在转发数据报时,要先把“跳数限制”字段中的值减1.当跳数限制为0时,该数据报被丢弃。
⑦源地址:占128位。是数据报发送端的IPv6地址。
⑧目的地址:占128位。是数据报的接收端的IPv6地址。
(2)扩展首部:
①类似于IPv4的选项部分。但IPv6将扩展首部留给路径两端的源点和终点来检查,而沿途路由器不检查扩展首部(逐跳选项例外。这有别于IPv4)从而大大提高路由器的处理效率。RFC2460定义了六种扩展首部。每种扩展首部的含义由基本首部中的“下一个首部”的取值来定义。
下一个首部取值 |
含义 |
0 |
表示逐跳选项首部 |
43 |
表示路由选择首部 |
44 |
表示分片首部 |
51 |
表示鉴别首部 |
50 |
表示封装安全有效载荷首部 |
60 |
表示目的选项首部 |
②每一个扩展首部都由若干个字段组成,它们的长度也各不相同。但所有扩展首部的第一个字段都是8位的“下一个首部”字段。此字段的值指出了在该扩展首部后面的字段是什么。当使用多个扩展首部时,应按以上的先后顺序出现。高层首部总是放在最后面。
3. IPv6地址:长度128位
3.1 IPv6寻址及表达式
(1)首选格式:分8段,每段16比特,十六进制表示,并使用冒号等间距分隔。例如。F00D:4598:7304:3210:FEDC:BA98:7654:3210
(2)压缩格式:使用冒号(::)来取代一连串的0,注意在一个地址中只能出现一次双冒号。如可将1080:0:0:0:8:8000:200C:417A表示为1080::8:8000:200C:417A。
(3)内嵌IPv4的IPv6地址:在IPv4和IPv6混合环境中,为实现IPv4和IPv6互通,可将IPv4嵌入到IPv6地址中。格式为:x:x:x:x:x:x:d.d.d.d(注意有6个x),前96比特采用冒分十六进制表示,后32比特使用IPv4的点分十进制表示。如0:0:0:0:0:0:192.168.0.1或者::192.168.0.1的压缩形式
(4)“IPv6地址/前缀长度”表示法。其中的“前缀长度”是一个十进制数,表示该地址前缀。如F00D:4598:7304:3210:FEDC:BA98:7654:3210,其地址前缀是64位,可以表示为F00D:4598:7304:3210:FEDC:BA98:7654:3210/64。
3.2 IPv6的地址类型
(1)单播地址(Unicast):点到点通信时使用的地址。此地址仅标识一个接口,路由器负责把对单播地址发送的数据报送到该接口上。
①全球单播地址:由全球路由前缀(48位) + 子网(16位) + 接口ID(64位)构成。其中全球路由前缀由ISP分配给站点,站点是子网的集合。子网ID表示站点内子网的标符识,由站点管理员分层构建。接口ID用来标识链路上的接口,在同一子网内是唯一的,一般在MAC(48位)中间插入FFFE构成。只要最高3位是001打头的都是全球单播地址,即2xxx::/64和3xxx::/64
②站点本地单播地址:站点本地地址用于不需要全球路由前缀的站点内的寻址。以FEC0开头,格式如FEC0::SubnetID:InterfaceID。站点本地地址应在同一站点内使用。路由器不会转发任何站点本地源地址或目标地址是站点外部地址的数据包。
③链路本地单播地址:自动配置的IPv6地址,该地址总是以FE80开头,接下来的48位都设置为0,后面接64位的接口ID,即FE80::InterfaceID。链路本地地址用于在单个链路上对节点进行寻址。来自或发往链路本地地址的数据包不会被路由器转发。相当于IPv4中的自动私有地址169.254.x.x
(2)多播地址(Multicast)
①一组接口的地址。当数据报的目的地址是多播地址时,路由器尽量将其发送到该组的所有接口上。
②与 IPv4 不同,在IPV6 中没有广播地址,因为这一功能已被多播功能代替。信源利用多播功能只须生成一次报文即可将其分发给多个接收者,多播地址以FF开头。
(3)任播地址(Anycast)
①标识一组接口,它与多播地址的区别在于发送数据报的方法。向任播地址发送数据报并未分发给组内的所有成员,而是发往该地址标识的“最近的”那个接口。
②任播地址是从单播地址空间中分配,可使用单播地址的任何格式。因此,从语法上任播地址与单播地址没有区别。
③但一个单播地址被分配给多于一个接口时,就将其转化为任播地址。被分配具有任播地址的节点必须得到明确的配置,从而知道它是一个任播地址。
3.3 IPv6中特殊的地址
(1)0:0:0:0:0:0:0:0等于::,这是IPv4中的0.0.0.0的等价物。当向DHCPv6服务器请求地址时,源地址就是0:0:0:0:0:0:0:0
(2)0:0:0:0:0:0:0:1等于::1,这是IPv4中127.0.0.1环回地址的等价物
(3)0:0:0:0:0:0:192.168.100.1,这是在IPv6、IPv4混合网络环境中IPv4地址的表现式。
(4)2000::/3,全球单播地址范围,只要最高3位是001就是全球单播地址。
(5)FF80::/10,链路本地单播地址范围
(6)FF00::/8,组播地址范围
(7)3FFF:FFFF::/32和2001:0DB8::32,为示例和文档保留地址
(8)2002::/16用于IPv6到IPv4的转换系统,这种结构允许IPv6包通过IPv4网络进行传输,无需显式地配置隧道。