跳到主要内容

9.1.1 有限功能选项和完整功能选项

9.1.1 有限功能选项和完整功能选项

IP 隧道中 ECN 封装的 limited-functionality option 是在外层 (封装) 头部中设置 not-ECT codepoint, 无论内层 (被封装) 头部中的 ECN 字段取值如何. 使用该选项时, 内层头部中的 ECN 字段在解封装时不改变. 这种方法的缺点是, 即使被封装的数据包 (来自原始 TCP 发送端) 具备 ECN 能力, 该流在使用 IP 隧道的路径部分也没有 ECN 支持. 也就是说, 如果被封装的数据包到达拥塞的 ECN-capable 路由器, 并且路由器可以决定丢弃或标记该数据包作为向端节点的拥塞指示, 则路由器不允许在数据包头部中设置 CE codepoint, 而必须丢弃该数据包.

ECN 封装的 full-functionality option 是, 在封装时, 如果内层头部为 not-ECT 或 ECT, 则将内层头部的 ECN codepoint 复制到外层头部; 如果内层头部的 ECN codepoint 为 CE, 则将外层头部的 ECN codepoint 设置为 ECT(0). 在解封装时, 如果外层头部上设置了 CE codepoint, 则也在内层头部上设置 CE codepoint. 否则, 内层头部上的 ECN codepoint 保持不变. 也就是说, 为完整支持 ECN, 封装和解封装处理包含以下内容: 在隧道入口处, full-functionality option 设置外层头部中的 ECN codepoint. 如果内层头部中的 ECN codepoint 为 not-ECT 或 ECT, 则将其复制到外层头部的 ECN codepoint. 如果内层头部中的 ECN codepoint 为 CE, 则外层头部中的 ECN codepoint 设置为 ECT(0). 在隧道出口处解封装时, 如果外层头部中设置了 CE codepoint, full-functionality option 会在内层头部中设置 CE codepoint. 否则, 不改变内层头部的该字段.

使用 full-functionality option 时, 流可以在可能使用 IP 隧道的路径部分利用 ECN. 从安全角度看, full-functionality option 的缺点是 IP 隧道无法保护流免受隧道内对 IP 头部 ECN bit 的某些修改. 第 18 和第 19 节详细描述了修改 IP 头部中 ECN bit 的潜在危害.

(1) IP tunnels MUST 通过实现 limited-functionality 或 full-functionality option, 修改 IP 隧道端点处 DS field byte 的处理.

(2) 可选地, IP tunnels MAY 使 IP 隧道端点能够就隧道中 ECN 的 limited-functionality 和 full-functionality option 之间的选择进行协商.

使 ECN 可用于 IP 隧道所需的最低要求是 limited-functionality option, 它防止在隧道外层头部中启用 ECN. 对 ECN 的完整支持需要使用 full-functionality option. 如果没有可选机制让隧道端点通过协商在 limited-functionality 或 full-functionality option 之间作出选择, 则隧道端点之间可以预先约定是否支持 limited-functionality 或 full-functionality ECN option.

所有 IP tunnels MUST 实现 limited-functionality option, 并且 SHOULD 支持 full-functionality option.

此外, RECOMMENDED 的做法是, 如果使用 limited-functionality option 的隧道出口点收到外层头部中设置了 CE codepoint 的数据包, 或者如果使用 full-functionality option 但内层头部中设置了 not-ECT codepoint 的隧道出口点收到这种数据包, 则这些数据包 SHOULD 被丢弃. 这是出于向后兼容性, 也是为了确保不会发生对 ECN 字段的未授权修改, 下一节 (9.1.2) 将进一步讨论这一点.