一行代码在软路由上,限制客户的 TCP 网速。

2023-11-08 16:46:25 +08:00
 tool2d
公司有免费 wifi ,没限速,可没想到有客户拿笔记本抖音直播。因为电信上传带宽极其有限,暴力使用就会造成集体卡顿。(下载无所谓,一般不会占满带宽)

于是,就想办法从软路由源头上限制一下。搜索了一下,发现 TCP 自带流量控制,是一个叫 window size 的变量。

原理是 [客户直播笔记本] 发送一个 TCP 包到 [软路由 PC ] ,这时候 [软路由 pc ] 会返回一个 [响应 ACK 数据包] ,如果里面 window size 很大,那代表软路由的网卡缓存富裕,暗示让客户直播笔记本使劲发送上传流量包。

如果里面的 window size 被修改了,变得很小很小,那么就暗示 [客户直播笔记本],目前无法处理新的 TCP 数据包,客户操作系统就会自觉降低发送 TCP 包的频率,从而降低上传流量。而这一切对客户来说,都是无感知的。

========

ipv4_header_t* ipv4_hdr = (ipv4_header_t*)(r_buffer + eth_len);
if (ipv4_hdr->ip_protocol == IPPROTO_TCP)
{
tcp_header_t* tcp_hdr = (tcp_header_t*)(r_buffer + eth_len + ipv4_len);

// 关键代码就这一句,实测网速限制效果,1024 = 700k/s, 2048 = 1300k/s, 4096 = 2300k/s, 8192 = 4100k/s
ushort window_size = 8192;
tcp_hdr->window = WORDSWAP(window_size);
}

在 github 搜了类似代码,是一个 tcp 包过滤器项目,编译后放到软路由上运行,效果很好。
711 次点击
所在节点    编程
1 条回复
lsylsy2
2023-11-08 16:48:33 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/989937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX