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

Tcp 在服务器端控制(减慢)下载,tcp,Tcp,我想控制我的下载量/速度——还有服务器端(礼貌地说)。 ... 它不是关于“我自己的下载管理器”的 让我们想象一下:我允许我儿子每天从utube下载最大500Mb的视频,但他仍然发起了一个会话来下载10Gb高清电影。 (不一定是ab.父母控制,但从技术上讲,这是一个很好的例子) 我的问题是:如何限制。 我想写一个在TCP(IP?)级别控制它的驱动程序。 是否可以在TCP级别上进行复制 我知道我可以在本地处理它(例如,缩小我向服务器播发的TCP窗口,或者在XXX字节后简单地关闭连接) 但我真正想做

我想控制我的下载量/速度——还有服务器端(礼貌地说)。 ... 它不是关于“我自己的下载管理器”的

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

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

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

但我真正想做的是礼貌地告诉乌托比: (在建立连接并进行下载后):不要试图将这部电影压缩成小片段,并在n/w上造成大量拥塞-我们已经完成了

我希望避免任何方面不必要的n/w;基本上,我希望能够(在TCP层面上)告诉另一端:就这样,我们今天就结束了。请不要尝试交付整部电影,我对(今天)剩下的部分不感兴趣。(这样utube就可以立即停止污染带宽)

也许是想让你更困惑,但希望能澄清 以下是“Linux网络编程权威指南”第31页的摘录: (谈论TCP报头的6位部分:URG、ACK、PSH、RST、SYS、FIN): ""... 当数据必须在带外传输时,会出现这种情况。。。这就是URG位是否起作用。考虑一个用户<强>希望中止< \强>的连接,例如……(等)。 这可能就是我想要的: 向utube发送带有“中止”的“URG”。 从本文中我唯一不清楚的是这个“中止”。这是“RST”还是什么


请把我推向正确的方向。

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

最好的方法是使用(或)命令创建不同的队列并对每个队列设置限制,并使用iptables将数据包分类到现有队列中的一个。这将为您提供最大的灵活性和更少的代码来编写:-)(这可能是您想要的,也可能不是您想要的)。我发现了一个新的方法,可以使所有这一过程变得更简单

示例和示例

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


如果您使用的不是Linux,而是Windows,那么您可能需要查看或查看现有的软件,例如

您可能还需要在www.serverfault.com上试试运气。