在软路由器上, UDP 如何做流量控制?

261 天前
 tool2d
TCP 我知道,如果流量过大,网络过于拥挤,可以人为去减少 TCP 包头的 window size 参数。这样一来,网卡自然就会降低发送速度。

UDP 我没想明白,是按照一定比例,暴力丢弃包;还是把包延后几秒发送;还是干脆回怼几个大数据的 UDP 回去?

一些网盘软件不讲武德,后台暴力 UDP 发包上传太凶残了。
1050 次点击
所在节点    问与答
4 条回复
billlee
261 天前
tc 命令
tool2d
261 天前
@billlee 感谢,google 查了一下,似乎 tc 是采取随机丢包机制。UDP 协议设计问题,没有 tcp window 窗口的概念,不丢包似乎没办法减少客户端主动发送流量。

但还不能丢太少或太少,有些 UDP 设计上( KCP),就是为了抵抗网络丢包。你丢越多,它重发越多。

好像 iptables 也能随机丢包,用用还是挺方便的。
datocp
261 天前
平时不知道怎么生成 udp 流量,很多文档说 tc 只控制 tcp ,但是确实能命中 udp ,这么多年真不知道怎么验证 udp 流量控制是否有效。
tc 根据 htb 的 prio 优先级对不同的 dstport 进行优先级分级效果还是非常明显的,

udp_6060_0x10/0xff
tcp_992,1992,26241_0x10/0xff
udp_53,123_0x20/0xff
tcp_22,23,3389,8123_0x20/0xff
tcp_80,443,1080,1863,8080:8081,12000,14000,16285_0x30/0xff
udp_500,1701,4000:4030,4500,5989,8000:8001,16285_0x30/0xff
tcp_20,21,25,143,465,993,1024:65535_0x40/0xff
udp_1:65535_0x40/0xff

而且确实可以用 tc 来控制 30+40 分组上行流量到 95%,而且因为 prio 的存在,可以很好的让 p2p 流量避让常用的端口。

其它的针对单机不同端口像迅雷可以用这种 ddwrt 提供的方法
https://wiki.dd-wrt.com/wiki/index.php/Preventing_Brute_Force_Attacks

iptables -N rate_limit
iptables -F rate_limit
iptables -A rate_limit -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A rate_limit -p udp --dport 1194 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A rate_limit -p ICMP --icmp-type echo-request -m limit --limit 3/sec -j ACCEPT
iptables -A rate_limit -p <protocol> --dport <port> -m limit --limit <x/sec/min/hr> --limit-burst X -j ACCEPT
iptables -A rate_limit -p ! ICMP -j LOG --log-prefix " Connection dropped!! "
iptables -A rate_limit -p tcp -j REJECT --reject-with tcp-reset
iptables -A rate_limit -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A rate_limit -j DROP
ysc3839
261 天前
中间路由器一般不会去改 TCP 数据吧,一般是直接在 IP 层面丢包的,不分 TCP UDP 等

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

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

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

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

© 2021 V2EX