IPv6 协议介绍
为什么要用 ipv6?
-
IPv4地址资源的紧张限制了Internet的进一步发展
-
NAT(网络地址转换)、CIDR(无类域间路由)、VLSM(可变长了网掩码)等技术的使用仅仅暂时缓解IPv4地址紧张,但不是根本解决办法。
-
新技术的出现对IP协议提出了更多的需求
IPv6 特点
-
近乎无限的地址空间
-
更简洁的报文头部
-
内置的安全性
-
更好的QoS支持
-
更好的移动性
-
编址层次等级
编址层次等级
| Internet地址注册机构 | 提供商 | 组织机构 | 站点 | 主机 |
优势:便于地址聚合
IPv6 数据包结构
这里不放图,可参考阅读:IPv6包头、IPv4与IPv6包头结构比较
IPv4 包头结构说明
Version——指明了 IP 的版本号是 4。这个字段的长度是4位。
Internet Header Length——指明了在 IPv4 报头中以4字节为单位的块的数目。这个字段的长度是 4 位。因为一个 IPv4 报头的最小长度是 20 字节,所以 Internet Header Length (IHL) 字段的最小值是 5 。IPv4 选项可以通过增加 4 字节来扩展最小的 IPv4 报头的长度。如果一个 IPv4 选项没有用完 IPv4 选项字段中所有的 4 个字节,剩下的字节将填充为 0,以使得整个 IPv4 报头保持 32 位(4 字节)的整数倍。当这个字段为最大值 0xF 时,IPv4 报头包括了选项的最大长度是 60 字节(15×4)
Type of Service——指明了这个包在 IPv4 网络上通过路由器传输时,希望得到的服务类型。这个字段的长度是 8 位,它包含了优先、延迟、吞吐量和可靠性特征。
Total Length——指明了 IPv4 包的全部长度(IPv4 报头和 IPv4 有效载荷)并且不包括链路层的帧。这个字段的长度是 16 位,它标明了 IPv4 包的最大长度是 65,535 字节。
Identification——识别特殊的 IPv4 包。这个字段的长度是 16 位。识别字段在 IPv4 包的远端是可选择的。如果 IPv4 包是分割开的,那么所有分片中将保留识别字段以便目的节点能够从新组装这些分片。
Flags——标志用在分割处理时。这个字段的长度是 3 位,然而只有其中两位为当前使用所定义。有两个标志——一个指明了IPv4包是否被分割,另一个指明了是否还有更多的分片在当前帧之后。
Fragment Offset——指明了分片相对于最初的 IPv4 有效载荷中偏移的位置。这个字段的长度是 13 位。
Time to Live——指明了 IPv4 包在被丢弃之前能够通过的最大的连接数。这个字段的长度是 8 位。生存期字段(TTL)被用来作为时间计数器,根据消耗的 TTL 一个 IPv4 路由器确定了IPv4包向前传送要求的必要时间(秒)。现代路由器几乎转发 IPv4 包的时间不到一秒,根据 RFC 791 消耗TTL不到一秒是必要的。因此,TTL 成为一个最大连接计数器,其中的值由发送节点设置。当TTL等于 0 时一个 ICMP 超时(Time Expired)报文将被传送到源 IPv4 地址,并且这个包会被丢弃。
Protocol——指明了高层协议。这个字段是 8 位。例如,TCP 使用的协议为 6,UDP 使用的协议为 17,ICMP 使用的协议是 1。Protocol 字段是用来把一个 IPv4 包进行多路分解到高层协议。
Header Checksum——提供了只是对于 IPv4 头部的效验。这个字段的长度是 16 位。IPv4 的有效载荷不包括这个效验计算作为其有效载荷,它通常是包含自己的效验。每一个 IPv4 节点接受到 IPv4 包检查其 IPv4 头部效验,如果效验检查失败就这个 IPv4 包静静地丢弃。当一个路由器向前传送一个 IPv4 包就一定会消耗 TTL。因此在源站和目的站之间的每一跳,头部效验都会被从新计算一次。
Source Address——保存源主机的 IPv4 地址。这个字段的长度是 32 位。
Destination Address——保存目的端主机的 IPv4 地址。这个字段的长度是 32。
Options——保存一个或者更多的 IPv4 选项。这个字段的长度是 32 位的倍数。如果 IPv4 的选项没有用到 32 位,必须将其填充到 32 位,以保持 IPv4 头是 4 字节块的整数倍,以便 Internet Header Length 字段对其进行说明。
IPv6报头结构说明
Version——4 位用来指明 IP 的版本号其值是 6。
Traffic Class——指明了 IPv6 包的类型或者优先级。这个字段的长度是 8 位。流量类型字段提供了与 IPv4 服务类型字段中相似的功能。在 RFC 2460 中,对流量类型字段中的值并没有作定义。然而,对一个 IPv6 的执行,有必要提供一种方法来为应用层协议指定流量类型字段的值。
Flow Label——指明数据包是属于源站和目的站之间特殊的包序列,要求中间路由器进行特殊的处理。这个字段的长度是 20 位。流标志用于非默认性质的连接服务,例如有实时性需要的数据(声音和图像)。对于默认路由器处理,流标志被设置成 0。在一个源站和目的站之间能有多种流量,由非零流标志区分。
Payload Length——指明 IPv6 有效载荷的长度。这个字段的长度是 16 位。有效流量载荷字段包括了扩展头和上层 PDU。通过 16 位,一个 IPv6 的有效载荷最多有 65535 字节可以表示。对于有效载荷长度超过 65535 字节的,有效载荷字段长度字段就被设置成 0,并且 Jumbo Payload 选项被用在逐跳选项(Hop-by-Hop Options)扩展头中。
Next Header——指明了第一个扩展报头或者高层 UDP (例如 TCP,UDP 或者 ICMPv6 )中的协议。这个字段的长度是 8 位。在标识一个在网络层之上的高层协议时,这个字段的值与 IPv4 协议字段中的值相同。
Hop Limit——指明了 IPv6 包在被丢弃之前可以经过的最大的连接数。跳数限制相似于 IPv4 的 TTL 字段,除了在 TTL 中没有历史的关连相对于包在路由器中排队的总计时间(秒)。当跳数等于 0 时,一个 ICMPv6 超时报文将被传送回源站点并且这包会被丢弃。
Source Address——存储源端主机的 IPv6 地址。这个字段的长度是 128 位。
Destination Address——存储当前目的站主机 IPv6 地址。这个字段的长度是 128 位。在大多数情况下,目的站地址是最终的目的站的地址。然而,如果一个路由扩展头存在,在源路由列表中目的地址也许被设置成下一个路由器接口。
IPv6报文格式
| IPv6包头 | 拓展头部 | 上层协议数据单元 |
|<------- 有效载荷 ------->|
|<---------- IPv6 数据包 ----------->|
IPv6拓展报头
主要的扩展报头 | 下一报头的值 |
---|---|
逐跳可选项扩展头 | 0 |
目的地可选项扩展头 | 60 |
路由扩展头 | 43 |
分段扩展头 | 44 |
验证扩展头 | 51 |
封装安全净载扩展头 | 50 |
上层协议头部 | TCP—6 UDP—17 ICMPv6—58 OSPF—89 |
没有下一报头 | 59 |
这里可补一下OSI参考模型的相关知识。
加载报头的顺序
- IPv6报头
- 逐跳可选项扩展头
- 目的地可选项扩展头 (当存在路由报头时,用于中间目标)
- 路由扩展头
- 分段扩展头
- 验证扩展头
- 封装安全净载扩展头
- 目标选项报头(用于最终目标—只有最后的目的节点必须处理这个报头)
- 上层协议报头
IPv6 地址技术
ipv6 地址表示
2001:0410:0000:0001:0000:0000:0000:45ff
128位(二进制) = 32位(十六进制)
压缩表示
2001:0
410:000
0:000
1:000
0:000
0:000
0:45ff
压缩前导的 0
2001:410:0:1:0:0:0:45ff
::
压缩和压缩前导 0
可以同时使用
2001:410:0:1::45ff
IPv6地址 = 地址前缀 + 接口标识
2001:da8:207::8207/64
地址前缀部分
| 10 bite | 38 bite | 16 bite | 64 bite |
| 1111111011 | 0 | Subnet ID | Interface ID |
IPv4 地址分类
A类、B类、C类、D类、E类。
单播地址:A、B、C类地址
播地址:D类
保留地址:E类
广播地址:255.255.255.255等
IPv6 地址分类
单播地址(Unicast Address)
组播地址(Multicast Address)
任播地址(Anycast Address)
特殊地址
地址类型 | 二进制前缀 | IPv6标识 |
---|---|---|
未指定 | 00…0(128 bits) | ::/128 |
环回地址 | 00…1 (128bits) | ::1/128 |
组播 | 1111 1111 | FF00::/8 |
链路本地地址 | 1111 1110 10 | FE80::/10 |
站点本地地址 | 1111 1110 11 | FEC0::/10 |
全局单播 | (其他) |
链路本地地址:用于直连设备的通信,不需要手动配置,自动生成。
站点本地地址:用于永远不会与全球IPV6因特网进行通信的设备,比如:打印机、内部网服务器、网络交换机等
全球可聚合单播地址
范围前缀为2000~3FFF
2001::/64 首批使用的可聚合全球单薄地址
2002::/64 IPv4 网络中建立 IPv4 隧道的地址
链路本地单播地址
FE80::/64
只能在连接同一本地链路的节点之间使用
无状态自动地址配置–接口 ID 生成
将 48 比特的 MAC 地址转化为 64 比特的接口 ID
MAC 地址的唯一性保证了接口 ID 的唯一性
设备自动生成,不需人为干预
第七个比特,U/L比特
MAC 地址左右分开,中间插入
FFFE
,第七位取反
站点本地单播地址
类似于 IPv4 中的私有地址。
FEC0::/48
站点本地地址不是自动生成的,可以分配给站点内的任何节点
其它单播地址
IPv4 兼容地址---- ::w.x.y.z
IPv4 映射地址---- ::FFFF:W.X.Y.Z
6to4 地址----用于在 IPv4 网络中建立 6to4 隧道
IPv6 组播地址
| 8 | 4 | 4 | 112 |
|1111 1111 | 标志 | 范围 | 组 ID |
FF 0 2 XXXX
标志(flag): 000
0/1,0 永久,1 临时。即0000
或0001
范围:1 节点本地范围,2 链路本地范围,等等。即0001
或0002
组 ID:只定义了低 32 位,剩余 80 位置 0。
例:
FF02::1 表示所有的节点
FF02::2 表示所有的路由器
FF02::5 表示所有 OSPFv3 路由器
IPv6地址配置方式
手动配置
RouterX(config)#ipv6 unicast-routing # 启用 IPv6 单播路由功能
RouterX(config-if)#ipv6 address ipv6prefix/prefix-length # 配置 IPv6 地址(包括接口 ID)
RouterX(config-if)#ipv6 address 2001:DB8:D1A5:C900::1/64 # eg.
RouterX#show ipv6 interface e0/0
IPv6 体系中的关键协议
ICMPv6
在 IPv6 中,ICMPv6 实现 IPv4 中 ICMP、ARP 和 IGMP 协议的功能。
ICMPv6 在 IPv6 报文头部的下一报头的值为 58。
在 IPv6 体系中取消了 ARP 协议。
|<----------32位---------->|
| 类型 | 代码 | 校验和 |
| 可变字节 依赖于ICMPv6的类型 |
ICMPv6报文分类
-
差错报文
类型字段最高位为 0,类型码取值 0 ~ 127。目标不可达、数据包超长、超时、参数问题
-
信息报文
类型字段最高位为 1, —类型码取值 128 ~ 255。回送请求报文、回送应答报文
IPv6 用 ICMPv6 发现 PMTU(Path MTU)
NDP
Neighbor Discovery Protocol 协议的主要功能:
- 路由器发现
- 前缀发现
- 参数发现 (如链路的 MTU 和跳数限制等)
- 地址自动配置
- 地址解析
- 下一跳确定
- 邻居不可达检测
- 地址冲突检测
- 重定向
NDP 使用了五种 ICMPv6 的报文:
Router Solicitation(RS) | 路由器请求 |
Router Advertisement(RA) | 路由器通告 |
Neighbor Solicitation(NS) | 邻居请求 |
Neighbor Advertisement(NA) | 邻居通告 |
Redirect | 重定向 |
RS 消息由路由器或主机发起,用来请求路由器发送一个 RA 消息。ICMPv6消息类型码 133 代码 0,源地址为设备接口所分配的 IPv6 地址或 : : (全 0,接口没有IPv6地址时),目的地址为 FF02::2。
RA 消息由路由器发起,用来通告路由器的存在和链路细节的参数,如链路前缀、链路 MTU,以及跳数限制等。可以周期性发送(默认 200 秒),也可以用来答复 RS 消息。ICMPv6 消息类型码 134,代码 0。源地址为出站接口的链路本地地址(FE80 开头)。如为周期性发送,则目的地址为 FF02::1。 如用来答复 RS 消息,则目的地址为发送 RS 消息的设备的链路本地地址。
在路由器发送的RA消息中携带 M、O 标记。M 标记:管理标记。当 M 标志位为 1 时,表示链路上的 IPv6 主机采用 DHCPv6 方式获取 IPv6 地址/前缀。O 标记:其他配置标记。当 O 标志位为 1 时,表示链路上的 IPv6 主机采用 DHCPv6 方式获取除 IPv6 地址/前缀以外的其他网络配置参数。
MO标记 | 含义 |
---|---|
00 | 不具有 DHCPv6 基础结构的网络。主机使用路由器通告获取 IPv6 地址,使用其他方式(如手动配置)来配置其他参数。 |
01 | 无状态 DHCPv6。DHCPv6 不用于分配地址,仅用来分配其他配置参数。相邻路由器配置为通告非链路本地地址前缀,IPv6 主机从中派生出无状态地址。 |
10 | 不太可能。因为 IPv6 主机通常需要使用其他参数(如 DNS 服务器的 IPv6 地址)。此时 DHCPv6 用于地址配置,但不用于其他设置。 |
11 | 有状态 DHCPv6。DHCPv6 用于这两种地址(链路本地地址和其他非链路本地地址)和其他参数设置。 |
NS 消息由主机发起,用来请求另一台主机的链路层地址,也用来实现诸如地址冲突检测和邻居不可达检测的功能。ICMPv6消息类型码 135,代码 0。源地址为始发设备接口所分配的 IPv6 地址或: : (全0,为地址冲突检测而发送 NS 消息,目的地址为是对应于目标地址的一个被请求节点的多播地址。
NA 消息由主机发起,用来响应另一台主机的 NS 消息。如果一台主机改变了它的链路层地址,那么它可以发送一个未经请求的 NA 报文来通告这个新地址。ICMPv6 消息类型码 136,代码 0。
Redirect 与 ICMPv4 中的重定向报文相同,ICMPv6 消息类型码 137,代码 0。
无状态地址自动配置
| 前缀 | 接口 ID |
-
前缀一般由路由器向主机发送,为路由器接口的前缀
-
64 位接口 ID 由主机 MAC 地址自动生成
# R1 配置 IPv6
R1(config)#ipv6 unicast-routing
R1(config-if)#ipv6 address 2001:1:1:1::1/64
R1#debug ipv6 nd
# R2 启动无状态 IPv6
R2(config)#ipv6 unicast-routing
R2(config-if)#ipv6 address autoconfig
R1#ipv6 nd ra suppress all
R2(config)#default int e0/0
# 置位 M 位为 1
R1(config-if)#ipv6 nd managed-config-flag
# 置位 O 位为 1
R1(config-if)#ipv6 nd other-config-flag
DAD 冲突地址检测
Duplicate Address Detection 确保地址的唯一性。
冲突地址检测 – Solicited-Node 组播地址
前缀 FF02:0:0:0:0:1:FF 104位固定
接口 ID 的后 24 位:XX:XXXX
FF02:0:0:0:0:1:FFXX:XXXX
DHCPv6 与 DHCPv4 对比的优势
- DHCPv6 Client 一经启动,就有了一个链路本地地址, DHCPv6 Client 可以利用它与 DHCPv6 Server 或 DHCPv6 Relay 通信
- DHCPv6 Client 用组播地址与 DHCPv6 Server 通信,而不是广播地址
- IPv6 允许每个接口使用多个 IPv6 地址,所以 DHCPv6 在请求时可以提供多个地址
- 没有 BOOTP 兼容性要求
- 可以使用information-request/reply消息完成简单配置
- Client可以发送多个互不相关的请求给同一或不同的DHCPv6 Server
- DHCPv6 Server使用reconfigure消息通知Client重新配置网络参数
DHCPv6 与 DHCPv4 报文类型的对比
DHCPv6报文类型 | DHCPv4报文类型 |
---|---|
Solicit (1) | DHCP DISCOVER |
Advertise (2) | DHCP OFFER |
Request (3), Renew (5), Rebind (6) | DHCP REQUEST |
Reply (7) | DHCP ACK / DHCP NAK |
Release (8) | DHCP RELEASE |
Information-Request (11) | DHCP INFORM |
Decline (9) | DHCP DECLINE |
Confirm (4) | NONE |
Reconfigure (10) | DHCP FORCE RENEW |
Relay-Forw (12), Relay-Reply (13) | NONE |
DHCPv6 的组播地址
FF02::1:2(All DHCP Relay Agents and Servers):所有 DHCPv6 服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有 DHCPv6 服务器和中继代理都是该组的成员。
FF05::1:3(All DHCP Servers):所有 DHCPv6 服务器组播地址,这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有 DHCPv6 服务器都是此组的成员。
DHCPv6 的端口号
客户端监听 UDP 546,服务器、中继代理监听 UDP 547
DHCPv6 DUID
每个服务器或客户端有且只有一个唯一标识符(DHCP Unique Identifier),服务器使用 DUID 来识别不同的客户端,客户端则使用 DUID 来识别服务器。
R1#show ipv6 dhcp # 查看当前设备的 DUID
IAID
身份关联(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关 IPv6 地址的结构。每个 IA 包括一个 IAID (Identity Association Identifier) 和相关联的配置信息。
客户端必须为它的每一个要通过服务器获取 IPv6 地址的接口关联至少一个 IA。客户端用给接口关联的 IA 来从服务器获取配置信息。每个 IA 必须明确关联到一个接口。
IA 的身份由 IAID 唯一确定,同一个客户端的 IAID 不能出现重复。
IAID 不应因为设备的重启等因素发生丢失或改变。IA 中的配置信息由一个或多个 IPv6 地址以及 T1 和 T2 生存期组成。IA 中的每个地址都有合法生存期和首选生存期。
一个接口至少关联一个 IA,一个 IA 可以包含一个或多个地址信息。
IA_NA & IA_TA
IA_NA:Identity association for non-temporary addresses 非临时地址的身份关联
IA_TA:Identity association for temporary addresses 临时地址的身份关联
IA_NA 有续租机制,也有 T1 和 T2;IA_TA 没有续租机制
DHCPv6 分配地址的过程(有状态 DHCPv6)
- 四步方式(网络中有多台或未知数量的 DHCPv6 服务器)
- 两步方式(网络中只有一台DHCPv6服务器)
DHCPv6 地址续租
有效生成时间 48 小时: Valid life time 48 x 3600 s
首选生成时间 24 小时: Default life time 24 x 3600 s
T1 为首选生成时间的 50% ,T2 为首选生成时间的 80%。
在 T1 时间点 发送 Renew 报文续租。如续租失败,则等到 T2 时间点,发送 Rebind 报文,若无回应,则继续发送 Rebind 直到 Valid life time 到期。
DHCPv6 地址释放
Client 在发送 Release 消息后,被释放的地址就不能再使用。
DHCPv6 地址冲突
Client 发送 Decline 给 Server
DHCPv6 PD
DHCPv6 Prefix Delegation, Cisco 公司提出的一种前缀分配机制。