![Bufferbloat:为什么不直接使用超大缓冲区?](https://linux22.com/image/755459/Bufferbloat%EF%BC%9A%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8%E8%B6%85%E5%A4%A7%E7%BC%93%E5%86%B2%E5%8C%BA%EF%BC%9F.png)
这里有一个小问题,但我想知道不只是拥有非常大的网络相关缓冲区背后的逻辑是什么?
人们会认为,尽快让尽可能多的数据接近目标,无论是外部机器(TCP 缓冲区等),还是机器内部(环形缓冲区等),都是理想的?
答案1
您忽略了一个重要点:一个流/连接的流量对其他流的影响。如果您的链接上只有一个流量,那么这可能会很好。
但是,来自大传输的所有数据包在冲向瓶颈链路(例如,靠近你家)时,必须与链路上所有其他流量竞争才能通过瓶颈。
Bufferbloat 的丑陋之处就在这里。需要响应的流量(游戏、VoIP、Facetime/会议、DNS 查询等)被淹没在来自大流量的所有数据包后面。由于它们要等待轮到自己通过较慢的 ISP 链路发送,因此它们的延迟/滞后可能会增加到几秒钟。
您需要一个智能路由器来挑选出接下来要发送的数据包以及要减慢哪些发送者的速度。SQM 算法(fq_codel、cake)可以管理所有这些。更多信息请访问:我能做些什么来解决缓冲区膨胀问题?