本文重在介绍下一代
IP
的基本知识,介绍了
IPv6
包的形状及采用
IPv4
和
IPv6
的设备与网络如何协同工作,还简要描述了
IPv6
新的安全特性。
地址数量大大增加
IPv4
采用
32
位地址空间,可以提供约
42
亿个地址。虽然数目巨大,但该协议的开发人员当时并未料到因特网发展会如此迅速。虽说网络地址转换(
NAT
)和无类域间路由(
CIDR
)等技术会使
IPv4
的使用寿命延长几年,但迟早
IPv4
会跟不上因特网的发展需求。
IPv6
的
128
位地址空间有望带来大得常人无法想象的空间。那么究竟有多少个地址呢?大约
655,570,793,348,866,943,898,599
个。
IPv6
除了地址数量多得多外,
IPv6
还弃用了
IPv4
采用的熟悉的
“
点分四元组
”
格式(如
193.10.10.154
)。相反,
IPv6
采用十六进制符号,以冒号取代了圆点。
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
地址结构就是一个虚假的例子。
报头结构
虽然
IPv6
报头的字节长度两倍于
IPv4
报头(
40
个字节与
20
个字节),但
IPv6
拥有简化的报头结构。
IPv6
报头有
8
个字段,
IPv4
则有
14
个。
IPv6
丢弃及改用了
IPv4
报头字段中的几个,从而使包处理更有效率。下面比较一下两种报头。
Version(
版本
)
字段在两种协议中没有变化。
IPv6
丢弃了
IPv4
的
Internet Header Length
(因特网报头长度)、
Type of Service
(服务类型)、
Identification
(识别)、
Flags
(标志)、
Fragment Offset
(分片偏移量)和
Header Checksum
(报头校验和)字段。
Total Lenght
(总长度)、
Time to Live
(生存时间)和
Protocol
(协议)字段在
IPv6
中有了新名字,功能稍微进行了重新定义。
IPv4
中的
Option
(选项)字段已从报头中消失,改为
Extension(
扩展
)
功能。
最后,
IPv6
加入了两个新字段:
Traffic Class
(流量类别)和
Flow Label
(流标记)。分别介绍一下
IPv6
包的每个报头字段。
Version
:
Version
字段的长度仍是
4
位,它指明了协议版本号。
Traffic Class
:这个
8
位字段可以为包赋予不同的类别或优先级。它类似
IPv4
的
Type of Service
字段,为差异化服务留有余地。
Flow Label
:
Flow Label
字段是
IPv6
的新增字段。源节点使用这个
20
位字段,为特定序列的包请求特殊处理(效果好于尽力转发)。实时数据传输如语音和视频可以使用
Flow Label
字段以确保
QoS
。
Payload Length
:这个
16
位字段表明了有效载荷长度。与
IPv4
包中的
Total Length
字段不同,这个字段的值并未算上
IPv6
的
40
位报头。计算的只是报头后面的扩展和数据部分的长度。因为该字段长
16
位,所以能表示高达
64KB
的数据有效载荷。如果有效载荷更大,则由超大包(
jumbogram
)扩展部分表示。
Next Header
:这个
8
位字段类似
IPv4
中的
Protocol
字段,但有些差异。在
IPv4
包中,传输层报头如
TCP
或
UDP
始终跟在
IP
报头后面。在
IPv6
中,扩展部分可以插在
IP
报头和传输层报头当中。这类扩展部分包括验证、加密和分片功能。
Next Header
字段表明了传输层报头或扩展部分是否跟在
IPv6
报头后面。
Hop Limit
:这个
8
位代替了
IPv4
中的
TTL
字段。它在经过规定数量的路由段后会将包丢弃,从而防止了包被永远转发。包经过一个路由器,
Hop Limit
字段的值就减少一个。
IPv4
使用了时值(
time value
),每经过一个路由段就从
TTL
字段减去一秒。
IPv6
用段值(
hop value
)换掉了时值。
Source Address
:该字段指明了始发主机的起始地址,其长度为
128
位。
Destination Address
:该字段指明了传输信号的目标地址,其长度为
128
位。网络人员可能会惊讶地发现校验和与分片字段从
IPv6
的报头当中消失了。
IPv4
和
IPv6
的集成
虽然人们希望
IPv4
一下子变成
IPv6
,但两种协议必须协同工作,就算
IPv6
完全取代
IPv4
,那可能也是多年以后的事了。因而,有人提出了过渡方法以确保
IPv4
包不受制于
IPv6
设备,反之亦然。这些方法包括双堆栈和隧道技术。双堆栈方法很简单。
新的
IPv6
设备能够与
IPv4
向后兼容,而
IPv4
设备可以用
IPv4
和
IPv6
协议栈进行编程,以便合适地处理各自的包。采用双堆栈的主机能收发
IPv4
和
IPv6
数据,采用双堆栈的路由器则可以转发任何一种包。隧道方式通过
IPv4
网络在两个
IPv6
域之间传送包。为此,双堆栈节点利用
IPv4
报头封装
IPv6
包。然后该封装包通过
IPv4
网络(隧道)进行路由,直至到达第二个
IPv6
域。第二个节点去掉
IPv4
报头后,对包进行相应处理。
隧道的配置分手工和自动方式。手工配置需要网络管理员在隧道端点定义
IPv4
到
IPv6
的地址映射。虽然
IPv6
的
128
地址通常可以用于隧道任何一端,但隧道入口点的路由器必须手工配置,限定哪些
IPv4
地址可以通过隧道。
自动配置使用与
IPv4
兼容的地址:在
32
位地址的基础上添加
0
以凑足
128
位。如果
IPv6
节点使用兼容地址,隧道入口的路由器只须去掉多余的
0
,就可以显示真实的
IPv4
地址。一旦包通过隧道,隧道出口的节点就会去掉
IPv4
报头,以显示真实的
IPv6
地址。
保护措施
IP
数据报有可能被截取,数据也有可能被读取及篡改。因而,
IPSec
通过验证和加密以保护
IP
包。因为
IPSec
是在
IPv4
问世后一段时间开发的,支持
IPSec
的功能就要结合到
IPv4
包内。相比之下,借助于扩展报头这种设计,
IPv6
能够支持
IPSec
。
验证报头扩展部分能够帮助管理员证实:包的确来自报头内的源地址。这应该有助于防止地址欺骗,地址欺骗是指这种技术:攻击者伪造源地址,使包看上去让人以为它来自合法或可信地址。如果接收者没有相应的密钥还原数据,名为封装安全有效载荷(
ESP
)服务的加密扩展部分就认为包的有效载荷数据无效。加密为保密和数据验证提供了一种措施。管理员可以选择只对包的传输和数据有效载荷或者整个包(包括报头和扩展部分)进行加密。如果整个包进行了加密,就必须给包添加另外的未加密报头,以便能够到达目的地。