V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tool2d
V2EX  ›  问与答

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

  •  
  •   tool2d · 266 天前 · 1056 次点击
    这是一个创建于 266 天前的主题,其中的信息可能已经有所发展或是发生改变。
    TCP 我知道,如果流量过大,网络过于拥挤,可以人为去减少 TCP 包头的 window size 参数。这样一来,网卡自然就会降低发送速度。

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

    一些网盘软件不讲武德,后台暴力 UDP 发包上传太凶残了。
    4 条回复    2024-03-06 21:53:34 +08:00
    billlee
        1
    billlee  
       266 天前 via Android
    tc 命令
    tool2d
        2
    tool2d  
    OP
       266 天前
    @billlee 感谢,google 查了一下,似乎 tc 是采取随机丢包机制。UDP 协议设计问题,没有 tcp window 窗口的概念,不丢包似乎没办法减少客户端主动发送流量。

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

    好像 iptables 也能随机丢包,用用还是挺方便的。
    datocp
        3
    datocp  
       266 天前 via Android   ❤️ 1
    平时不知道怎么生成 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
        4
    ysc3839  
       266 天前 via Android
    中间路由器一般不会去改 TCP 数据吧,一般是直接在 IP 层面丢包的,不分 TCP UDP 等
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.