tool2d
V2EX  ›  问与答

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

  •  
  •   tool2d · Mar 6, 2024 · 1795 views
  •   You need to sign in to view this topic
    This topic created in 946 days ago, the information mentioned may be changed or developed.
    TCP 我知道,如果流量过大,网络过于拥挤,可以人为去减少 TCP 包头的 window size 参数。这样一来,网卡自然就会降低发送速度。

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

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

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

    好像 iptables 也能随机丢包,用用还是挺方便的。
    datocp
        3
    datocp  
       Mar 6, 2024 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  
       Mar 6, 2024 via Android
    中间路由器一般不会去改 TCP 数据吧,一般是直接在 IP 层面丢包的,不分 TCP UDP 等
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4000 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:18 · PVG 18:18 · LAX 03:18 · JFK 06:18
    ♥ Do have faith in what you're doing.