共享Internet连接上的带宽管理选项


13

前提:

农村地区,高带宽Internet连接的选择不多。到目前为止,最快的是卫星互联网,但价格昂贵(包括设备和每月费用,而且存在延迟问题),因此,多个家庭希望共享它。

这本身很简单-为每个家庭(VLAN或物理端口)设置一个带有子网的路由器,阻止它们之间的通信,并配置调制解调器以路由到那些子网或设置双NAT。

问题:

TCP正常工作的方式意味着每个TCP连接或多或少将获得可用带宽的1 / n,其中n是连接数。因此,如果一个家庭/用户创建大量连接,那么他们将在整个连接中获得更大的份额。这不是特别公平-拥有饱和的联系,每个家庭应获得平等的份额。另一方面,当没有其他人在使用连接时,应该可以使用全部带宽。

例如,假设有4个家庭共享12Mbit / s的下行连接。如果其中之一正在下载/流式传输/以任何方式传输,则它们应该能够使用完整的12Mbit / s(或足够接近的速度)。如果有2个家庭正在使用该连接,则无论一个家庭是否正在下载1个文件,而另一个家庭正在下载11个文件,则每个家庭应获得6Mbit / s的速度(在没有任何带宽管理的情况下,每个文件将以大约1Mbit / s的速度下载)3个家庭分别达到4Mbit / s,依此类推。

到目前为止,我得出的结论是:

实施这样的策略(对于下游)的最佳位置是在细管的另一端,即ISP。显然,在这种情况下这是不可能的,因此最好能够以某种方式近似它。但是如何?是否有支持这样的现成路由器?我可以配置Linux或BSD机顶盒吗?它不一定是防弹的-行为不正常的TCP服务器或激进的UDP服务可能会绕开我最终可以做的任何事情-但它应适用于大多数流量的常见情况,这些流量包含许多符合RFC的规定TCP连接。

需要明确的是,我并不是在讨论对特定应用程序进行优先级排序,而是在聚合进出特定以太网设备或IP地址范围的流量。为某些流量提供比其他流量更高的优先级似乎得到了很好的支持,但是当尝试将带宽平均分配给流量类别时,情况并不清楚。

网络上的流量整形方面有很多写得不好/毫无意义的反省/否则就是无知的信息。关于路由器硬件的文档非常不确定,因此我似乎无所适从。

据我了解,使TCP以这种方式运行的方法实际上是模拟比实际可用的管道略窄的管道,并人为地丢弃数据包以使其退回。因此,我认为在上面的示例中通过人为地丢弃任何额外的数据包为每个人提供准确的3Mbit / s相当简单。这实际上并没有真正有效地使用连接,因为大多数时候都有可用容量。

有什么方法可以满足我的要求?我在说错吗?我(或者更确切地说,是有问题的家庭)愿意为此花钱-无论是价格适中的现成路由器/设备,还是运行Linux或BSD发行版的通用设备。

Answers:


4

如果我要构建一些解决此问题的方法,则将其设置为:

我们将以您的示例为例,其中4台计算机共享一个链接。网络的形状如下:

{ ISP }=========[ SOHO router] ===LAN1=== [eth0 |Linux Box| eth1] ===LAN2=== Home Desktops/Laptops

假设您在LAN2中使用静态IP寻址:

Linux Box 192.168.1.1
Home 1    192.168.1.11
Home 2    192.168.1.12
Home 3    192.168.1.13
Home 4    192.168.1.14

我将首先编写一个小脚本,通过对它们进行ping操作并将结果写入某个位置来检测哪些客户端已启动。“这留给读者练习”计算连接的主机总数(1-4)

确保处理没有在线主机的情况。

将总带宽除以已连接主机的数量。(12Mb等于1,6Mb等于2,4Mb等于3,3Mb等于4)

接下来,将tc与HTB算法一起使用以限制WAN端设备上每个地址的带宽。首先,创建根类:

DEV="eth0"
TC="/sbin/tc"
TOT_BW=12
$TC qdisc add dev $DEV root handle 1: htb default 99

然后,为每个“客户端”添加一个类(例如,这里有3个客户端)

NB_CLT=3
CLT_BW=$(($TOT_BW/$NB_CLT))mbit
for i in seq $NB_CLT
do
    $TC class add def $DEV parent 1: classid 1:$i htb rate $CLT_BW ceil $CLT_BW burst 15k cburst 1500
    $TC filter add dev $DEV protocol ip parent 1:0 prio 1 flowid 1:$i u32 \
     match ip dst 192.168.1.1$i/32 \
     match ip src [Router IP in LAN1]/32
done

(以上脚本完全未经测试,并且没有键入错误)

现在,您仍然必须适当地编写脚本,使其每分钟运行一次,并在每次新主机启动或关闭时更新存储桶/过滤器。

我希望这会为您指明正确的方向,祝您好运。

替代解决方案

在所有主机上安装本地QoS软件以限制其带宽。我个人使用NetLimiter(非免费)


我的方法存在的问题是,即使每个主机都没有使用全部共享资源,也会减少它们的带宽。但是,设计仅在需求很高时才强制共享的东西是困难的。
mveroone 2014年

2

OpenWRT似乎确实支持它,尽管我自己从未使用过它。您可以查看他们网站上的“ 网络流量控制”页面,尤其是第二个示例:与HTB进行简单的简单带宽共享(即流量整形)。这涉及到对qdisc的简单调用,因此任何Linux机器都可以做到。


我注意到该示例是针对上传方面的。我目前正在通过Linux Advanced Routing&Traffic Control HOWTO来阅读自己的方法,尽管它似乎有些许希望,并希望能让我理解所有这些tc规则。Linux的流量整形器当然看起来很有希望。
pmdj

0

/superuser//a/1210164/257859中描述的设置可以做到这一点:

队列将有限的带宽平均分配给所有LAN客户端(准确地说是LAN IP)。


1
请不要对多个问题发布相同的答案。如果相同的信息确实回答了两个问题,则应关闭一个问题(通常是较新的问题),作为另一个问题的重复。您可以通过投票将其关闭作为重复项来表明这一点,或者,如果您没有足够的声誉,可以举一个标志来表明它是重复项。否则,请针对这个问题量身定制答案,而不仅仅是在多个地方粘贴相同的答案。
DavidPostill

@DavidPostill我曾考虑过以重复方式结束投票,但犹豫了,因为这是一个3年的历史问题。我什至搜索了meta.superuser并在meta.superuser.com/questions/3524/…中找到了一个相关的问题。阅读了元数据后,我认为情况很复杂(我有两个老问题的答案,每个问题都有足够的讨论),留下简短的指针答案似乎至少“不错”。我很乐意听到你的想法。
ndemou
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.