限速传入流量


12

我从未完全了解是否可以对传入流量进行速率限制。我认识到,没有直接方法可以控制远程服务器的发送数据包速率(除非您同时控制两个端点),但是考虑到此限制,下载管理器如何使我成功设置下载速度限制?

TCP慢启动和速率限制传入流量之间是否存在任何链接?是否可以使用慢启动描述的方法来人为限制发送方的发送数据包速率?

另外需要注意的是,我要在其上实现流量整形的服务器本身会建立PPPoE连接,并充当网络其余部分的路由器。


更新:到目前为止的答案已大致概述了我所提出的问题,但我仍然不知道下载管理器如何限制传入流量,更具体地说,是否有可能在服务器上实施类似策略Linux网关盒。


Free Download Manager可能使用自己的上传服务器,而torrent客户端通常会限制他们使用的连接数量。另外,您是否浏览过“ QOS”?
DutchUncle 2011年

3
大多数下载管理器只是对发送回的ACK进行速率限制,从而减慢了数据的传入速度。
克里斯·S

Answers:


12

下载管理器很可能按照work 流文件中的说明进行工作。

利用BSD套接字的进程可以执行自己的速率限制。对于上游限制,应用程序可以通过简单地限制写入套接字的数据速率来做到这一点。同样,对于下游限制,应用程序可能会限制它从套接字读取的数据速率。但是,其工作原理尚不十分清楚。当应用程序忽略从套接字读取某些数据时,其套接字接收缓冲区已满。反过来,这将导致接收方TCP通告较小的接收方窗口(rwnd),对基础TCP连接产生反压力,从而限制了其数据流。最终,这种“滴流”效应实现了端到端速率限制。根据网络堆栈所有层中的缓冲,此效果可能需要花费一些时间才能传播。

如果您偶尔需要对UNIX系统上的单个程序进行速率限制,那么一个简单的解决方案是细。就像您在网关上执行的那样,可以使用进行实际流量调整tc。这在第9章中进行了介绍。Linux Advanced Routing&Traffic Control HOWTO的带宽管理排队规则


很好的答案,正是我想要的。谢谢,赏赐归您。
理查德·凯勒

4

在56k调制解调器与4 Mbps DSl线路的情况下,(通常)不存在使速度有所差异的整形,而只是链路速度的差异。

之所以难以调整传入流量,是因为传输介质中没有缓冲区。您要么接受传入的位,要么就将其丢失。对于即将离开接口的流量,您可以根据需要对数据包进行缓冲和重新排序(或者,至少可以达到设备中可用的缓冲内存)。

对于在TCP之上具有一层的协议(我不知道torrent是否如此),只需简单地安排请求更多数据的速度即可。否则,应用程序将需要与OS通信,以延迟对数据包的ACK。大多数基于UDP的协议必将在特定于应用程序的协议中具有ACK /重发逻辑,因此在这一点上,步调它们显得微不足道。

一种可能的方法是在DSL路由器的LAN端调整来自Internet的流量,因为此时您将在出口端口上进行调整。


3

我无法回答为什么您没有找到任何允许对传入数据进行整形的解决方案(而且我什至不知道),但是关于发送方如何知道接收方可以多快地接收数据的问题:

TCP / IP的基本设计是,对于源发送到目的地的每个数据包,它必须等待目的地回复(带有ACK数据包),说它收到了数据包。

因此,如果您有一个4Mbps的发送器和一个56Kbps的接收器,则发送器必须坐下来等待发送数据包之间的时间,以便接收器对每个数据包做出响应(有一些技术细节可以减少这种开销,但是前提仍然是抽象的)水平)。

那么,如果发件人已经发送了56Kbps的数据,然后又尝试发送更多的数据,会发生什么呢?

数据包丢失。(好吧,它可能在交换机的缓冲区中排队,但是一旦填满,数据包就会丢失)。由于数据包丢失,因此接收方永远不会收到它,因此也永远不会发送ACK数据包。由于发送方永远不会收到此ACK数据包(因为它从未发送过,而且可能会丢失,或者可能会导致网络中断),因此需要发送重新发送额外的数据包。它坐下来,尝试重新发送数据包,直到数据包通过为止,然后ACK回复返回。

因此,要概括一下,一旦发送方使接收方的带宽最大化,它就必须停止并反复发送下一个数据包,直到有足够的可用带宽通过为止。这有效地将发送速度降低到客户端可以接收的最大速度。(在这种情况下,还有一些优化方法可以减少必须重新发送数据包的次数,基本上发件人每次必须重新发送数据包的速度都会减慢,但这超出了此简化描述的范围。



0

查看Wondershaper:http//lartc.org/wondershaper/

关于传入流量:

This is slightly trickier as we can't really influence how fast the internet
ships us data. We can however drop packets that are coming in too fast,
which causes TCP/IP to slow down to just the rate we want. Because we don't
want to drop traffic unnecessarily, we configure a 'burst' size we allow at
higher speed.

Now, once we have done this, we have eliminated the downstream queue totally
(except for short bursts), and gain the ability to manage the upstream queue
with all the power Linux offers.

-2

使用UFW(简单的防火墙) http://ubuntuforums.org/showthread.php?t=1260812

该线程显示了一个简单的示例,该示例默认拒绝30秒内具有6个匹配项的IP:

sudo ufw limit ssh/tcp

还有一个更“高级”的命令,具有指定的时间和命中次数值

sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP


1
这确实与问题无关。
3molo
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.