Linux Sniffer如何进行流量控制
小樊
33
2025-12-15 07:17:42
Linux Sniffer流量控制的正确思路
先明确概念与边界
- Sniffer(嗅探器)如 tcpdump、Wireshark、tshark、ngrep 的职责是捕获与分析流量,并不具备真正的流量整形/限速能力。若需要限制带宽、整形或模拟网络劣化,应使用 Linux 内核的 tc(Traffic Control) 等工具。tc 可基于 HTB(Hierarchical Token Bucket) 等算法进行带宽分配与整形,常与 netem 配合模拟延迟、丢包、抖动、乱序等网络状况。
使用 tc 进行限速与整形
- 典型目标:对网卡 eth0 的出方向限速为 5 Mbps,并允许短时突发到 6 Mbps。
- 步骤与命令:
- 清除旧规则
- tc qdisc del dev eth0 root 2>/dev/null || true
- 添加根队列(HTB)与默认类
- tc qdisc add dev eth0 root handle 1: htb default 30
- tc class add dev eth0 parent 1: classid 1:1 htb rate 5mbit ceil 6mbit
- 为默认类添加公平队列,避免单一连接占满带宽
- tc qdisc add dev eth0 parent 1:1 handle 10: sfq
- 如需按源/目的 IP、端口分流,再添加 filter(示例:按目的 IP)
- tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.100 flowid 1:1
- 说明
- HTB 用于带宽分配与整形(平均速率与突发),SFQ 用于队列公平,避免单流饥饿。
- 以上规则作用于出队方向(egress),即对从本机发出的流量生效;对入队方向(ingress)的精细控制受限,通常需借助 ifb 等技巧或上游设备配合。
使用 netem 模拟网络劣化
- 在已有限速基础上,加入 netem 可模拟广域网问题(注意:netem 也作用于出队方向):
- 固定延迟 100ms
- tc qdisc add dev eth0 parent 1:1 handle 20: netem delay 100ms
- 延迟 100ms ± 10ms 的抖动
- tc qdisc change dev eth0 parent 1:1 handle 20: netem delay 100ms 10ms
- 随机丢包 1%
- tc qdisc change dev eth0 parent 1:1 handle 20: netem loss 1%
- 查看与删除
- 查看:tc qdisc show dev eth0
- 删除:tc qdisc del dev eth0 root
- 组合示例:先限速 5 Mbps,再叠加 100ms 延迟与 1% 丢包,可用于弱网测试。
按用户/进程/端口分流与标记
- 思路:用 iptables 打标记(fwmark),再用 tc filter 按标记分流到不同 HTB 类,实现按用户、进程或端口的差异化限速。
- 示例步骤:
- 对来自某 IP 的流量打标记
- iptables -t mangle -A OUTPUT -d 203.0.113.10 -j MARK --set-mark 10
- 在 tc 中为标记 10 创建类与队列
- tc class add dev eth0 parent 1: classid 1:10 htb rate 2mbit ceil 3mbit
- tc qdisc add dev eth0 parent 1:10 handle 100: sfq
- 用 fwmark 将带标记的流量导入该类
- tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw classid 1:10
- 提示:也可结合 u32 等分类器做更细粒度匹配(如按端口、协议)。
监控与验证
- 实时带宽观测
- iftop:sudo iftop -i eth0
- nload:sudo nload eth0
- nethogs(按进程):sudo nethogs eth0
- 抓包验证策略是否生效
- 观察 RTT/丢包:sudo tcpdump -i eth0 -nn ‘icmp or port 80’
- 导出分析:sudo tshark -i eth0 -w test.pcap
- 性能基线测试
- 使用 iperf3 或 netperf 在限速前后做吞吐与时延对比,验证整形效果。