正常的数据包是否合并为巨型数据包?

Fred Phillips 05/13/2018. 1 answers, 0 views
ethernet

路由器是否将多个小型帧组合成一个巨型帧,然后在另一端再次拆分它们? 我知道大多数情况下这样做是没有意义的,因为您会等待第二个数据包加入延迟,但如果您有QOS积压,这可能是有道理的。 或者巨型帧总是结束?

1 Answers


mere3ortal 04/01/2018.

让我看看我是否正确理解你的方案:

  • 在发送者A和接收者B之间的路径中存在路由器R(即,R不一定是来自A的第一跳路由器)
  • 此路由器会看到从A发送到B的IP数据报的多个片段
  • 来自R的输出接口上存在拥塞(即“QoS积压”),从而导致这些片段坐在队列中等待传输
  • R上的出站接口能够使用巨型帧
  • R上的实现检查队列中的数据包,意识到它们都是同一个IP数据报的片段,并认为“嘿,为什么我不重组这些数据包并将它们作为单个巨型帧发送出去?”

假设我对你的问题陈述的理解是正确的,那么让我们看看实现这个过程需要做什么。

假设出口接口上的队列在某个瞬间看起来像这样:

(out)           Queue                    Queue<--------------   Head                     Tail

                  P1  P2  P3  P4  P5  P6 . . . 

(1)标识:路由器必须检查这些数据包,检查它们是IPv4还是IPv6(使用分段扩展标头),然后查看分段字段以识别可重组的分段。 (并非所有数据包都是IPv4或IPv6,并且实施将不得不离开这些数据包。)

(2)发送顺序:P1,P2和P5可能是一个数据报的片段,P3,P4和P6是不同数据报的片段。 因此,实施将首先重新组装并传输(P1 + P2 + P5),然后(P3 + P4 + P6)。 通常情况下,队列先到先得,但现在你必须从整个队列中“挑选”片段。

还要考虑如果P5不是数据报的最后一个片段会发生什么; 所以你必须等到最后一个片段出现在队列中,但同时(P3 + P4 + P6)准备好重新组装并传输,那么你会传输它吗?

(3)乱序碎片:还要注意P2有可能是第一个碎片,第二个是P1,第三个是P5。 这是因为这些片段可能在从A到R的过程中采取了不同的路径。通常,终端主机处理这种乱序片段的情况,但是如果路由器开始重新组装,这是他们必须注意的事情也是如此。

(4)校验和重新计算:重新组合之后你需要处理的另一件事是校验和重新计算。 请注意,在路由管道的早些时候,我们已经重新计算了一次校验和(在递减TTL之后),现在在输出排队阶段,我们必须在重新组装之后再次执行校验和。

(5)重新分片:你需要考虑的另一件事是重新分片:如果在上面的例子中,P1,P2和P3的大小为4000,4000和1500字节,并且输出接口的MTU为9000,那么你会离开单独三个片段还是将你分成两个大小为9000和500的数据包?

(6)最后,你必须考虑性能。 所有上述处理都必须以线路速率完成,即每次入队到队列后。 对于支持甚至10Gbps线路速率性能的路由器,您可以计算出上述重组相关处理发生的速度。

总之,我会说原则上这是可能的,但实际问题很多。 而且这个好处并不能说明实现这个过程所涉及的工程成本是这样的(阅读:如果你是一个买家,你愿意花多少钱在一台可以重新组装的路由器上,而不是一台路由器却不能?)。 话虽如此,如果一些聪明的终端用户应用程序设计人员可以通过使用支持重新组装的路由器来构建一个能够表现出卓越性能(以$$ :-)衡量的应用程序),那么情况就不同了。

Language

Popular Tags