文章目录
- IPv6
- IPv6 的诞生背景
- 主要优势
- IPv6引进的主要变化
- IPv6数据报的基本首部
- IPv6数据报首部与IPv4数据报首部的对比
- IPv6数据报的拓展首部
- IPv6地址
- IPv6地址空间大小
- IPv6地址的表示方法
- IPv6地址的分类
- 从IPv4向IPv6过渡
- 使用双协议栈
- 使用隧道技术
- 网际控制报文协议 ICMPv6
- ICMPv6报文的封装
- ICMPv6报文的分类
IPv6
IPv6 的诞生背景
IPv4 是在20世纪70年代末期设计的,其IPv4地址的设计存在以下缺陷:
-
IPv4 的设计者最初并没有想到该协议会在全球范围内广泛使用因此将IPv4地址的长度规定为他们认为足够长的32比特,
-
IPv4 地址早期的编址方法(分类的IPv4地址和划分子网的IPv4地址)也不够合理,造成 IPv4 地址资源的浪费。
主要优势
如果没有 网络地址转换 NAT 技术 的广泛应用,IPv4 早已停止发展。然而,NAT 仅仅是为了延长 IPv4 使用寿命而采取的权宜之计,解决 IPv4 地址耗尽的根本措施就是采用具有更大地址空间(IP地址的长度为128比特)的新版本IP,即IPv6。但到目前为止,IPv6还只是草案标准阶段 [RFC2460,RFC4862,RFC4443]
IPv6引进的主要变化
IPv6
(Internet Protocol version 6)是互联网上的下一代 IP 协议,用于解决 IPv4
地址空间有限的问题。
-
更大的地址空间:相比 IPv4 的 32 位地址,IPv6 采用了 128位地址空间,提供了大量可用的 IP 地址。在采用合理编址方法的情况下,在可预见的未来是不会用完的。
-
扩展的地址层次结构:可划分为更多的层次,这样可以更好地反映出因特网的拓扑结构,使得对寻址和路由层次的设计更具有灵活性。
-
灵活的首部格式:与IPv4首部并不兼容。IPv6定义了许多可选的的扩展首部,不仅可提供比IPv4更多的功能,还可以提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扪展首部都不进行处理。
-
改进的选项:IPv6允许分组包含有选项的控制信息,因而可以包含一些新的选项。然而IPv4规定的选项却是固定不变的。
-
允许协议继续扩充:这一点很重要,因为技术总是在不断地发展,而新的应用也会层出不固定不变的。
-
支持即插即用(即自动配置):IPv6支持主机或路由器自动配置IPv6地址及其他网络配置参数。因此IPv6不需要使用DHCP
-
支持资源的预分配:IPv6能为实时音视频等要求保证一定带宽和时延的应用,提供更好的服务质量保证。
IPv6数据报的基本首部
-
所有的扩展首部并不属于IPv6数据报的首部,它们与其后面的数据部分合起来构成有效载荷(payload,也称为净负荷)
-
通信量类字段:长度为8比特,该字段用来区分不同的IPv6数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
-
流标号字段:长度为20比特。IPv6提出了流的抽象概念。
“流”就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送),而在这个“流”所经过的路径上的所有路由器都保证指明的服务质量。
所有属于同一个流的IPv6数据报都具有同样的流标号。换句话说,流标号用于资源分配。
流标号对于实时音视频数据的传送特别有用,但对于传统的非实时数据,流标号则没有用处,把流标号字段的值置为0即可。
-
有效载荷长度字段:长度为16比特,它指明IPv6数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量。该字段以字节为单位,最大取值为 65535,IPv6数据报基本首部后面的有效载荷的最大长度为 65535 字节。
-
下一个首部字段:长度为8比特。该字段相当于IPv4数据报首部中的协议字段或可选字段。
当IPv6数据报没有扩展首部时,该字段的作用与IPv4的协议字段一样,它的值指出了IPv6数据报基本首部后面的数据是何种协议数据单元PDU。如取值为
6
时,则数据载荷部分是TCP
报文段;取值为17
,则有效载荷部分是UDP
用户数据报。当 IPv6 数据报基本首部后面带有扩展首部时,该字段的值就标识后面第一个扩展首部的类型。
-
跳数限制字段:长度为8比特。该字段用来防止IPv6数据报在因特网中永久兜圈。
源点在每个 IPv6 数据报发出时即设定某个跳数限制(最大255跳)。每个路由器在转发 IPv6 数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为 0 时,就把这个 IPv6 数据报丢弃(即不转发)。
该字段的作用与IPv4数据报首部中的生存时间TTL字段完全一样。IPv6将名称改为跳数限制后可使名称与作用更加一致。
-
源地址字段和目的地址字段:长度都为128比特。分别用来填写IPv6数据报的发送端的IPv6地址和接收端的IPv6地址。
IPv6数据报首部与IPv4数据报首部的对比
-
IPv6将IPv4数据报首部中不必要的功能取消了,这使得IPv6数据报基本首部中的字段数量减少到只有8个
-
由于IPv6地址的长度扩展到了128比特,因此使得IPv6数据报基本首部的长度反而增大到了40字节,比IPv4数据报首部固定部分的长度(20字节)增大了20字节。
-
取消了首部长度字段,IPv6数据报的首部长度是固定的40字节。
-
取消了区分服务(服务类型)字段,IPv6数据报首部中的通信量类和流标号字段实现了区分服务字段的功能。
-
取消了总长度字段,改用有效载荷长度字段。IPv6数据报的首部长度是固定的40字节,只有其后面的有效载荷长度是可变的。
-
取消了标识、标志和片偏移字段,这些功能已包含在IPv6数据报的分片扩展首部中
-
把生存时间TTL字段改称为跳数限制字段,这样名称与作用更加一致。
-
取消了协议字段,改用下一个首部字段。
-
取消了首部检验和字段,这样可以加快路由器处理IPv6数据报的速度。
-
取消了选项字段,改用扩展首部来实现选项功能。
IPv6数据报的拓展首部
IPv4数据报如果在其首部中使用了选项字段,则在数据报的整个传送路径中的全部路由器,都要对选项字段进行检查,这就降低了路由器处理数据报的速度。
实际上,在路径中的路由器对很多选项是不需要检查的。因此,为了提高路由器对数据报的处理效率,IPv6把原来IPv4首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理,而数据报传送路径中的所有路由器都不处理这些扩展首部(除逐跳选项扩展首部)。
[RFC 2460]
中定义了以下六种扩展首部:
-
逐跳选项
-
路由选择
-
分片
-
鉴别
-
封装安全有效载荷
-
目的站选项
每一个扩展首部都由若干个字段组成,它们的长度也各不相同。所有扩展首部中的第一个字段,都是8比特的下一个首部字段。该字段的值指出在该扩展首部后面是何种扩展首部。当使用多个扩展首部时,应按以上的先后顺序出现。
IPv6地址
IPv6地址空间大小
在IPv6中,每个地址占128个比特。IPv6地址空间大小为 2 128 ( 大于 3.4 × 1 0 38 ) 2^{128} (大于 3.4 \times 10^{38}) 2128(大于3.4×1038)
如果整个地球表面(包括陆地和水面)都覆盖着需要IPv6地址的通信设备,那么IPv6允许每平方米拥有 7 × 1 0 23 7\times10^{23} 7×1023 个IPv6地址。
如果IPv6地址分配速率是每微秒分配100万个IPv6地址,则需要 1 0 19 10^{19} 1019年的时间才能将所有可能的地址分配完毕。
很显然,这样巨大的地址空间在采用合理编址方法的情况下,在可预见的未来是不会用完的。
IPv6地址的表示方法
IPv6 地址的表示形式是将每16比特分为1组,以 8组16进制数 表示,每组使用冒号(:
)分隔(冒号十六进制记法),例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334
(不区分大小写)。
为了简化地址表示,IPv6还引入了一些缩写规则,如 “左侧零”省略 和 “连续零”压缩 。
-
“左侧零”省略:指两个冒号间的十六进制数中最前面的一串0可以省略不写
-
“连续零”压缩:指一连串连续的 0 可以用一对冒号取代,即连续的 0 组简写为“
::
”,例如2001:db8::1
。 -
在一个IPv6地址中只能使用一次“连续零”压缩,否则会导致歧义。
使用多次“连续零”压缩:
只使用一次“连续零”压缩,并使用“左侧零”省略:
冒号十六进制记法还可结合点分十进制的后缀。在IPv4向IPv6过渡阶段非常有用:
CIDR的斜线表示法在IPv6中仍然可用:
IPv6地址的分类
IPv6数据报的目的地址有三种基本类型:
-
单播(unicast):传统的点对点通信
-
多播(multicast):一点对多点的通信。数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而将广播看作多播的一个特例。
-
任播(anycast):这是IPv6新增的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个
[RFC 4291]
对IPv6地址进行了分类:
-
未指明地址
-
128个比特为“全0”的地址,可缩写为两个冒号 “
::
” -
该地址不能用作目的地址,只能用于还有配置到一个标准IPv6地址的主机用作源地址
-
未指明地址仅有一个
-
-
环回地址
-
最低比特为1,其余127个比特为“全0”,即
0:0:0:0:0:0:0:1
,可缩写为::1
。 -
该地址的作用与IPv4的环回地址相同。
-
IPv6的环回地址只有一个
-
-
多播地址
-
最高8比特为“全1”的地址,可记为
FF00::/8
. -
IPv6多播地址的功能与IPv4多播地址相同。
-
这类地址占IPv6地址空间的1/256。
-
-
本地链路单播地址
-
最高 10 比特为
1111111010
的地址,可记为FE80::/10
。 -
连接在这种网络上的主机即使用户网络没有连接到因特网,但仍然可以使用TCP/IP协议。都可以使用本地链路单播地址进行通信,但不能和因特网上的其他主机通信。
-
这类地址占IPv6地址空间的1/1024。
-
-
全球单播地址
-
全球单播地址是使用得最多的一类地址。
-
IPv6全球单播地址采用三级结构,这是为了使路由器可以更快地查找路由。
-
从IPv4向IPv6过渡
因特网上使用IPv4的路由器的数量太大,要让所有路由器都改用IPv6并不能一蹴而就。因此,从IPv4转变到IPv6只能采用逐步演进的办法。
另外,新部署的IPv6系统必须能够向后兼容,也就是IPv6系统必须能够接收和转发IPv4数据报,并且能够为IPv4数据报选择路由
有两种由IPv4向IPv6过渡的策略:使用双协议栈、使用隧道技术
相关文档为 [RFC2473,RFC2529,RFC 2893,RFC 3056,RFC 4038,RFC 4213]
。
使用双协议栈
双协议栈(Dual Stack)是指在完全过渡到IPv6之前,使一部分主机或路由器装有IPv4和IPv6两套协议栈。
双协议栈主机或路由器既可以和IPv6系统通信,又可以和IPv4系统通信:
-
双协议栈主机或路由器记为 IPv6/IPv4,表明它具有一个IPv6地址和一个IPv4地址
-
双协议栈主机在与IPv6主机通信时采用IPv6地址,而与IPv4主机通信时采用IPv4地址。
双协议栈主机通过域名系统DNS查询目的主机采用的IP地址:
-
若
DNS
返回的是IPv4
地址,则双协议栈的源主机就使用IPv4
地址 -
若
DNS
返回的是IPv6
地址,则双协议栈的源主机就使用IPv6
地址
IPv6数据报中的流标号字段无法转换为IPv4数据报中的内容,IPv4数据报转换为IPv6数据报时也无法将流标号恢复,这种信息的损失是使用首部转换方法所不能避免的。
使用隧道技术
隧道技术(Tunneling)的核心思想是:
-
当IPv6数据报要进入IPv4网络时,将IPv6数据报重新封装成IPv4数据报,即整个IPv6数据报成为IPv4数据报的数据载荷。
-
封装有IPv6数据报的IPv4数据报在IPv4网络中传输。
-
当IPv4数据报要离开IPv4网络时,再将其数据载荷(即原来的IPv6数据报)取出并转发到IPv6网络。
要使双协议栈路由器 R4 知道 IPv4 数据报的数据载荷是 IPv6 数据报,则IPv4数据报首部中协议字段的值必须设置为41.
使用隧道技术就好像在路由器 R1 和 R4 之间,为 IPv6 数据报的传送打通了一条专用的隧道。
网际控制报文协议 ICMPv6
由于IPv6与IPv4一样,都不确保数据报的可靠交付,因此IPv6也需要使用 网际控制报文协议ICMP 来向发送IPv6数据报的源主机反馈一些差错信息,相应的 ICMP
版本为 ICMPv6
。
ICMPv6
比 ICMPv4
要复杂得多,它 合并了原来的地址解析协议ARP 和 网际控制报文协议ICMP 的功能。因此与 IPv6
配套使用的网际层协议就只有 ICMPv6
这一个协议。
ICMPv6报文的封装
ICMPv6
报文需要封装成 IPv6
数据报进行发送
若 IPv6
数据报的有效载荷中,包含有扩展首部,在扩展首部之后封装的是ICMPV6报文,则在ICMPv6 报文前面的那个扩展首部中的下一个首部字段的值必须设置为58,表明该扩展首部后面是 ICMPv6 报文
ICMPv6报文的分类
ICMPv6
报文可被用来报告差错、获取信息、探测邻站 或 管理多播通信。
在对 ICMPv6
报文进行分类时,不同的 RFC
文档使用了不同的策略:
在 [RFC 2463]
中定义了六种类型的 ICMPv6
报文
在 [RFC 2461]
中定义了五种类型的 ICMPv6
报文
在 [RFC 2710]
中定义了三种类型的 ICMPv6
报文