agz*_*agz 1 networking wireless-networking speed ethernet priority
正如cpu时间有“高优先级,正常优先级等”或“好”一样,有没有办法为网卡/互联网做这样的事情?例如,如果我通过 wifi 从我的服务器下载文件并观看 youtube 视频,有没有办法使 youtube 视频具有更高的优先级?这将如何在 windows 和 linux 上完成?
首先,维基百科上的一些背景知识(阅读完这篇文章后请回到这个答案)。
现在,您可能会想,“QoS”(服务质量)——这就是票!嗯,不,可能不是。问题是QoS确实应该是“端到端”才能有效,但许多节点往往不遵守它,使其变得毫无用处。此外,它仍然没有解决真正导致视频延迟的潜在问题,很可能。
您可以通过阅读Jim Gettys博客上的优秀文章来开始阅读有关缓冲区膨胀的内容。
在简短的答案是,大量HTTP文件下载的是“饱和”的网络(使用了在路由器级可用带宽的100%),导致路由器硬件创造越来越大的缓冲区来存储所有数据。这些巨大的缓冲区会导致通过网络获取数据包的延迟越来越高,缓冲区越大。
要了解为什么会这样,请假设您有一张网卡以 100 KBps 的速度接收数据。现在,请记住,进入的每个数据包都排在队列的末尾(在队列的后面,就像在学校排队时一样)。
如果您有一个 100 KB 大的缓冲区,数据包需要多长时间才能遍历缓冲区?1秒。
如果您有一个 1 MB 大的缓冲区,假设上面的吞吐量为 100 KBps,则数据包遍历缓冲区需要多长时间?10 秒。
问题很可能是,由于近年来几乎所有网络硬件中的有毒有害编程技术,从文件服务器下载的文件导致缓冲区“膨胀”(变得非常大),增加缓冲区以避免数据包丢失。
问题是,一旦延迟超过某个点,TCP(传输控制协议)就会开始崩溃。你看,TCP 依赖于在设定的时间内到达的数据包,然后从另一端接收“ACK”(确认,就像一条消息说“好的,我明白了!”)。当它没有及时收到“ACK”时,它会尝试再次发送数据包,假设它已经丢失。所以最终的结果是,为了防止丢包,膨胀的缓冲区实际上会导致丢包!!!
这种数据包丢失有时会导致固件将缓冲区增长得更大,并且问题会恶化,直到网络完全中断并断开连接。只有这样,缓冲区才会再次收缩并恢复功能。
您可能没有意识到这一点,但 YouTube 的工作原理是每隔几秒钟向您传输少量视频。它将以刚好足够的吞吐量流式传输,在大约 5 秒的下载时间内为您提供大约 10 到 15 秒的视频,然后停止冷却,然后再次启动,令人作呕。问题是,如果您有膨胀的缓冲区,您的视频将滞后,因为 Youtube 视频数据包无法及时通过您膨胀的缓冲区!
如果可能的话,您真的应该尝试在您的路由器上部署受控延迟主动队列管理 (CoDel) ——如果您可以在其上安装 CeroWRT 固件,那就最好了。OpenWRT 也可以配置为使用 CoDel。您还可以在 Linux 计算机(笔记本电脑/台式机)上配置 CoDel 并通过那里路由您的流量。CoDel 是目前最著名的缓冲区膨胀问题的解决方案。不幸的是,目前还没有适用于 Windows 的实现。可以在bufferbloat.net上找到安装详细信息。
如果您尝试使用 CoDel 并且它不起作用,我敢打赌这要么是您的配置,要么是我的飞行独角兽。如果您尝试 QoS 但它不起作用,那么,这是完全正常的。;)
归档时间: |
|
查看次数: |
284 次 |
最近记录: |