跳到主要内容

5.1. Ordering of Flow Specifications (Flow Specification 的排序)

5.1. Ordering of Flow Specifications (Flow Specification 的排序)

多个 Flow Specification 可能匹配特定的流量流。因此, 有必要定义 Flow Specification 的匹配顺序以及应用于特定流量流的操作顺序。此排序函数的特性是它不依赖于 Flow Specification 通过 BGP 的到达顺序, 因此在网络中是一致的。

两个 Flow Specification 的相对顺序通过比较它们各自的组件来确定。算法从比较 Flow Specification 的最左边的组件 (最低的组件类型值) 开始。如果类型不同, 具有最低数值类型值的 Flow Specification 具有更高的优先级 (因此将在之前匹配), 而不是不包含该组件类型的 Flow Specification。如果组件类型相同, 则执行特定于类型的比较 (见下文)。如果类型相等, 算法继续下一个组件。

对于 IP 前缀值 (IP 目标或源前缀), 如果要比较的两个前缀中的一个是另一个的更具体前缀, 则更具体的前缀具有更高的优先级。否则, 具有最低 IP 值的前缀具有更高的优先级。

对于所有其他组件类型, 除非另有说明, 比较是通过使用 [ISO_IEC_9899] 定义的 memcmp() 函数将组件数据作为二进制字符串进行比较来执行的。对于长度相等的字符串, 最低的字符串 (memcmp) 具有更高的优先级。对于不同长度的字符串, 比较公共前缀。如果公共前缀不相等, 具有最低前缀的字符串具有更高的优先级。如果公共前缀相等, 则认为较长的字符串比较短的字符串具有更高的优先级。

附录 A 中的代码显示了比较算法的 Python3 实现。完整代码已使用 Python 3.6.3 测试, 可以从 <https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp> 获取。