假设交换机级别的帧排序不重要是否正确?

网络工程 转变 通讯协议 UDP 虚拟局域网
2021-07-14 22:14:17

我的理解是,如果帧的有效载荷包含任何需要重新组装的数据,至少对于 TCP 有效载荷,则可以在操作系统级别完成,一旦收到所有数据包,因此不需要对帧进行排序交换机/以太网级别。

出于同样的原因,VXLAN 可以使用 UDP 协议将封装的帧作为有效载荷传输,因此实际上可能会乱序传送帧,但仍然可以吗?

所以,我的假设是针对 TCP 会话的。不确定是否有任何其他协议,可能需要有序帧。至少像 ARP 这样的请求是独立的。

最后,我只是想弄清楚 VxLAN 如何在 UDP 下生存。

2个回答

在第 2 层,帧没有顺序。帧是独立切换的,而不管之前的任何帧。对于独立路由的数据包,第 3 层也是如此。即使使用某些传输协议,也没有顺序,并且数据在到达时呈现给应用程序。

TCP 将序列号放在其段上,以便它可以按正确的顺序向应用程序提供数据。UDP 没有,如果这对使用 UDP 的应用程序很重要,应用程序或应用程序层协议必须处理排序。

还有其他传输协议对排序很重要,它们使用诸如 TCP 序列号之类的东西。有一些应用层协议使用无连接协议,如 UDP,它们将使用诸如序列号之类的东西来向应用程序呈现数据,或者让应用程序对接收到的数据进行重新排序。

无论您是在谈论 IP 数据包还是以太网帧,这实际上并没有太大区别。以太网或 IP 本身都不太关心数据包顺序,但重新排序会对更高级别的协议产生影响。

在逻辑连接内重新排序数据包通常是不可取的,但偶尔重新排序是可以容忍的。高级协议的幼稚实现通常最终会以与丢失数据包类似的方式处理乱序数据包,并不必要地重新传输它们并执行拥塞补偿。一些实现可能会尝试更好地处理它们,但是在处理乱序数据包的程度和处理丢弃的数据包的程度之间存在根本性的权衡。

出于这个原因,当需要同时使用多条路径到达目的地时(在具有链路聚合的以太网级别或在具有等成本多路径的 IP 级别)时,大多数实现将尝试将每个逻辑连接保持在一致的路径上. 这通常是通过散列一个字段元组来完成的,这些字段对于任何给定的逻辑连接都是一致的,并使用该散列来决定用于数据包的路径。究竟使用什么字段组合取决于实现,为了最好地平衡第 3 层和第 4 层源和目标字段,应该考虑,但更简单的实现可能只考虑第 3 层甚至第 2 层源和目标。

当然,拓扑变化偶尔会导致无序交付,要么因为路由数据包完全改变,要么因为等成本路径的集合发生变化,从而改变散列分组,但只要这只是偶尔发生,通常不会太多的一个问题。

只要实现者不做一些非常愚蠢的事情,VXLAN 覆盖网络就应该具有类似于它在其上运行的底层网络的重新排序行为。因此,如果应用程序或传输协议可以容忍它在底层网络上看到的重新排序级别,它也应该容忍它在覆盖网络上看到的重新排序级别。