跳到主要内容

Appendix A. Semantics and Usage of the Flow Label Field (附录 A: 流标签字段的语义和使用)

流是从特定源发送到特定 (单播或组播) 目的地的分组序列, 源希望中间路由器对其进行特殊处理.该特殊处理的性质可能通过控制协议 (如资源预留协议) 或通过流的分组本身内的信息 (例如, 在逐跳选项中) 传递给路由器.此类控制协议或选项的细节超出了本文档的范围.

从源到目的地可能有多个活动流, 以及不与任何流关联的流量.流由源地址和非零流标签的组合唯一标识.不属于流的分组携带流标签零.

流标签由流的源节点分配给流.新流标签必须从范围 1 到 FFFFF 十六进制 (伪) 随机和均匀地选择.随机分配的目的是使 Flow Label 字段中的任何位集合都适合作为路由器的哈希键, 以查找与流关联的状态.

属于同一流的所有分组必须使用相同的源地址、目的地址和流标签发送.如果这些分组中的任何一个包含 Hop-by-Hop Options header, 则它们必须全部以相同的 Hop-by-Hop Options header 内容发起 (不包括 Hop-by-Hop Options header 的 Next Header 字段).如果这些分组中的任何一个包含 Routing header, 则它们必须全部以直到并包括 Routing header 的所有扩展报头中的相同内容发起 (不包括 Routing header 中的 Next Header 字段).路由器或目的地被允许但不要求验证这些条件是否满足.如果检测到违规, 应通过 ICMP Parameter Problem 消息 (Code 0, 指向 Flow Label 字段的高位八位字节 (即 IPv6 分组内的偏移量 1)) 向源报告.

沿流路径建立的任何流处理状态的最大生命期必须作为状态建立机制 (例如, 资源预留协议或流建立逐跳选项) 描述的一部分指定.源不得在可能已为该流标签的先前使用建立的任何流处理状态的最大生命期内为新流重新使用流标签.

当节点停止并重新启动 (例如, 由于 "crash (崩溃)") 时, 它必须小心不要使用可能已用于其生命期可能尚未到期的较早流的流标签.这可以通过在稳定存储上记录流标签使用来实现, 以便可以在崩溃后记住它, 或者通过避免使用任何流标签直到任何可能先前建立的流的最大生命期已到期.如果已知节点重新启动的最短时间, 则在开始分配流标签之前, 可以从必要的等待期中扣除该时间.

不要求所有甚至大多数分组属于流, 即携带非零流标签.将此观察放在这里是为了提醒协议设计者和实现者不要另作假设.例如, 设计一个只有在大多数分组属于流时性能才足够的路由器是不明智的, 或者设计一个仅适用于属于流的分组的报头压缩方案也是不明智的.