这是一个创建于 409 天前的主题,其中的信息可能已经有所发展或是发生改变。
公司有免费 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 包过滤器项目,编译后放到软路由上运行,效果很好。
1 条回复 • 2023-11-08 16:48:33 +08:00
|
|
1
lsylsy2 2023-11-08 16:48:33 +08:00 1
|