室友通过观看中文网站的视频来阻止互联网连接。QoS修复问题吗?
我没有阅读你的整个故事,但根据你提出的问题,答案通常不是真的。在某些理想情况下,如果您使用某些高优先级服务(如IP语音)并且数据包已正确标记且您的上游提供商尊重QoS ,则QoS可能会部分解决问题。但是如果您的数据包和室友的数据包的优先级相同,它将无法帮助您。
你想要的是某种主动队列管理。
当你的室友看视频时会发生什么?好吧,您的共享路由器/调制解调器会收到大量数据。为了防止丢失与调制解调器可以接收的数据一样快的数据,它在调制解调器内创建了一个越来越大的内部缓冲区,用于对所有分组数据进行排队。
它必须这样做,因为它无序地从多个地方(您的下载,室友的下载等)接收IP数据包,并且必须将这些部分重新组合在一起以形成整个TCP数据包。因此它创建了这个巨大的缓冲区以避免丢失任何数据包 否则,使用较小的缓冲区时,必须丢弃一些数据包,这可能导致需要重新发送数据。
不幸的是,一旦缓冲区超过一定的大小,缓冲区的好处就会超过它的缺点。“膨胀”缓冲区的主要缺点是收到数据包时涉及巨大的延迟。
延迟意味着发送或接收数据的应用程序必须等待很长时间才能确认它是否已正确发送或接收。由于TCP套接字中的数据被另一方“激活”,作为确认“OK,我得到它!”的一种方式,另一端可能会在一定的延迟后假设数据包丢失,并尝试重新发送无论如何。所以,大缓冲区的目标是防止重新发送,但在它的这个过程中,它会导致重新发送!每次重新发送都会消耗更多的带宽/浪费,并且延迟更多。
从概念上讲,主动队列管理是一种尝试智能地限制缓冲区增长的解决方案。通过保持缓冲区尽可能小,同时只要足够大以防止大多数数据因等待乱序数据包而丢失,您可以防止缓冲区膨胀。
研究人员多年来一直试图做的事情(我们最近在2012年5月才取得部分成功)是设计一种算法,该算法实现了正确的主动队列管理(AQM),无需任何手动用户配置或调整(因为会耗费时间和烦人)。只是一种“魔术子弹”,它可以正确平衡队列大小,从而最大限度地减少数据包丢失并同时最大限度地减少延迟。
到目前为止,我们发现在家用路由器上取得巨大成功的唯一因素是受控延迟(CoDel)主动队列管理,这是Linux内核的最新成员。
CoDel非常有用,因为它控制数据包的延迟(延迟)。它是如何做到这个问题有点过于技术性。
CoDel上的一些链接,以便您可以阅读它:
缓冲区网上的CoDel
CeroWRT
Jim Gettys关于codel的文章
编辑:QoS只是解决方案的一半。基于端口的QoS(例如,为您的数据包提供更高的优先级)只会带您到目前为止; 它根本不会减少缓冲膨胀,你的延迟仍然很高。但是您的丢包可能会略有下降。
CODEL 结合的QoS,一拉 CeroWRT你的路由器上,真的是最好的办法。