Questions tagged «traffic-shaping»

流量整形是一种延迟某些或所有数据报以符合所需流量配置文件的技术。

4
有人真的了解Linux / BSD中的HFSC调度如何工作吗?
我阅读了有关HFSC的SIGCOMM '97 PostScript原始论文,从技术上讲,但是我了解基本概念。您可以指定凸或凹服务曲线,而不是给出线性服务曲线(与几乎所有其他调度算法一样),从而可以解耦带宽和延迟。但是,即使本文提到了所使用的调度算法的类型(实时和链接共享),每个调度类始终仅提及一条曲线(通过指定该曲线来实现解耦,为此仅需要一条曲线) )。 现在,已经使用ALTQ调度框架为BSD(OpenBSD,FreeBSD等)实现了HFSC,并已通过TC调度框架(iproute2的一部分)在Linux上实现了HFSC。两种实现都增加了两条额外的服务曲线,这不在原始文件中!实时服务曲线和上限服务曲线。同样,请注意,原始论文提到了两种调度算法(实时和链接共享),但在那篇论文中,它们都使用一条服务曲线。正如您当前在BSD和Linux中所发现的那样,从来没有两个独立的服务曲线。 更糟糕的是,某些版本的ALTQ似乎为HSFC添加了额外的队列优先级(在原始文件中也没有优先级)。我发现一些BSD HowTo提到了此优先级设置(即使最新的ALTQ版本的手册页不知道HSFC的此类参数,因此正式地甚至不存在)。 这一切都使得HFSC调度比原始论文中描述的算法更加复杂,并且互联网上有很多教程经常相互矛盾,其中一个声称与另一个相反。这可能是为什么似乎没有人真正了解HFSC调度工作原理的主要原因。在我提出问题之前,我们需要某种示例设置。我将使用一个非常简单的示例,如下图所示: 替代文字http://f.imagehost.org/0177/hfsc-test-setup.png 以下是一些我无法回答的问题,因为这些教程相互矛盾: 我到底需要什么实时曲线?假设A1,A2,B1,B2都是128 kbit / s的链路共享(任何一个都没有实时曲线),那么如果根要分配512 kbit / s,则每个共享将获得128 kbit / s。 A和B当然都是256 kbit / s,对吗?为什么还要另外给A1和B1实时速率为128 kbit / s的曲线?这有什么好处?给予这两个更高的优先级?根据原始论文,我可以通过使用曲线来给它们更高的优先级,这毕竟是HFSC的全部意义所在。通过给两个类别提供[256kbit / s 20ms 128kbit / s]的曲线,它们的优先级都自动达到A2和B2的两倍(平均仍然仅获得128 kbit / s) 实时带宽是否计入链路共享带宽?例如,如果A1和B1都仅具有64kbit / s的实时和64kbit / s的链路共享带宽,那是否意味着一旦通过实时为64kbit / s提供服务,它们的链路共享要求也将得到满足(它们可能会获得多余的带宽,但请忽略一秒钟),或者这意味着它们通过链路共享又获得了64 kbit / s?那么,每个类别是否都具有实时和链接共享的带宽“需求”?或者,如果某个类别的要求比实时曲线更高,那么它的链接份额曲线要比实时曲线高(当前的链接份额要求等于指定的链接份额要求减去已为此提供的实时带宽)类)? 上限曲线是否也适用于实时,仅适用于链接共享或两者都适用?有些教程说一种方式,有些说另一种方式。甚至有人声称上限是实时带宽+链路共享带宽的最大值?真相是什么? 假设A2和B2均为128 kbit / …

1
HTB的最低费率和默认类别问题
我对正在使用的HTB结构有一些疑问。 我的目的是限制本地网络中用户的下载和上传速度。网络中的每个用户都有一个个人域列表,其中包含他不能超过的域的上下速度。 这意味着user1可以将slashdot.org上的访问权限限制为下载8KB,上传3KB,而user2可以将slashdot.org上的访问权限限制为4KB(向下)和1KB(向上)。 现在,我设置了一个iptables / tc夫妇,效果很好,但规模很小,同时使用2或3个虚拟主机(不幸的是,我无法执行实际大小测试)。 这是我当前的结构(我只会在LAN的出口上显示一个结构,用于上传的结构只是该结构的“副本”) 接口上连接的HTB qdisc(句柄2),默认流量类别为FFFF。 直接在HTB qdisc之下的根类2:1具有速率和上限DOWNLINK容量。 默认的2:FFFF类是2:1的子级,速率为1kbsp,下行容量为上限。 然后,当对来自某个域的用户有新限制时,会动态添加其他类,并添加新的tc类以控制从其域的下载速度。 现在,这是我所做的: 创建一个具有唯一ID(从数据库获取,此处不是重点)的新tc类,作为父类,类2:1,速率值为1bps,ceil值设置为有限的下载速度。 这是tc命令: -------------- BEGIN SCRIPT -------------- DOWNLINK=800 ## Setting up the static tc qdisc and class $tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF # Main class so the default class can borrow …

3
Tc:入口管制和ifb镜像
我正在尝试按此处编写的那样在 Linux网关上设置流量整形。由于我具有多个LAN接口,因此需要自定义脚本。因此,为了塑造LAN端,我打算创建一个ifb伪设备,如下所示: modprobe ifb ip link set dev ifb0 up /sbin/tc qdisc add dev $WAN_INTERFACE ingress /sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 上述要点回购中的脚本具有以下几行: /sbin/tc qdisc add dev $WAN_INTERFACE handle ffff: ingress /sbin/tc filter add dev $WAN_INTERFACE …

4
使用tc将数据包延迟到单个IP地址
我是使用tc和netem的新手。我想延迟发送到特定IP地址的数据包。但是,以下命令导致系统上的所有数据包被延迟,而不仅仅是IP地址1.2.3.4: tc qdisc del dev eth0 root tc qdisc add dev eth0 root handle 1: prio tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1 我的猜测是,我最后需要某种通用过滤器来指定所有剩余流量都不应通过netem。但是我什么都无法工作。我将如何工作?

3
如何通过IP在Linux中进行流量整形?
我们有一个透明的代理设置。我尝试在Linux中寻找流量整形,而我在网上只能找到通过接口(eth0 / eth1 ...)限制流量的方法。 我需要通过IP地址或IP范围来限制带宽(永远不要超过特定限制),但我找不到解决方法。 有什么办法吗?


5
tc u32 —如何在最近的内核中匹配L2协议?
我有一个很好的成型器,带有哈希过滤,是在linux桥上构建的。简而言之,对于br0连接接口external和internal物理接口,VLAN标记的数据包是“透明”桥接的(我的意思是,那里没有VLAN接口)。 现在,不同的内核执行不同的操作。我可能对确切的内核版本范围有误,请原谅。谢谢。 2.6.26 因此,在debian中,2.6.26及更高版本(我相信最多为2.6.32)---可行: tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \ u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200 在这里,“内核”将“协议”字段中的两个字节与0x8100匹配,但是将ip数据包的开头计为“零位置”(对不起,我的英语不好意思,如果我不太清楚的话)。 2.6.32 同样,在debian(我还没有构建香草内核)中,2.6.32-5 ---这可行: tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \ u32 ht 1:64 match ip dst 192.168.1.100 at 20 …

2
Linux TC类/过滤器编号
我目前正在为ISP级公司开发一种流量整形解决方案,但遇到了一个有趣的(有点哲学上的)问题。 寻找系统应该处理的端点数量(大约2万个),我有点担心当我需要对更多用户的流量进行策略/调整时会发生什么。由于我目前在整个网络中使用HFSC整形树(请参阅tc-hfsc,与众所周知的HTB大多相同,但较冷的东西),因此,我需要使用更多的ClassID(显然,对于每个用户,至少要使用一个ClassID)网络)。我发现的问题是TC ClassID是有限的-它们是16位数字,这使我最大可能受此解决方案影响的64k用户。 同样,如果我想有效地管理TC过滤器(例如,不使用“全部刷新”),则需要能够删除或修改单个过滤器条目。(我正在使用类似于LARTC [1]中的哈希表的东西)。同样,似乎唯一适用的方法是使用单独的优先级对所有过滤器进行编号(tc filter add dev ... prio 1)。没有其他参数可用于此目的,遗憾的是,prio也是仅16位的。 我的问题是:是否存在某种扩大可用“标识符空间”的好方法,例如用于“ tc类”命令的32位clsid和用于“ tc过滤器”的32位优先级(或任何其他修改句柄)命令? 非常感谢, -mk (顺便说一句,我希望这不会出现在“ 64k用户应该对每个人都足够”的情况下...)

6
限速传入流量
我从未完全了解是否可以对传入流量进行速率限制。我认识到,没有直接方法可以控制远程服务器的发送数据包速率(除非您同时控制两个端点),但是考虑到此限制,下载管理器如何使我成功设置下载速度限制? TCP慢启动和速率限制传入流量之间是否存在任何链接?是否可以使用慢启动描述的方法来人为限制发送方的发送数据包速率? 另外需要注意的是,我要在其上实现流量整形的服务器本身会建立PPPoE连接,并充当网络其余部分的路由器。 更新:到目前为止的答案已大致概述了我所提出的问题,但我仍然不知道下载管理器如何限制传入流量,更具体地说,是否有可能在服务器上实施类似策略Linux网关盒。

6
在大型系统(约2000个用户)中进行流量控制的最佳解决方案是什么?
以下情况:我们是一群学生,负责管理本地居民大厅的Internet连接,共有大约2000个最终用户。 我们有一个交通点系统,每个MB降低或上传的成本点,按小时添加新的点。目前,当用户花完所有积分后,我们便将其阻止(通过将其放入Debian网关路由器iptables中的REJECT策略中)。 我们只想限制用户的带宽。做这个的最好方式是什么? 简单的答案是在用户的交换机端口(主要是Cisco Catalyst 3550)上设置速率限制。但是,这是不可取的,因为我们自己网络内部和大学网络之间的流量应保持无限。在Cisco IOS中,是否有一种方法仅对具有特定目标或源IP范围(因此,出站和入站)的数据包限制带宽?我什么都找不到。 另一种方法是控制网关路由器上的流量。我想到了几种解决方案: tc或tcng-似乎两者都具有相当奥秘的语法,而且都没有提供用于进行按IP流量控制的良好功能。专用于这么多人的QDisc可能会大大降低路由器的速度。此外,两者的文档都已经过时了。 Shorewall-似乎具有相当整齐的配置语法,但是,我不确定它是否可以处理这么多的流量和用户,是否适合每个IP流量限制 pfSense-看起来像是用于我们这样的目的的操作系统。但是,这将要求我们完全重新安装网关路由器。我们没有其他BSD系统,并且pfSense也需要具有非常好的流量统计功能(目前我们正在使用fprobe-ulog和ulog-acctd)。 你有什么经验?哪种解决方案适合我们的需求,并且最容易维护?您还有其他想法吗? 如果您需要有关我们系统的任何其他信息,请随时询问。 提前致谢。 编辑:我已经实现了iptables和的系统tc。 每个用户都有一个/ 28子网,一个VPN IP(均从10.0.0.0/8起)和一个外部IP,它们都通过一个iptables链进行控制。这条链只有一个规则,一个简单的规则RETURN。 Python脚本每五分钟读取一次这些规则的字节计数器。它将重置计数器并更新我们的PostgreSQL数据库中的用户流量点帐户。 如果用户的积分余额减少到某个阈值以下,则会为此用户创建两个tc类(一个用于传入,一个用于网关路由器上的传出接口),将IP输入到属于这些类的tc过滤器中。这些类受HTB限制速度。 相比之前的系统,fprobe-ulog而且ulog-acctd这是更快的字节计数由iptables的完成。 对于我们的用户,网络速度已大大提高。

3
带宽整形,最好的方法
假设我有一台具有很多外部IP(1024+)的服务器。我的用户造成了大流量,但并不是全部。占用所有带宽的用户很少,并且由于占用了所有带宽,导致其他人遭受互联网速度低的困扰。 我们正在考虑实施一项整形规则,以确保每个人的幸福或至少大多数人的幸福,并且我们正在讨论这样做的最佳方法。 第一个计划 计算有多少客户登录并在其中分配带宽,让每个人都吃同样的蛋糕。 好处: 我不会为带宽支付大笔费用 没有人违反法律 缺点 带宽是平等分配的,带宽需求低的用户(阅读论文,阅读Facebook等)将与依靠我的服务开展业务的繁重用户拥有相同的带宽。 所有用户都将具有相同的带宽,但是需求低的用户将“共享”他们的份额,即使他们并不需要所有带宽,所以我剩下很多带宽未被使用 第二计划 监视用户,查看他们是在带宽限制上还是超过带宽限制(服务器总限制)。如果他们达到了这一点,请尝试确定哪些用户在吃东西最多。如果我们发现用户吃掉了总带宽的40%-50%,则将他们送进监狱20分钟。监禁意味着将其带宽降低到250kb / s。 好处: 不会浪费带宽 如果没有浪费带宽,重要的用户可以使用更多带宽,我的客户也很满意 这是一种更智能的解决方案,允许每个人根据自己的需求进行扩展 在坏人被监禁并且好人(大多数情况下,很多人)是一个幸福的社会的地方使用带宽警察 缺点 高负载服务器上的监视工具可能会使其“休眠”,因为它们往往会消耗大量资源 我可能没有坏人,但在线上有很多好人,带宽超出限制,并且处于不知道该惩罚谁的情况下(在这种情况下,我们可能会应用“第一计划”一小时) 我愿意集思广益和提出建议

1
通过HTB共享带宽并确定实时流量的优先级,哪种方案更好?
我想在我们的Internet线上添加某种流量管理。在阅读了很多文档之后,我认为HFSC对我来说太复杂了(我不了解所有曲线内容,恐怕我永远都做不到),不建议使用CBQ,基本上HTB是解决问题的方法对于大多数人来说。 我们的内部网络具有三个“网段”,我希望在它们之间或多或少地平均共享带宽(至少在开始时如此)。此外,我必须根据至少三种流量(实时流量,标准流量和批量流量)对流量进行优先级排序。带宽共享并不像在任何可能的情况下始终将实时流量始终视为高级流量这一事实那样重要,但是当然也没有其他流量类别可能会挨饿。 问题是,什么才更有意义,同时又可以保证更好的实时吞吐量: 为每个细分创建一个类,每个类具有相同的速率(根据HTB开发人员的优先级,对于没有叶子的类,优先级无关紧要),并且每个类都有3个子类(叶子),分别对应3个优先级(优先级不同)和不同的费率)。 在每个优先级级别上都有一个类别,每个类别具有不同的速率(再次优先级将无关紧要),每个类别都有3个子类别,每个细分市场一个类别,而实时类别中的所有3个类别的最高优先级最高,最低优先级最高课,等等。 我将尝试使用以下ASCII艺术图片来使其更加清晰: Case 1: root --+--> Segment A | +--> High Prio | +--> Normal Prio | +--> Low Prio | +--> Segment B | +--> High Prio | +--> Normal Prio | +--> Low Prio | +--> Segment C +--> High Prio +--> Normal Prio …

3
用tc模拟慢速连接
我有一个Linux盒子(Centos 5.5),我想在上面限制网络流量。我有一个分发给客户端的应用程序,我想在最小建议带宽256Mbit / sec上对其进行测试。到目前为止,我看过的tc教程似乎允许您根据某些条件限制带宽,但是我想在所有情况下限制带宽(与所有IP地址/从所有IP地址开始,无论IP标头是什么样的等等)。 建议我使用一个教程: tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2 但我收到以下错误: Unknown filter "flowid", hence option 10:2 is unparsable 关于在任何情况下如何限制进入/离开eth0的带宽的任何想法?

3
在Linux下使用tc限制接口带宽
我有一个Linux路由器,其外部具有10GBe接口,内部具有绑定的千兆以太网接口。 我们目前的预算为2GBit / s。如果我们超过该速率一个月的平均值超过5%,则需要为整个10Gbit / s容量付费。以美元计,升幅很大。 因此,我想在10GBe接口上将其限制为2GBit / s。 TBF过滤器可能是理想的,但是此注释值得关注。 在除Alpha之外的所有平台上,它都能以理想的最小突发性整形高达1mbit / s的正常流量,并以配置的速率精确发送数据。 我应该使用TBF还是其他过滤器将此速率应用到接口,以及如何执行。我不明白此处提供的示例: 交通控制方法 特别是“示例9.创建256kbit / s TBF” tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0 tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps …

5
阻止BitTorrent
如何在小型办公室网络上阻止或严重减慢BitTorrent和类似的对等(P2P)服务? 在搜索服务器故障时,我找不到一个可以作为最佳技术思路的集合点的问题。现有的问题都是关于特定情况的,而主要的回答本质上是社会/法律上的。这些是有效的方法,但是我怀疑,纯粹的技术性讨论对许多人都将是有用的。假设您无权访问网络上的计算机。 随着P2P流量中加密使用的增加,似乎有状态数据包检查正变得不太可行。对我来说似乎很有意义的一个想法就是通过IP限制重度用户,而不管他们发送或接收的是什么,但是目前看来,没有多少路由器支持该功能。 您如何限制P2P / BitTorrent流量?

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.