我目前正在为 ISP 级公司开发流量整形解决方案,并遇到了一个有趣的(有点哲学的)问题。
考虑到系统应处理的端点数量(大约 20k),我有点担心当我需要为更多用户制定策略/调整流量时会发生什么。由于我目前在整个网络使用 HFSC 调整树(参见 tc-hfsc,与更知名的 HTB 大致相同但更酷),我需要使用更多 ClassID(显然网络上的每个用户至少需要一个)。我发现的问题是 TC ClassID 有点有限 - 它们是 16 位数字,这使我可以通过此解决方案调整最多 64k 个用户。
同样,如果我想高效地管理 TC 过滤器(例如不使用“全部清除技术”),我需要能够删除或修改单个过滤器条目。(我使用的是类似于 LARTC [1] 中的哈希表)。同样,唯一可行的方法是使用单个优先级对所有过滤器进行编号(tc filter add dev ... prio 1)。没有其他参数可用于此目的,遗憾的是,prio 也只有 16 位。
我的问题是:是否存在一些扩大可用“标识符空间”的好方法,例如“tc class”命令的 32 位 clsid,以及“tc filter”命令的 32 位优先级(或任何其他修改句柄)?
非常感谢,
-mk
(顺便说一句,我希望这不会出现“64k 个用户对每个人来说应该足够了”的情况……)
答案1
我认为您不应该将 64k 个用户以及每个用户的上行和下行类别和过滤器放在同一个接口上。您可以重复每个接口的处理程序,因此请添加更多接口。您需要一个令人难以置信的工作/服务器/NIC 来实现这些功能。如果服务器崩溃,您将有 64k 个用户离线(并且它会在如此大的流量下很容易崩溃)。不要忘记,通过网卡的每个数据包都将由过滤器检查和分类,并发送到要排队的类别。对于拥有 64k 个客户的 ISP 网关的 NIC 来说,这是一项艰巨的工作。主要是因为我们现在拥有的所有视频流(很难正确排队)。
答案2
您可以将流量处理拆分到两台机器(使用第三台机器),而不是在一台机器上处理所有流量。流量可以简单地根据源 IP 地址进行路由。因此,如果您可以均匀划分 IP 范围,那么您将拥有最佳的 10k 个用户。
当然,如果需要,您可以使用两台以上的机器。我认为这可能比修补 Linux 内核和进行其他一些黑客攻击更好。简而言之,流量整形将分布在几台机器上。中央节点只会将流量转发到正确的处理节点。