用TCP / IP术语来说,办公室中的下载速度限制器如何工作?


8

假设有一个办公室,他们希望将HTTP下载限制为互联网连接速度的最大40%带宽,以免阻止其他流量。

我们说“您的防火墙不支持它”,并且他们说不可避免的话“我们过去能够通过Netgear / DLink / DrayTek做到这一点”。

考虑一下,下载是这样的:

HTTP GET request
Server sends file data as TCP packets
Client acknowledges receipt of TCP packets
Repeat until download finished.

速度取决于服务器向您发送数据的速度以及您确认数据的速度。

因此,要限制下载速度,您有两种选择:

1)指示服务器更慢地向您发送数据-我认为没有任何协议功能可以在TCP或HTTP中请求它。

2)通过限制您的上传速度来更慢地确认数据包,并且还会破坏您的上传速度。

设备如何进行此限制?有没有标准的方法?


速率限制了接收到的数据包从防火墙到LAN的允许速度,从而导致较慢的确认速度,并且发送服务器的TCP堆栈中的拥塞处理限制了发送速度。谢谢。我可以让它像样地工作。我已经投票了几个答案,但是我只能将其中一个标记为答案。
TessellatingHeckler,

Answers:


11

TCP本身实现了拥塞控制。

这些速率限制器将简单地丢弃超出限制的数据包。TCP对此进行处理,以确保所有数据包都到达并且所有数据包都按顺序到达;客户端不对丢弃的数据包进行ACK,服务器将其重新发送。

服务器的TCP堆栈将重新发送数据包,并且还会回拨其发送速率,因为它认为服务器与客户端之间存在拥塞。它将加快速度,直到速率限制器再次丢弃数据包,依此类推。


因此,我应该应用QoS策略速率限制,以限制防火墙在/ LAN /接口上吐出HTTP通信量的速度如何?然后让TCP处理它。“它也会在发送速率上回一点”,这是我缺少的另一部分。
TessellatingHeckler

2
是的,没错。服务器可以继续在您的链路上抛出数据,并在应用QoS之前将其饱和-但是,只要它是一个良好的TCP公民,它的发送速率将与它的数据实际通过该速率的速率建立近似的平衡。速率限制。
Shane Madden

是的,TCP实现了它自己的拥塞控制,但不一定那么有效。任何具有torrent经验的人都知道这一点。基本上,当网络上有数百个活动连接时,大多数TCP拥塞控制实现都会崩溃。
2011年

1
@ user606723如果激流是一个问题,则应在出口处使用数据包整形器来丢弃该流量。这将使Torrent与跟踪器断开连接,并使其他下载同一Torrent的人不会因连接淹没您的入口。问题解决了。
MDMarra 2011年

1
@ user606723为什么会这样,当通过快速启动的TCP始终启动成千上万个连接时,拥塞控制将面临艰巨的挑战,因为新连接对它们正在建立的连接状态一无所知。数百个活动连接吗?也许这会拖垮一个缓慢的主页链接..
巴蒂尔马登

5

我听说过的关于TCP固有节流方法的最佳描述是最近的Security Now播客。引用史蒂夫·吉布森的话:

因此,按照通用协议,TCP是一个非常聪明的协议,它执行了一种称为“慢启动”的操作。通常,没有经过确认就可以发送一定数量的数据包。所以想法是,让我们把事情搬到这里。通常,这个数字是两个。因此,当TCP启动时,它可以发送两个数据包,一个接着一个。在没有第一个被确认的情况下,它将发送第二个。但是然后等待。然后限制的规则是,我们允许未收到的数据包的数量对于收到的每个确认增加一个。

因此,让我们考虑一下。对于收到的每个确认,我们允许未确认的数据包数量增加一。因此,在我们同意的开始时,我们首先发送两个数据包。他们得到承认。因此,我们有第一个确认。我们允许自己发送两个。现在,在收到第一个确认后,我们将其增加一到三。因此,我们现在可以再发送三个数据包,而无需任何进一步的确认。当收到对我们之前发送的所有内容的确认再次出现时,我们将其增加到四个。这就是所谓的“拥塞窗口”。它不是在线上发送过的窗口,也就是说,它与接收窗口不同,它是TCP报头的16位,告诉我们我们可以发送多少数据。这是-这是一扇窗户。它'

如果我们将每次收到确认后允许发送的未确认数据包的数量不断增加,则在某个时候我们将达到极限。这个系统的优点在于,当我们开始尝试以比路由器之间最弱的链接(实际上是链接)更快的速度发送数据包时,我们会在某个时候找到最弱的链接断开的地方。它会丢弃我们尝试发送的数据包,因为我们试图将其发送得太快。因此,来自另一端的确认停止了,因为数据不再通过。

TCP的工作是,如果它无法接收-这在策略上有所不同。随着时间的流逝,该策略,实际的避免拥塞策略已经发生了很大变化。如果您进行了Google搜索和Wikipediaing等操作,就会看到诸如Tahoe和Reno之类的名字,还有很多其他名字,它们具体说明了行为的本质。但是想法是,当发件人意识到由于丢失了确认而不再通过其数据时,它将迅速降低其发送速率。通常,它将其分成两半。因此,它可以显着地缩小规模,然后又回升到更大的比例。

因此,从本质上讲,这意味着丢失数据包是“我们无法更快地发送数据”的信号功能,并且连接两端的TCP发送器(整个Internet上)始终都是-试图超越两个端点之间的最大速度,即最弱的链接(无论在哪里),并且它们总是将其推向极限。因此,鉴于某处某个点比其发送数据包的能力弱,他们将找到它,因为它们会将数据包抽出。只要有要发送的数据并且它们具有高带宽连接,发送方就会提高发送速率,即未完成的数据包的数量,即允许在运行中立即存在的数据包作为确认回来,积极地向上移动该数字,直到将其推得太远。然后它退缩很多,然后再次向前移动。

因此,这实际上是TCP连接之间发生的事情,大概我不知道该占多少百分比,但是Internet上绝大部分流量都是通过TCP连接。我们所有位于内核中的操作系统(即所谓的TCP堆栈)都具有这些计数器。当我们发送文件,上传大文件或接收网页时,另一端的服务器也在做同样的事情。它会在单个连接的基础上尽可能多地推送尚未确认的数据包,从而提高数据包速率,直到达到开始出现故障或卡顿的地步。然后退出,以使事情恢复,然后再次开始备份。

因此最终成为一种自我节制的系统,在受到限制的情况下,我的意思是说,这确实显得有些时髦和粗鲁。”


3

因此,要限制下载速度,您有两种选择:

1)指示服务器更慢地向您发送数据-我认为没有任何协议功能可以在TCP或HTTP中请求它。

2)通过限制您的上传速度来更慢地确认数据包,并且还会破坏您的上传速度。

3)您的路由器/防火墙设备将传入数据放入QoS存储桶,并仅以您请求的速率清空该存储桶。传入的数据将适应该速度,因为内部计算机将仅以该速度看到确认收据。另外,偶尔(故意)丢弃的数据包对于减慢连接速度确实非常有效。

尝试查找可解决此问题的设备时,请在配置/文档中查找QoS(服务质量)。Linux(或BSD)盒也很方便。


那几乎是有道理的-因此,该技术是限制确认率,并通过向LAN设备假装服务器发送的速度比实际速度慢来限制发送速度?那么首先会有一个突发填充连接,然后再不填充呢?
TessellatingHeckler

1
@TessellatingHeckler是的,就是这样。另外,“爆裂”不应该由en.wikipedia.org/wiki/Slow-start提供很大的爆裂。
杰夫·费兰德

2

您使用支持QoS(服务质量)限制的防火墙或设备。

您可以构建一个Linux系统来充当办公室网关,并使其使用流量整形来实现此目的。只需安装多个NIC,然后每台计算机都将其作为网关。

另外,您可以在其上配置代理服务器以帮助缓解流量。像鱿鱼。可能会有交钥匙路由设备发行版也可以做到这一点。


QoS有何帮助?当您的设备可以将QoS应用于下载时,传入的流量已经通过Internet连接到达,并可能在这样做时将其阻塞。QoS可以应用于传出流量,但是它不能对传入流量做任何事情,因为到看到流量时,为时已晚。
TessellatingHeckler

3
它可以在您可以控制的地方调整流量。您无法告诉远程服务器限制数据获取的速度,但是可以在入口点降低数据的速度。否则,您将不得不与您的提供商讨论他们对Feed进行的网络流量整形。
Bart Silverstrim

代理服务器也可以帮助缓解一些拥塞。但是否则,您将不得不在入口点对其进行调整。
Bart Silverstrim

我最初的问题是:您似乎无法在入口点进行调整,因为您可以应用的任何控制措施都会在流量通过瓶颈后发生,请问有多少技术可以解决?“应用QoS,例如在Linux上应用QoS”和“使用流量整形”实际上可能是要做的,但是我一直在寻找一种解释,以帮助解决问题。(现在有其他答复)。
TessellatingHeckler,

@TessellatingHeckler:我喜欢的方法还启用了ECN的使用,它实际上确实告诉发送服务器在不丢失数据包的情况下使其速度降低。此方法是将速率限制器(例如RED)应用于在LAN接口上的数据包,而不是尝试在WAN接口上使用入口过滤器。
Zan Lynx

2

HTTP协议没有提供限制使用的带宽的工具,即使这样做,这也将是客户端设置,网络管理员无法对此进行控制。

带宽限制(也称为“服务质量”)通常在路由器/防火墙上进行管理,路由器/防火墙处理进出网络的所有传入和传出流量。支持此功能的策略通常可以让您配置策略,例如“让任何一台客户端计算机最多使用所有可用带宽的10%”或“给予FTP优先于FTP的SMTP优先级,以便即使有人进行繁重的下载,电子邮件也可以畅通无阻”。

具体实现的方式取决于所使用的路由器/防火墙,但是最基本的方法是丢弃超出配置限制的数据包;否则,请执行以下操作。TCP将确保它们被重新传输,并最终将能够克服瓶颈。

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.