Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 带宽限制(比如ipfw)是如何工作的?_Sockets_Network Programming_Ipfw - Fatal编程技术网

Sockets 带宽限制(比如ipfw)是如何工作的?

Sockets 带宽限制(比如ipfw)是如何工作的?,sockets,network-programming,ipfw,Sockets,Network Programming,Ipfw,我对制作带宽控制实用程序感兴趣,我需要动态限制传出或传入流量。为此,我可以使用ipfw管道,但这会创建对ipfw的依赖像ipfw这样的程序是如何在系统调用/套接字级别控制带宽的?我的目标是实现类似的功能,根据我的特定需求量身定制。所有带宽限制器都基于一个简单的原理工作——通过过滤(丢弃)数据包。但是,实现要复杂得多,需要对TCP/IP堆栈以及过滤不同类型流量的结果有很好的了解 带宽限制器是以一种称为令牌桶的东西为模型的。令牌(表示要发送或接收的数据)以固定的时间间隔添加到bucket中。由于如果

我对制作带宽控制实用程序感兴趣,我需要动态限制传出或传入流量。为此,我可以使用ipfw管道,但这会创建对ipfw的依赖像ipfw这样的程序是如何在系统调用/套接字级别控制带宽的?我的目标是实现类似的功能,根据我的特定需求量身定制。

所有带宽限制器都基于一个简单的原理工作——通过过滤(丢弃)数据包。但是,实现要复杂得多,需要对TCP/IP堆栈以及过滤不同类型流量的结果有很好的了解

带宽限制器是以一种称为令牌桶的东西为模型的。令牌(表示要发送或接收的数据)以固定的时间间隔添加到bucket中。由于如果bucket已满,则bucket的容量有限,因此会丢弃新的令牌(它们会溢出)。此存储桶用于管理通信量。如果bucket中有足够的令牌,则令牌的数量将减少到适当的数量(与数据包的大小成比例),并发送或接收数据包。如果bucket中没有足够的令牌,则丢弃数据包。这是一个基本的解释,请阅读更多或其他资源

有两种基本类型的交通量管理-警务和塑造。两者之间的基本区别在于,整形器有一个队列或缓冲区,可以保存一定数量的数据。如果由于令牌数量少而无法立即发送数据包,则数据包将放置在此缓冲区中,并在有足够的令牌后发送。此技术通常用于传出流量,而警务用于传入流量


之后,您应该想更多地了解不同的令牌桶机制,如何避免TCP流的全局同步,RED/WRED对非TCP流量的影响,以及许多其他与队列和QoS相关的内容。换句话说,我认为满足依赖性比实现所有这些更容易,因此我建议您使用已经有效的工具,并在它们之上构建您所需要的。

因此,不丢弃数据包就不可能限制传入流量的带宽?假设我们使用TCP,主机必须重新发送数据包,因为它没有收到ACK?