首页/网络/网络排障速查/协议级过滤:tcp/udp/icmp/arp/vlan

协议级过滤:tcp/udp/icmp/arp/vlan

按协议收窄抓包范围,并对 VLAN、MPLS、隧道封装叠加限定;协议限定词写在整个表达式最前面可读性较好。

网络排障速查网络更新于 2026-10-13

按协议收窄抓包范围

协议限定词把抓包范围从「所有报文」收窄到某一类:icmp 看通断与差错、arp 看二层地址解析、udp and port 53 看 DNS、ip proto 47 看 GRE 隧道。写在整个表达式最前面可读性最好。需要特别注意的是封装:以太网帧里如果有 802.1Q 标签,链路层结构会整体后移,不加 vlan 限定的大量表达式会直接匹配不到报文。

基本信息

适用平台Linux tcpdump(语法与 Wireshark 捕获过滤器一致)
常见协议词tcp、udp、icmp、icmp6、arp、ip、ip6、vlan、mpls、pppoes
二层写法ether proto 0x0806(等价于 arp)
隧道协议ip proto 47 为 GRE;VXLAN 走 UDP 4789
权限要求root 或具备 CAP_NET_RAW

典型使用场景

  • 确认 ARP 解析是否正常:抓 arp 看请求与应答是否成对
  • 排查 ICMP 差错报文:看是否有目标不可达或需要分片
  • 抓 DNS 流量:udp and port 53 观察查询与响应配对
  • 隧道排障:按外层协议过滤后再展开内层封装
  • 带 VLAN 标签的链路上抓业务流量:必须先写 vlan 再写 ip/tcp

协议过滤示例

协议过滤示例
sudo tcpdump -nn -i eth0 icmp                       # ICMP 差错与探测
sudo tcpdump -nn -i eth0 icmp6                      # IPv6 的 ICMP
sudo tcpdump -nn -i eth0 arp                        # 二层地址解析
sudo tcpdump -nn -i eth0 udp and port 53            # DNS 流量
sudo tcpdump -nn -e -i eth0 'vlan 100 and ip'       # 指定 VLAN 后再限定 IP
sudo tcpdump -nn -i eth0 'ip proto 47'              # GRE 隧道外层
sudo tcpdump -nn -i eth0 'ether proto 0x0806'       # ARP 的二层写法

协议词与用途

限定词匹配内容典型用途
icmp / icmp6ICMP 报文通断判断、差错报文分析
arpARP 请求与应答二层地址解析异常、IP 冲突排查
udp / tcp传输层协议区分传输方式,配合 port 收窄
vlan带 802.1Q 标签的帧Trunk 链路抓包的前置条件
ip proto 47GRE 协议隧道封装外层观察
mpls / pppoesMPLS 与 PPPoE 封装运营商或拨号链路场景
VLAN 标签会改变报文结构:不加 vlan 限定条件时,很多带标签的报文默认匹配不到 ip 或 tcp 表达式,表现为「抓不到包」。
抓 VLAN 时别忘了 -e:只有加上 -e 才会打印链路层头部,否则即使过滤条件正确,也看不到标签值与源目的 MAC,判读会缺关键证据。
封装叠加场景(如 VXLAN 承载带 VLAN 的业务流量)建议先按外层协议收窄范围落盘,再用显示过滤器逐层展开内层,确认每一层封装是否完整。

易错点

  • 带 VLAN 标签的链路上直接用 tcp 或 port 过滤:抓不到任何报文,误判成业务流量不存在,需先写 vlan
  • 在隧道口抓包看到的是外层封装:把外层地址当成业务流量分析,结论完全错误
  • 用 arp 与 ether proto 混写:两种写法语义相近但适用场景不同,混用容易造成表达式冗余或失效
  • 忘记 -e 选项:抓 VLAN 标签需要 -e 打印链路层头部,否则看到的结果缺少关键信息

数据来源与参考

  • pcap-filter(7):协议限定词
  • RFC 7348:VXLAN 封装

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌