在服务器端控制(减慢)下载

时间:2009-06-18 02:07:05

标签: tcp

我想在我这边控制下载量/速度 - 在服务器端也是如此(礼貌)。 ...关于“我自己的下载管理器”

让我们想象一下:我允许我的儿子从utube下载最大500Mb /天,然后,他开始下载一个10Gb高清电影的会话。 (不一定是ab。父母控制,但从技术上讲,这是一个很好的例子)。

我的问题是:如何限制。 我想编写一个在TCP(IP?)级别上控制它的驱动程序。 是否有可能在TCP级别上?

我知道我可以在本地处理它(例如缩小我向服务器发布的TCP窗口,或者只是在XXX字节后关闭连接)。

但我真的想要的是礼貌地告诉(说)utube: (在建立连接并且正在进行下载之后):不要试着继续将这部电影压缩成小片段,并在n / w上创建大量拥塞 - 我们已经完成了。

我想在任何一方避免不必要的n / w;基本上我希望能够(在TCP级别上)告诉另一端:就是这样,我们今天已经完成了。请不要重试整部电影,我对观看剩下的电影不感兴趣(今天)。 (因此utube会立即停止对带宽进行污染)。

也许会让你更加困惑 - 但希望澄清一下, -  这是“Linux网络编程权威指南”的摘录,第31页: (谈到TCP头的6位部分:URG,ACK,PSH,RST,SYS,FIN): “......当数据必须在带外传输时出现情况。 ......这是URG位是否起作用。考虑用户希望中止的连接,例如......“(等)。

这可能就是我要找的东西: 发送utube“URG”和“ABORT”。 我从这篇文章中唯一不清楚的是这个“ABORT”。这是“RST”吗?或者什么?

请向我推进一个正确的方向。

1 个答案:

答案 0 :(得分:0)

您可以使用现有的QoS基础架构在Linux机器中进行流量整形。

最好的方法是使用iproute's tc(或tcng)命令创建不同的队列并为每个AND设置限制,以使用iptables将数据包分类到现有队列之一。这将为您提供最大的灵活性和更少的代码:-)(可能或可能不是您想要的)。我找到toolsupposedly使所有这一过程变得更容易。

示例herehere

您可能还需要查看Shaperd以查看使用libipq的示例代码(如果有点旧),它允许在用户空间中进行数据包排队(此后已被libnetfilter_queue取代) )。

如果您不使用Linux,而是使用Windows,则可能需要查看QoS API或现有的软件,例如Traffic Shaper