当下行链路拥塞时,是否可以拒绝传入的 UDP 数据包?

当下行链路拥塞时,是否可以拒绝传入的 UDP 数据包?

据我所知,任何传输协议的传出数据包都可以按优先级排序,但是在 TCP、UDP 和 SCTP 中,只有 TCP 和 SCTP 具有拥塞控制,允许它们的传入数据包也按优先级排序。

UDP 没有任何拥塞控制,因此无法告诉传入 UDP 数据包的源机器减慢发送速度。

所以我的问题是,是否可以在 UDP 连接开始影响高优先级连接的质量之前切断它们?如果可以,在 OpenWrt 上设置的最佳方法是什么?

理想情况下,应尽可能使用拥塞控制来管理下行链路拥塞,对于 UDP 连接和忽略拥塞控制的连接,在可配置的时间内(我猜是几秒钟)回退到拒绝有问题的连接的传入数据包。

编辑:

我所指的 SCTP 和 TCP 拥塞控制称为显式拥塞通知 (ECN)。从那时起,我意识到应用程序很可能忽略或未正确实现 ECN 支持,因此我想将这个问题扩展到任何无法响应 ECN 的东西,包括 UDP。因此,如果我的路由器告诉远程主机“减速”(通过 ECN),并且该主机继续向我的 ISP 发送过多数据,那么我希望拒绝来自该主机的所有传入通信,除非是 DOS 攻击,否则应该会导致“连接被拒绝”ICMP 错误并切断连接。如果这还不够,那么另外拒绝向主机发送的出站数据包至少应该会导致超时错误。

答案1

UDP 没有任何拥塞控制,因此无法告诉传入 UDP 数据包的源机器减慢发送速度。

在 UDP 层面上,确实如此。

所以我的问题是,是否可以在 UDP 连接开始影响高优先级连接的质量之前切断它们?

不可以。只有您的 ISP 可以做到这一点。当数据包到达您的路由器时,它已经造成了拥塞,并且 UDP 不会告诉源任何信息,它是完全单向的。

与 OpenWRT 一样,他们宣传了其流量整形功能的极限: OpenWRT流量控制

理想情况下,应尽可能使用拥塞控制来管理下行链路拥塞,对于 UDP 连接和忽略拥塞控制的连接,在可配置的时间内(我猜是几秒钟)回退到拒绝有问题的连接的传入数据包。

再次强调,UDP 不会告知源端数据包已被丢弃。它只会将数据包发送到您的链路上,而不会关心哪些数据包会被保留下来。

如果你只是丢下数据包并希望获得最好的结果:

您可能会幸运地使用基于 UDP 的协议。视频流、SIP 数据等通常使用 UDP,但对数据包丢失非常敏感,检测到它并“希望”有机会优化自己的带宽使用。

您也可能运气不好并触发数据包的重新传输,如果应用程序协议检测到数据包丢失,但需要传输这些数据包(bittorrent),它可能会多次将数据包扔到您的链接上并进一步造成拥塞。

有多种方法可以控制通过您的链接传输的内容:如果您对您的 ISP 不够了解,无法让您在其终端放置流量整形路由器,那么您可以在 inet 上租用具有胖链接的服务器,并将其作为路由器/网关,然后在那里实施流量整形。使用 Linux,有大量的指南可以实现这一点。

相关内容