gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:55:09 28 4
gpt4 key购买 nike

我想在我这边控制下载量/速度——在服务器端也一样(礼貌一点)。...不是“我自己的下载管理器”。

让我们想象一下:我允许我的儿子每天从 utube 下载最多 500Mb,但他仍然启动了一个 session 来下载 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 发送带有“ABORT”的“URG”。从这篇文章中我唯一不清楚的是这个“ABORT”。这是“RST”吗?或者什么?

请把我推向正确的方向。

最佳答案

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

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

示例 herehere .

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

如果您使用的不是 Linux,而是 Windows,您可能需要查看 QoS API或者在现有的软件上为你做这件事,比如Traffic Shaper

关于tcp - 在服务器端控制(减慢)下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010434/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com