在IPv4选项字段中,一个字段选项是源路由选项,这意味着数据包将始终由路由器路由或不路由。数据包也可以按源路由,这种路由称为源路由。基于此路由有严格源路由和松散源路由两种类型。如果数据包严格遵循源指定的路径,则称为严格源路由。
我的问题是如何在无连接IPv4 的情况下保持严格的路由?
IPv6 中的流标签 避免了数据包的重新排序并保持数据包的顺序流。无连接怎么也在这里发生?
似乎这两种情况都是面向连接的。请帮忙..
在IPv4选项字段中,一个字段选项是源路由选项,这意味着数据包将始终由路由器路由或不路由。数据包也可以按源路由,这种路由称为源路由。基于此路由有严格源路由和松散源路由两种类型。如果数据包严格遵循源指定的路径,则称为严格源路由。
我的问题是如何在无连接IPv4 的情况下保持严格的路由?
IPv6 中的流标签 避免了数据包的重新排序并保持数据包的顺序流。无连接怎么也在这里发生?
似乎这两种情况都是面向连接的。请帮忙..
出于安全原因,IP 源路由选项在很大程度上已被弃用。当支持时,它们允许源主机定义路由路径(部分用于 LSR),而不是每个跃点由数据包的目标地址独立决定。
源路由的更好替代方案是基于策略的路由、隧道,甚至 NAT,具体取决于场景。(您可能会争辩说,源路由是一种隧道,不是由隧道端点定义,而是由源主机定义。)
与 TCP/IP 中的无状态/无连接路由模型无关。源路由选项不是预先为整个流定义的,而是在每个数据包中定义的。
重新 IPv6 流标签:
在改变问题的焦点之前,您应该打开一个新问题。本站尝试整理了大量问答,以供参考。这些越简洁、越集中越好。
根据RFC 3697的流标签:
- IPv6 流标签规范
源使用 IPv6 报头 [IPv6] 中的 20 位流标签字段来标记流的数据包。流标签为零用于指示不属于任何流的数据包。数据包分类器使用流标签、源地址和目标地址字段的三元组来识别特定数据包属于哪个流。数据包由已设置为特定流状态的节点以特定于流的方式处理。具体处理的性质和流动状态建立的方法超出了本规范的范围。
源设置的流标签值必须原封不动地传送到目的节点。
所以是的,这在某种程度上打破了无状态模型。当 5 元组(源/目标地址/L4 端口、L4 协议)匹配时,这是对流的常用假设的改进——这已经是一个有状态的概念。
然而,它与无状态路由完全不同。请注意,RFC 仅定义了流标签是什么以及不可以用它做什么 - 路由器/网关/防火墙没有义务进行任何特殊(有状态)处理。它也可以保持无状态。
您应该将流标签视为简化和标准化的一种手段。它不会改变通常的做法,也不会改变 IPv6 的无状态性。实际上,它是所使用的传输层协议的通用参考,它可能绝对是有状态的。
哪些呢连接或无国籍是什么意思?每个数据包都有一个目的地址。每次路由器看到一个数据包时,它只考虑这个特定的数据包。它在其转发表中查找地址并相应地转发数据包。此数据包不会更改路由器上的任何内容。在非无状态模式下,数据包可能会改变路由器的状态,进而影响后续数据包的转发。
在源路由的情况下,而不是只有一个目标地址,数据包包含一个地址列表。它们被有效地一个接一个地路由。路由器以相同的方式处理数据包,它采用“当前”目的地并路由到它。当数据包到达“当前”目的地时,列表中的下一个目的地变为当前目的地,并且再次路由该数据包。这不会改变任何路由器的内部状态。
换句话说:它是无状态的,因为每个数据包仍然包含完整列表。如果您只在一个数据包中插入列表,然后让路由器记住它并将其用于后续数据包,那么它就不会是无状态的。
在这种情况下,理论并不完全有效。您必须在考虑第 4 层的属性的同时设计第 3 层。第 4 层问题:重新排序会影响 TCP 的性能。TCP 将正确处理重新排序的数据包并恢复原始流。然而,拥塞控制会错误地启动,带宽会下降(我相信现在更好了)。拥塞控制将在 3 个重复的 ACK 后启动,如果重新排序 3 (4?) 个数据包,则会发生这种情况。
现在。一个路由器可以有多个下一跳到达同一个目的地(我称之为条目)。在这种情况下,路由器将选择一个条目并相应地转发数据包。经典示例称为 ECMP(等价多路径路由 (ECMP) 是一种路由策略,其中到单个目的地的数据包转发可以通过具有相同路由优先级/成本的多条最佳路径发生。)。它用于负载平衡 - 在多个路径之间平均分配流量(每个条目对应一个路径)。理论上,您应该能够为每个数据包单独决定选择哪个条目。但是,如果您通过不同路径发送相同 TCP 流的不同数据包,它们将重新排序。正如我所说,非常希望避免这种情况。如何做到这一点。您可以获取数据包中可以识别此类流的多个字段的值(称为流标识符)。您计算这些值的哈希值。生成的散列是一个介于 1 和“条目数”之间的数字,您可以选择具有此编号的条目。这仍然是无状态的。在 IPv4 中,我们通常使用 5 元组流标识符 <源 ip,目的 ip,协议,源端口,目的端口>。是的,这确实意味着路由器需要查看 TCP 标头。在 IPv6 中,为了避免这种情况,端系统在流标签中放置了一些有意义的(给它的)流标识符。流标识符变为<源IP,目标IP,下一个头,流标签>。这仍然是无状态的。在 IPv4 中,我们通常使用 5 元组流标识符 <源 ip,目的 ip,协议,源端口,目的端口>。是的,这确实意味着路由器需要查看 TCP 标头。在 IPv6 中,为了避免这种情况,端系统在流标签中放置了一些有意义的(给它的)流标识符。流标识符变为<源IP,目标IP,下一个头,流标签>。这仍然是无状态的。在 IPv4 中,我们通常使用 5 元组流标识符 <源 ip,目的 ip,协议,源端口,目的端口>。是的,这确实意味着路由器需要查看 TCP 标头。在 IPv6 中,为了避免这种情况,端系统在流标签中放置了一些有意义的(给它的)流标识符。流标识符变为<源IP,目标IP,下一个头,流标签>。
当您的网卡在 CPU 内核之间分发到达的数据包时,类似的恶作剧就会发生在您的网卡中。
在其他情况下,您需要识别同一流的多个数据包。他们中的大多数都属于服务质量。在这种情况下,转发不一定是无状态的。