我想在我的 Linux 机器上模拟一个高延迟、低带宽的网络连接。
之前已经讨论过限制带宽,例如这里,但我找不到任何解决限制带宽和延迟的帖子。
我可以使用tc
. 但我一直无法将这些组合成一个单一的连接。特别是,这里的示例速率控制脚本对我不起作用:
# tc qdisc add dev lo root handle 1:0 netem delay 100ms
# tc qdisc add dev lo parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
RTNETLINK answers: Operation not supported
Run Code Online (Sandbox Code Playgroud)
如何使用tc
或任何其他现成的工具创建低带宽、高延迟的连接?
前提:
农村地区,高带宽互联网连接的选择不多。迄今为止最快的是卫星互联网,但它很昂贵(设备和每月费用,并且有延迟缺点),因此多个家庭希望共享它。
这本身很简单 - 为每个家庭(VLAN 或物理端口)设置一个带有子网的路由器,阻止它们之间的流量,然后将调制解调器配置为路由到这些子网或设置双 NAT。
问题:
TCP 正常工作的方式意味着每个 TCP 连接或多或少会获得可用带宽的 1/n,其中 n 是连接数。因此,如果一个家庭/用户创建了大量连接,他们将在整体连接中获得更大份额。这并不是特别公平——在饱和链接的情况下,每个家庭都应该获得平等的份额。另一方面,当没有其他人使用连接时,应该可以使用全部带宽。
例如,假设有 4 个家庭共享 12Mbit/s 下行连接。如果其中之一正在下载/流式传输/其他任何内容,他们应该能够使用完整的 12Mbit/s(或足够接近)。如果2户使用连接,每户应该得到6Mbit/s,无论是一户下载1个文件,另一户11个。(没有任何带宽管理,在这种情况下,每个文件下载速度大约为1Mbit/s) 3户各获得 4Mbit/s,依此类推。
到目前为止我已经解决了:
实施此类策略(对于下游)的最佳位置是窄管道的另一端,即 ISP。显然,在这种情况下这是不可能的,所以能够以某种方式近似它会很好。但是如何?是否有支持此类功能的现成路由器?我可以配置 Linux 或 BSD 机器来执行此操作吗?它不必是防弹的——行为不端的 TCP 服务器或激进的 UDP 服务大概可以规避我在我最后可以做的任何事情——但它应该适用于大多数流量的常见情况,包括大量符合 RFC 的TCP 连接。
明确地说,我不是在谈论优先考虑特定应用程序,而是聚合进出特定以太网设备或 IP 地址范围的流量。为某些流量赋予比其他流量更高的优先级似乎得到了很好的支持,但在尝试为流量类别平均分配带宽时,情况就不太清楚了。
网络上有很多关于流量整形的写得很糟糕/不经意地反刍/其他不知情的信息。关于路由器硬件的文档非常不具体,所以我似乎在兜兜转转。
据我了解,让 TCP 以这种方式运行的方法实际上是模拟一个比实际可用的管道稍窄的管道,并人为地丢弃数据包以使其退出。所以我认为通过人为地丢弃任何额外的数据包,在上面的例子中为每个人提供 3Mbit/s 是相当简单的。这并没有真正有效地使用连接,因为大多数时候都有空闲容量。
有没有办法做我要问的?我这样做错了吗?我(或者更确切地说,有问题的家庭)愿意为此花钱——无论是价格适中的现成路由器/设备,还是运行 Linux 或 BSD 发行版的通用机器。
我希望每个数据包(匹配 iptables 规则)延迟某个固定时间间隔。这怎么办?
前置码: iptables -A INPUT -p udp <more conditions> -j DELAY --delay 50000 # delay UDP packets for 50 milliseconds
更新: @related在 Linux 上模拟低带宽、高延迟的网络连接
我需要标记发送到指定 MAC 地址的数据包。
我需要这个在 shaper 中使用tc
。
--mac-destination
不存在于iptables
.
我也尝试使用ebtables
:
ebtables -t nat -A POSTROUTING -d 9c:4e:36:aa:bb:cc -j mark --set-mark 0x2003 --mark-target ACCEPT
但它没有标记任何东西(至少ebtables -t nat -L --Lc
显示了 0 个计数器)
请帮忙!太感谢了!
我们有一个在 Linux 上运行的网络产品,需要在减少带宽的网络中进行测试。
我们已经能够在 Linux 中使用“tc”(流量控制)和在 FreeBSD 中使用 dummynet 来注入具有可预测行为的延迟(延迟)。
但是当我们尝试使用其中任何一个来限制带宽时,它似乎没有太大效果。
以下是尝试使用“tc”将带宽设置为 512Kbps 的示例:
tc qdisc 更改 dev eth0 根 tbf 速率 512kbit 突发 1540
但是,当我们通过该连接运行“scp”时,我们看到的速度比我们预期的要高得多。
以下是在 dummynet 和 tc 中设置各种带宽的结果。你可以看到它有一些效果,但不是很大。
BW _______DUMMYNET__________ __________ TC __________ 10Mbps 1m,3.489s 4.0MB/s 1m,2.732s 4.1MB/s 8Mbps 1m,3.461s 4.0MB/ 1m,2.728s 4.1MB/s 6Mbps 1m,3.905s 4.0MB/s 1m,2.710s 4.0MB/s 1Mbps 1m, 3.261s 4.0MB/s 1m,2.680s 4.0MB/s 512Kbps 1m,26.175s 3.0MB/s 1m 25.409s 3.0MB/s 256Kbps 2m,39.079s 1.6MB/s 2m 53.004s 1.5MB/s 128Kbps 5m、3.501s 852.7KB/s 5m、50.491s 739.7KB/s 64Kbps 9m,48.907s 463.3KB/s 9m,53.105s 436.5KB/s
我手边没有我们用于 …
我有一个网络,其中多台计算机都在同一网络上,并且由于我的带宽非常有限,我想对流量进行优先级排序,就像 CPU 调度程序对进程进行优先级排序一样。
示例: 计算机 A:用于网络内容:YouTube、下载、新闻、电子邮件等。 计算机 B:通过 HTTP 传输文件 计算机 C:通过 ftp、rsync 等传输文件
我想做的是,如果 A 需要的话,给 A 高达可用带宽的 90%。剩余的 (10%) 在 B 和 C 之间分配(如果双方都很忙,则各 5%) 如果 A 没有利用所有带宽,那么 B 和 C 当然应该共享全部带宽(只要双方都达到最大带宽,各 50%)他们的带宽)。
所有计算机都位于同一网络上(例如 192.168.1.0 - 192.168.1-10)。
如果有人能够阐明我应该如何设置我的网络来实现这一目标,我将不胜感激。老实说,我实际上需要一个关于如何设置它的分步指南。
网络设置:(ADSL调制解调器配置为桥接模式(1500kbps/300kbps))
[ADSL调制解调器(桥)]<->[pfsense2.0]<->[交换机]<->[计算机A、B、C...等]
我的堂兄抱怨他的室友使用 Torrent,因此导致与我堂兄的连接缓慢。
他拥有 ADSL 调制解调器,我看到了一些好的前景,例如阻止网站或协议。就像如果被禁止的词是海盗一样,那么thepiratebay.com将被阻止,而wikipedia.org/pirate将不会被阻止。