IPv6 基于流的处理概述
了解 SRX 系列防火墙如何处理 IPv6 数据包、IPv6 扩展标头和 ICMPv6 数据包。
IPv6 数据包标头和 SRX 系列概述
每个 IPv6 数据包都有一个至少 40 字节(320 位)长的基本数据包标头。IPv6 数据包标头有时也有扩展头,其中包含有关网络设备的补充信息。
对于 IPv6 数据包,流处理按以下方式解析扩展报头和传输层报头:
如果软件遇到 TCP、UDP、ESP、AH 或 ICMPv6 标头,它将解析标头并假定数据包有效负载与指定的协议类型对应。
如果软件遇到逐跳报头、路由和目标报头或分段报头,它将继续解析下一个扩展报头。
如果遇到无下一个报头扩展报头,软件将检测到该数据包是未知协议的数据包(协议等于 0)。
对于其他扩展报头,软件将解析报头并将数据包识别为属于扩展报头指示的协议。
了解 IPv6 数据包标头扩展
IPv6 扩展报头包含网络设备(例如,路由器、交换机和端点主机)用来决定如何定向或处理 IPv6 数据包的补充信息。每个扩展标头的长度是 8 个八位位组的整数倍。这允许后续扩展标头使用 8 个八位位组结构。
扩展标头后跟的任何标头都包含标识扩展标头类型的 Next Header 值。扩展报头可放置在数据包中的 IPv6 报头和上层报头之间。 图 1 显示了带有逐跳选项标头的 IPv6 数据包。同样,IPv6 报头可以携带零个、一个或多个扩展报头,每个报头都由前一个报头的“下一个报头”字段标识。扩展报头始终按 表 1 所示的顺序遵循基本 IPv6 报头:
| 标头名称 |
目的 |
下一个标头值 |
|---|---|---|
| 逐跳选项 |
在到目标主机的路径上指定每个跃点的传递参数。 逐跳选项只能出现在 IPv6 基本报头之后。如果使用它,它应该是第一个扩展标头。它不能出现在另一个扩展标头之后。 |
0 |
| 目标选项 |
为中间目标设备或最终目标主机指定数据包传输参数。当数据包使用此标头时。 |
60 |
| 路由 |
为数据包定义严格源路由和松散源路由。(使用严格的源路由时,每个中间目标设备必须相距一个跃点。使用松散源路由时,中间目标设备可能相距一个或多个跃点) |
43 |
| 片段 |
指定如何执行 IPv6 分段和重装服务。 源节点使用分段扩展标头告知目标节点已分段的数据包的大小,以便目的节点可以重组数据包。 |
44 |
| 身份验证 |
提供身份验证、数据完整性和防重放保护。 |
51 |
| 封装安全性有效负载 |
为封装安全性有效负载 (ESP) 数据包提供数据机密性、数据身份验证和防重放保护。 |
50 |
| 目标 IP 地址 |
标识要将 IPv6 数据包发送到的主机设备或节点上的接口。 目标地址可以出现两次,第一个实例位于源 IP 地址后面的跃点限制之后,第二个实例位于最终扩展报头之后。 |
60 |
有关 IPv6 的信息,请参阅 RFC2460。
也可以看看
了解 SRX 系列防火墙如何处理 ICMPv6 数据包
本主题介绍互联网控制消息协议 (ICMP)、ICMP 消息,以及适用于 SRX 系列防火墙的 Junos OS 如何使用它们。
ICMP 提供了一个框架,用于报告数据包处理错误、用于诊断目的和特定于实施的功能。ICMP 错误消息使一个节点可以通知另一个节点在数据传输过程中出现问题。在定义 IP 版本 6 (IPv6) 时,IP 版本 4 (IPv4) 与 IP 版本 4 (IPv4) 之间的差异太大,需要使用新版本的 ICMP。
每条 ICMPv6 消息前面都有一个 IPv6 报头和零个或多个 IPv6 扩展报头。ICMPv6 报头由紧接在前一个报头中的“下一个报头”值 58 标识。这与用于识别 IPv4 ICMP 的值不同。所有 ICMPv6 错误消息都有 32 位特定于类型的数据,可帮助数据包接收方找到嵌入的调用数据包。
大多数 ICMPv6 数据包具有与普通 IPv6 数据包相同的特征和行为,Junos OS 流模块会通过第一路径和快速路径处理方式处理这些数据包,其处理方式与处理普通 IPv6 数据包的方式相同。 表 2 显示了流模块处理的 ICMPv6 嵌入式数据包类型不同于普通 ICMPv6 数据包。
对于这些数据包,流模块使用从嵌入式 ICMPv6 数据包创建的元组来搜索匹配的会话。它将继续处理数据包,而不修改最大传输单元 (MTU),直到找到匹配的会话,除非它收到接口的 ICMPv6 数据包太大消息。在这种情况下,它会修改该接口的 MTU 大小。如果流模块未找到匹配的会话,或者无法从嵌入式有效负载获取有效的 IPv6 报头,则丢弃数据包。
数据包过大消息是唯一会导致流模块修改接口的 ICMPv6 数据包。
消息 |
意义 |
|---|---|
01-目的地无法访问 |
当数据包由于发送方式问题而无法传送时,拥有一种反馈机制会很有用,该机制可以告知问题源,包括数据包传送失败的原因。对于 IPv6,目标不可达消息可用于此目的。 每条消息都包含一个代码,用于指示导致数据包传输失败的问题的性质。还包括无法传送的全部或部分数据包,以帮助源设备解决问题。 当流模块遇到目标不可达 ICMP 数据包,且其嵌入的数据包标头数据与会话的 5 元组数据匹配时,软件将终止该会话。 |
02-数据包太大 |
当流模块收到面向它的 ICMPv6 Packet Too Big 消息时,流模块会将数据包发送到路由引擎上的 ICMP 协议堆栈,以启动路径最大传输单元(路径 MTU)发现进程。 如果数据包过大消息与设备无关,而是中转数据包,设备会尝试将嵌入的五元组数据与会话进行匹配。
注意:
数据包过大消息是唯一会导致流模块修改接口的 ICMPv6 数据包。 |
03 次超标 |
当流模块收到因超出基本标头逐跳字段中指定的跃点计数而无法传送的数据包时,它会发送此消息以通知数据包的源节点数据包因此被丢弃。 |
04 参数问题 |
当设备发现 IPv6 标头或扩展标头中的某个字段存在问题,导致其无法处理数据包时,软件会丢弃该字段,并将此 ICMPv6 消息发送至数据包的源节点,指示问题的类型和位置。 |