![让路由器或计算机在应用程序之间平等共享带宽](https://linux22.com/image/1403923/%E8%AE%A9%E8%B7%AF%E7%94%B1%E5%99%A8%E6%88%96%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9C%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B9%8B%E9%97%B4%E5%B9%B3%E7%AD%89%E5%85%B1%E4%BA%AB%E5%B8%A6%E5%AE%BD.png)
我的有线 ISP 可提供 16Mbps 的网速。使用 FileZilla 通过 FTP 下载电影或电视节目时,会使用全部 16Mbps 的带宽。这是预期和期望的行为。
问题是,与下载同时运行的其他网络应用程序几乎没有带宽可用。无论辅助应用程序是同一台机器上的浏览器、同一网络上的以太网连接的 AppleTV,还是在笔记本电脑上无线浏览的访客,在 FileZilla 下载期间几乎没有带宽可用。
我(也许天真地)期望发生的事情是:
(1)如果 AppleTV 需要 2Mbps 来完成其工作,那么它将获得 2Mbps,而 FileZilla 下载速度将降级为 14Mbps。
(2) 如果有 10 个人进入我家并且都开始从互联网下载,那么每个人将能够获得 1.6 Mbps 的网速(16 Mbps 除以 10 个人)。
但事实并非如此。FileZilla 下载不知何故消耗了网络可用的所有外部带宽。
我的 LinkSys E1000 路由器难道不能为每个出站 TCP/IP 连接分配带宽吗?我仔细检查了路由器设置,发现 QOS 功能已关闭。
** 我意识到我可以在用户设置中人为地限制 FileZilla 的带宽使用量,但这不是我想要的。如果 FileZilla 是网络上唯一运行的应用程序,它确实应该能够访问所有 16Mbps。感觉路由器应该负责为每个应用程序提供公平的份额,但也许路由器的工作方式不是这样?请帮忙。
答案1
我的 LinkSys E1000 路由器难道不能为每个出站 TCP/IP 连接分配带宽吗?我仔细检查了路由器设置,发现 QOS 功能已关闭。
不。路由器无法控制您的 ISP 向您发送哪些数据包。QoS 不会赋予它控制权。
感觉好像路由器应该负责为每个应用程序提供公平的份额,但也许路由器的工作方式不是这样的?
不,路由器不是这样工作的。您的路由器只是路由从世界其他地方收到的数据包。它无法控制它收到的内容,也无法控制数据如何从您的 ISP 传输到您的路由器。
尚未做出重大努力来使住宅互联网接入支持任何个人客户可用带宽内的“公平”概念。确实存在一些路由器使用以下技术来伪造它StreamBoost,但他们是例外。
答案2
大多数 DSL 调制解调器不提供此功能,但如果您可以专用一台低配置的 PC 并且有时间,您可以安装普福斯并按如下方式配置:
pfSense 配置
去防火墙 > 流量整形器 > 限制器
创建一个新的限制器(8)对于下载WAN1 的命名方式如下林万1Down只需将其带宽设置为略低于下载BWWAN(3)(最好(1) 以 64kbps 的倍数)。不要低于 256Kbps(6)
保存限制器并点击选项添加新队列(7)创建一个名为的队列QueWan1Down并将其掩码设置为“目的地地址”。
为创建另一个限制器上传WAN1 的命名方式如下林万一。只需将其带宽设置为略低于上传体重WAN*(最好是 64kbps 的倍数)。不要低于 256Kbps(6)
保存限制器并点击选项添加新队列创建一个名为的队列閩Wan1Up并将其掩码设置为“来源地址”。
最后去防火墙 > 规则 > LAN找到将流量传递到 WAN1 的规则 (2)。单击编辑并转到高级设置 > 进/出管并指定您的上传队列在里面第一(在)部分和你的下载队列在里面第二 (出局)第(9)部分。
不要忘记点击应用更改。
现在,限制器将限制所有客户端的总上传或下载带宽,以便我们避免在 ISP 端出现不必要的缓冲,同时队列将有限的带宽均匀地分配给所有 LAN 客户端(准确地说是 LAN IP)。
要立即测试,您必须先前往诊断 > 状态 > 重置状态并点击重置但要注意所有人的 TCP 连接都将被重置(包括您与 WebUI 的连接)。
现在开始下载/上传并检查诊断 > 限制器信息。
此方法通过限制总下载和上传带宽(从而防止在 ISP 缓冲)来保持 RTT 时间较低,并在 LAN 客户端之间均匀共享该 BW。当许多用户占用了您的 WAN 时,您将获得不错的浏览/Skype/RDP/ssh 体验,但它仍允许一个客户端在没有其他人需要时获得完整的 BW。
快速参考
如果您已习惯上述步骤,而只想快速参考以免混淆设置,则如下所示:
管道 | 方向 | 队列掩码 -----+------------+-------------------- 在 | 上传 | 源地址 出站 | 下载 | 目标地址
笔记:
(1):不确定这是否重要。
(2):不确定当有很多规则时它是否会以相同的方式工作,因为我只用一条规则进行了测试。
(3):如果你有多个 WAN,你可以对每个 WAN 执行上述操作,但我相信事情变得棘手,因为在防火墙上,每个传递流量的 LAN 规则都应该处理特定的 WAN(4)。在我的情况下,当我有 2 个 WAN 时,我将 LAN IP 分为偶数和奇数,每个组都使用特定的 WAN(当然有故障转移)。我知道这有点黑客行为。请记住,drakontas 并不担心我。他表示“这里描述的限制器在与网关组(即多 WAN)结合使用时按预期工作,无需任何额外修改,只要防火墙规则将网关组作为网关(在高级下)。”
(4):我 99% 确定情况确实如此,但从未测试过。
(5):以下是查找位宽的方法:找出线路下载/上传速率最差的一天/时间。在启用任何功能之前,先开始大量下载/上传,然后查看 ping 时间是否过高。尝试设置下载/上传限制。如果 ping 时间过高,则需要降低限制。
(6) 我没有测试过,但我读过这样的逻辑:IPv4 数据包的最大大小为 64KBytes,即 256kbits。因此,如果降低限制器,则可能必须将数据包分开,这会导致更高的延迟、更低的吞吐量和糟糕的用户体验。
(7)此时 pfSense 的用户界面有点小故障。完成限制器,保存它,再次单击其名称,然后尝试单击“添加新队列”
(8)术语有点令人困惑。在本文中,我谨慎使用这些术语,但您可能会看到限制器、管道和队列这些术语互换使用。
(9)从 LAN 接口的角度考虑数据包的流动。从本地网络流入 LAN 接口的数据包将成为 WAN 上传,反之亦然。
先进材料
这些是直接从 drakontas reddit 帖子复制的一些高级注释(见致谢):
如果使用浮动防火墙规则而不是每个接口规则,则必须有两条规则 - 一条应用于“传入”流量,一条应用于“传出”流量(方向在规则中指定)。
如果您有许多用户(例如,数千台设备共享一个相对较小的上行链路),您将需要增加每个管道和队列上的高级“队列大小”选项(如果没有指定值,则默认值为 50)。这允许在高拥塞期间更干净地处理用户流量。
高级“队列大小”选项的最大设置值可以设置为 100。GUI 上没有记录或指示这一点,但如果您尝试将此值设置为 >100,限制器将抛出错误,并且无法正确应用。这会减慢重新启动速度,并且在运行系统上应用时也可能是一个完全隐藏的错误(唯一表明出现问题的迹象是,即使在重置状态后,“诊断”>“限制器信息”页面也不会反映新设置)。
请记住,对于需要 ACK 响应来保证数据完整性的 TCP 流,即使在下载时也需要上传(反之亦然)。在我的测试中,将上传限制为 512kbps 会导致实际最大下载速度为 50-60mbps;将上传限制为 256kbps 会导致最大下载速度为 20-30mbps(当然,YMMV)对于 UDP 流,这无关紧要
致谢
本文根据foxale08系列文章及截图整理在 pfSense 论坛上(您必须登录才能看到截图)以及来自优秀的 drakontas reddit 帖子