出去慢一点,回来丢下包
第一性原理分析:流量控制的底层逻辑
在 Linux 内核网络协议栈中,流量控制(TC)的工作位置如下:
- Egress (出向): 数据包离开网络层进入驱动队列前,由内核的
qdisc(排队规则)处理。因为拥有对发送队列的完全控制权,可以实现流量整形(Shaping),即延迟发送过快的包。 - Ingress (入向): 数据包由硬件驱动接收后直接上送。内核无法“减慢”物理链路传来的速度。因此,入向限速本质上只有两种手段:丢弃(Police) 或 重定向(Redirect)IFB 等 到虚拟接口模拟出向。
丢包的问题
Egress 有队列,可以缓冲,包发慢一点没关系
Ingress 就只能丢包了,这就只能重传了,毕竟重传率高了算是一种错误。
那怎么办,重定向大法 IFB 等,搞一个虚拟接口,利用它的 Egress 队列。