Linux Sniffer怎样进行带宽管理
导读:Linux Sniffer与带宽管理的关系与思路 Sniffer(如 tcpdump、Wireshark、tshark)的职责是捕获与分析流量,并不具备带宽限制/整形能力。若需进行带宽管理,应使用Linux 内核的流量控制工具 tc(配合...
Linux Sniffer与带宽管理的关系与思路
- Sniffer(如 tcpdump、Wireshark、tshark)的职责是捕获与分析流量,并不具备带宽限制/整形能力。若需进行带宽管理,应使用Linux 内核的流量控制工具 tc(配合队列调度器如 HTB、fq_codel),必要时再结合 iptables mangle 做标记与分类。简言之:嗅探 ≠ 限速,限速由 tc 完成,嗅探用于观测与验证。
用 tc 实现带宽管理的核心步骤
- 基本要素
- qdisc(队列规则):决定报文何时出队,如 HTB(分层令牌桶,用于限速/整形)、fq_codel(主动队列管理,AQM,降低排队延迟)、pfifo_fast(默认三带 FIFO)。
- class(类别):在 qdisc 下细分带宽与优先级,用于给不同业务分配不同速率。
- filter(过滤器):按 IP、端口、协议、DSCP 等将流量送入对应 class。
- 常用命令范式(示例)
- 查看与清理
- 查看:tc qdisc show dev eth0;tc class show dev eth0;tc filter show dev eth0
- 清理:tc qdisc del dev eth0 root
- 典型限速/整形(HTB)
- 根 qdisc 与默认类:tc qdisc add dev eth0 root handle 1: htb default 30
- 父/子类带宽:tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit;tc class add dev eth0 parent 1:1 classid 1:30 htb rate 10mbit
- 按端口定向:tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 8080 0xffff flowid 1:1
- 叶子队列防单一连接占满:tc qdisc add dev eth0 parent 1:1 handle 10: sfq perturb 10
- 延迟/丢包模拟(netem,用于测试而非生产限速)
- tc qdisc add dev eth0 root netem delay 100ms 10ms
- tc qdisc add dev eth0 root netem loss 1%
- 查看与清理
- 关键参数理解
- rate:保证带宽(长期平均速率)
- ceil:突发上限(短时间可借用的上限)
- burst/cburst:突发缓冲大小,影响短时突发能力
- sfq:公平队列,打散长连接,避免单流霸占 以上命令与概念适用于在 出/入方向 建立分层带宽策略与队列管理,实现精细化限速与整形。
按场景给出可直接使用的 tc 示例
- 限制某主机下载带宽(出方向)
- tc qdisc add dev eth0 root handle 1: htb default 30
- tc class add dev eth0 parent 1: classid 1:1 htb rate 50mbit
- tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit ceil 10mbit
- tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.100 flowid 1:10
- tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
- 限制某服务端口的上行带宽(出方向)
- tc qdisc add dev eth0 root handle 1: htb default 30
- tc class add dev eth0 parent 1: classid 1:1 htb rate 200mbit
- tc class add dev eth0 parent 1:1 classid 1:20 htb rate 20mbit ceil 40mbit
- tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 443 0xffff flowid 1:20
- tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
- 降低排队延迟(AQM,出方向)
- tc qdisc add dev eth0 root handle 1: fq_codel
- 说明:fq_codel 通过主动控制队列长度来抑制缓冲膨胀、降低 RTT,适合对延迟敏感的业务。
- 入站限速思路(若需)
- 物理入站通常难以直接限速,可采用ifb 伪设备将入站流量重定向为“出方向”再限速,或在上游设备/网关侧实施限速策略。 以上示例展示了 HTB 分层限速 + SFQ 公平队列 的常用组合,以及 fq_codel 在降低排队延迟方面的应用;端口/主机匹配通过 u32 过滤器完成。
用 Sniffer 验证限速效果与排障
- 实时观测
- 接口级带宽:nload、iftop
- 按连接/进程:nethogs
- 抓包分析:tcpdump、tshark(如:tcpdump -i eth0 -nn port 443)
- 验证要点
- 观察速率是否接近设定的 rate/ceil,突发是否受 burst/cburst 影响
- 检查是否有单连接占满带宽,确认 sfq 是否生效
- 关注 RTT/抖动,验证 fq_codel 是否降低排队延迟
- 性能与准确性优化(嗅探侧)
- 降低抓包负载:tcpdump 仅抓必要端口/主机(如:tcpdump -i eth0 port 80)
- 增大网卡 ring buffer:ethtool -G eth0 rx 2048 tx 1024
- 提升内核 backlog:sysctl -w net.core.netdev_max_backlog=16384
- 适当增大 MTU/Jumbo 帧(如:ip link set dev eth0 mtu 9000),并确保对端一致 这些工具与手段可帮助你在限速策略上线前后进行量化验证与瓶颈定位。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Sniffer怎样进行带宽管理
本文地址: https://pptw.com/jishu/762791.html
