流量整形的基于流量的流量分类

时间:2011-01-31 20:01:06

标签: linux iptables flow trafficshaping

我想知道是否有办法用linux实现基于流量的流量整形。 传统的流量整形方法似乎是基于为特定协议或需要高吞吐量的数据包类型(如ssh,http,SYN或ACK)创建类。

在这里,我希望将每个TCP连接视为以特定数据速率为特征的流。 会有

  • 快速流程,例如交互式ssh或IRC聊天和
  • 缓慢流量(批量数据),例如scp或http文件传输

现在我正在寻找一种方法来将传入数据包表征/分类到其中一个类,因此我可以在其上运行基于tc的流量整形器。任何提示?

1 个答案:

答案 0 :(得分:2)

由于您提到了一台专用计算机,因此我假设您正在从网桥进行管理,因此可以在系统的整个生命周期内访问整个数据包。

首先,当你谈到链路饱和时,在连接的接收端节流是没有意义的。当您看到数据包时已经消耗了资源。即使你是一座桥梁,这也是如此。你只能在出口界面上实际做任何聪明的事情。

我认为您不会找到一种能够完全按照您的要求进行的现成产品。您将不得不根据执行期间派生的规则修改dummynet之类的动态,或者您必须使用某些现有基础架构对动态软件路由器进行编程。我熟悉的是Click modular router,但还有其他人。我真的不知道像tcipfw这样的事情会对高频配置/重新配置做出反应 - 我怀疑是不好的。

然而,有些事情你应该提前解决。无论实施如何,将使这项任务变得困难的事情。例如,

  1. 您如何计划区分scp批量和ssh交互行为?您是否会监控初始行为并根据该规则应用规则?
  2. 你提到HTTP特定的限制;这意味着DPI。你能在这个网桥/路由器上支持吗?您将支持多少类应用程序流量?
  3. 您如何计划处理争用? (你分配'批量'流量到每个流量获得30%的容量,但获得10'批量'流量试图消费)
  4. 您是否会对链接容量进行硬编码或测量?它是固定的还是会变化的?
  5. 一般来说,只需对网络5元组进行哈希处理,就可以对“流程”有一个相当粗略的了解。然而,一旦你开始处理应用程序语义,所有的赌注都会关闭,你需要通过数据包内容来获得你想要的东西。

    如果你有更具体的目的,它可能会使这些点中的一些没有实际意义。