上一节认识了器械,本节解决语言问题:抓包现场的每个行话都对应协议栈里一个确切的层次或对象,混用它们就等于在解剖台上把皮肤和肌肉说成一回事。本节是第 3 章讲流水线、第 4 章逐层下刀的术语地基,也是后面所有显示过滤器字段名的语义来源。
一条消息从应用出发到网线上,经历了层层"套装":应用数据交给 TCP,切成段、加上 TCP 头;段交给 IP,加上 IP 头成为包;包交给网卡,套上以太网头尾成为帧。倒过来读一帧,就是解剖的顺序——从最外层的帧头剥起。
frame 也是所有字段的公共父层。$ tshark -r first.pcapng -c 1 -V Frame 1: 74 bytes on wire (592 bits), 74 bytes captured Interface id: 0 (eth0) Arrival Time: Sep 4, 2026 10:15:22.331402000 Epoch Time: 1756954522.331402000 seconds Ethernet II, Src: 88:C9:D0:11:22:33, Dst: aa:bb:cc:dd:ee:ff Destination: aa:bb:cc:dd:ee:ff Source: 88:C9:D0:11:22:33 Type: IPv4 (0x0800) Internet Protocol Version 4, Src: 192.168.31.14, Dst: 223.5.5.5 Version: 4, Header Length: 20 bytes Protocol: UDP (17) User Datagram Protocol, Src Port: 51822, Dst Port: 53 Domain Name System (query) Transaction ID: 0x8f3a Flags: 0x0100 Standard query Queries: www.example.org: type A, class IN
同一个帧,-V 让解析引擎把四层全部展开:Frame 是帧信息(含精确到微秒的时间戳),Ethernet 是链路层,IPv4 是网络层,UDP 是传输层,DNS 是应用层。tcpdump 眼里的同一帧则压缩成一行:
$ tcpdump -nn -r first.pcapng -c 1 reading from file first.pcapng 10:15:22.331402 IP 192.168.31.14.51822 > 223.5.5.5.53: 36410+ A? www.example.org. (30)
两相对照能看出"文本摘要"与"结构化解剖"的差别:tcpdump 给结论,Wireshark 给组织。
源 IP、目的 IP、协议、源端口、目的端口,五个字段合称五元组,唯一标识一条单向连接;双向合起来就是一次会话。它是过滤、统计、追踪的最小坐标:
$ tshark -r first.pcapng -T fields -e ip.src -e ip.dst -e ip.proto -e udp.srcport -e udp.dstport -c 3 192.168.31.14 223.5.5.5 17 51822 53 223.5.5.5 192.168.31.14 17 53 51822 192.168.31.14 93.184.216.34 6 51822 80
第三行 proto 变成 6(TCP 的协议号),端口栏换成了 tcp 字段——proto 17 是 UDP。用五元组做显示过滤是日常动作:
ip.addr == 192.168.31.14 && tcp.port == 80
ip.addr 同时匹配源和目的,&& 是逻辑与。这条过滤器筛出的,就是这台主机与 80 端口之间的全部往来帧。

行话的价值在实操里兑现。用五元组做一次完整的"圈案"演练——案情:怀疑主机 192.168.31.14 与订单服务 203.0.113.25 之间的 443 流量有问题。
# 第 1 步:五元组过滤,双向全部圈进来 $ tshark -r suspect.pcapng -Y "ip.addr==192.168.31.14 && ip.addr==203.0.113.25 && tcp.port==443" \ -T fields -e tcp.stream | sort -u 0 5 11 <- 两台机器之间有三条流(三次独立连接) # 第 2 步:分流观察,哪条流可疑 $ tshark -r suspect.pcapng -Y "tcp.stream in {0 5 11}" -T fields \ -e tcp.stream -e frame.len | awk '{s[$1]+=$2; c[$1]++} END {for (k in s) print k, c[k], s[k]}' 11 312 219k <- 流 11 包数不多字节最多:传输主力 0 18 9k <- 流 0 只有 18 包:短命连接,查握手是否完成 # 第 3 步:把行话翻译给同事 # "31.14 到 25 的 443,第三条流是主力传输;第一条流握手后很快关闭—— # 疑似连接被复用前的首连失败,重连后成功。"
第 3 步是最容易被跳过的一步:行话的终点是把技术事实翻译成案情语言。会写过滤器是基本功,会说"三流五包短命连接"才是勘验员之间的交流。
**问:帧和包到底该怎么跟同事说?**口语里混用没人纠错,但写报告时建议统一:涉及链路层现象(MAC、VLAN、镜像口)说帧,涉及路由与地址(IP、分片)说包。用词分层,读者能立刻知道你在哪一层说话。
**问:tcp.stream 编号会变吗?**会——它是解析器按"出现顺序"编的(3.3 节的会话状态),同一文件在不同过滤器下打开,编号不变;但两个文件各有一条"流 0",不是同一条流。跨文件引用流要带五元组,别只报编号。
行话备齐,下一节看这张解剖台日常受理的四类案子各自要什么证据、问什么问题。