0

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

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

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

现在我正在寻找一种方法来将传入数据包表征/分类为这些类之一,以便我可以在其上运行基于 tc 的流量整形器。有什么提示吗?

4

1 回答 1

2

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

首先也是最重要的:当您谈到链路饱和时,在连接的接收端进行节流是没有意义的。当您看到数据包时,它已经消耗了资源。即使你是一座桥梁也是如此;你只能在出口接口上做任何智能的事情。

我不认为你会找到一个现成的产品来做你想做的事。您将不得不根据您在执行期间得出的规则将dummynet之类的东西修改为动态的,或者您将不得不使用一些现有的基础设施来编写动态软件路由器。我熟悉的是Click 模块化路由器,但还有其他的。我真的不知道事情会如何tc并且ipfw会对高频配置/重新配置做出反应 - 我怀疑很糟糕。

但是,有些事情您应该提前解决。无论实施如何,都会使这项任务变得困难的事情。例如,

  1. 您打算如何区分 scp bulk 和 ssh 交互行为?您会监控初始行为并基于此应用规则吗?
  2. 您提到了特定于 HTTP 的限制;这意味着 DPI。你能在这个网桥/路由器上支持它吗?您将支持多少类应用程序流量?
  3. 您打算如何处理争用?(您分配给“批量”流,每个流获得 30% 的容量,但有 10 个“批量”流试图消耗)
  4. 您会对链路容量进行硬编码还是对其进行测量?它是固定的还是会变化?

一般来说,您可以通过对网络 5 元组进行哈希处理来大致了解“流”。然而,一旦你开始处理应用程序语义,所有的赌注都没有了,你需要通过数据包的内容来获得你想要的东西。

如果您有更具体的目的,它可能会使其中一些观点变得毫无意义。

于 2011-02-01T15:02:54.743 回答