温馨提示×

Ubuntu Sniffer怎样进行流量整形

小樊
42
2025-12-25 17:54:31
栏目: 智能运维

Ubuntu Sniffer与流量整形的正确做法

概念澄清

  • **Sniffer(嗅探器)**的职责是抓取与分析网络数据包,例如 tcpdump、Wireshark/dumpcap。这类工具本身不提供带宽限速或整形能力。若需要“整形”,应使用 **Linux 内核的流量控制子系统 tc(iproute2)**来限速、整形与排队;嗅探器只负责观测与抓包。

使用 tc 进行流量整形的标准做法

  • 安装工具(通常已预装):sudo apt-get install iproute2
  • 典型目标与命令(示例对网卡 eth0 操作,请按实际接口名替换):
    • 简单限速(令牌桶 TBF,适合“总带宽封顶”)
      • 命令:sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
      • 说明:将接口总出队速率限制在 1 Mbps,突发 32 kbit,队列延迟 400 ms
    • 分级整形(HTB,适合按业务/主机/端口分配带宽)
      • 命令:
        • 根队列:sudo tc qdisc add dev eth0 root handle 1: htb default 30
        • 总带宽类:sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 2mbit
        • 受限子类(示例:限制某业务/主机为 1 Mbps):sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
        • 过滤器(示例:按源 IP 分流到子类 1:10):sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.100 flowid 1:10
  • 查看与调整
    • 查看:tc -s qdisc ls dev eth0;tc -s class ls dev eth0;tc -s filter ls dev eth0
    • 调整/删除:先 tc qdisc del dev eth0 root 再按需要重建;或针对具体句柄/类进行调整。

按方向整形的要点

  • 物理/虚拟以太网接口(如 eth0、ens, enp)**上,tc 默认整形的是“从该接口发出的流量”(出站/上传)。
  • 要限制“进入本机的流量”(入站/下载),常见做法是在上行设备(如路由器、网关、veth 对端、桥接上游)上做整形,或使用 ifb 伪设备在本机对入站流量进行“重定向后再整形”。
  • 虚拟机/云主机场景,通常需在宿主机或虚拟交换机/路由器侧实施限速策略,效果更可靠。

与嗅探器配合的实用流程

  • 仅观测不整形:用 tcpdumpdumpcap 抓包分析,例如:sudo tcpdump -i eth0 -w capture.pcap;sudo dumpcap -i eth0 -w capture.pcap
  • 观测+整形的组合:先用 tc 对接口做限速/整形,再用 tcpdump/dumpcap 抓包验证效果与丢包/时延变化(例如观察 pcap 时间戳抖动、重传/丢包指示)。
  • 限速后抓包验证:在整形生效后抓取同一接口,对比整形前后的吞吐、抖动与丢包特征,以确认策略是否按预期工作。

简化工具与注意事项

  • 简化工具:若不想手写 tc,可考虑更友好的封装如 Wondershaper(基于 tc 的上/下行限速脚本),适合快速落地常见限速需求。
  • 重要提示:
    • 整形会影响时延与吞吐,生产环境应先在测试环境验证,逐步调参(rate/ceil/burst/latency)。
    • 下载方向的整形通常需要上游设备或 ifb 介入;在云/虚拟化环境优先在网关侧配置。
    • 抓包与限速都可能需要 sudo 权限;变更前记录当前 qdisc 状态,变更后及时校验与回滚预案。

0