首页/网络/抓包与流量分析速查/Wireshark 按 TCP 载荷长度过滤
Wireshark 技巧75 条

Wireshark 按 TCP 载荷长度过滤

tcp.len 表示 TCP 载荷字节数(不含头部):tcp.len==0 是纯 ACK/握手包,tcp.len>0 才是带数据的包,分析吞吐与重传时常用。

tcp.len 是什么

tcp.len 表示该 TCP 段携带的载荷字节数,不包含 TCP 头与 IP 头。tcp.len 为 0 的都是纯 ACK、握手或结束包,大于 0 才是真正传送数据的段。区分控制包与数据包、统计有效载荷、排查纯 ACK 占比过高的问题时,它是最直接的字段。

基本信息

适用工具Wireshark 3.x / 4.x
字段tcp.len,单位字节
对照字段frame.len 含所有头部;ip.len 是 IP 层总长度
常见取值以太网环境单段载荷通常在 1400 字节上下
配合字段tcp.analysis.duplicate_ack、tcp.stream

典型使用场景

  • 把携带数据的包与纯确认包分开,统计有效载荷比例
  • 判断某会话是否存在大量小包,评估协议效率
  • 定位接近满载荷的段,辅助判断 MTU 与聚合情况
  • 在排重传时排除纯 ACK 的干扰
  • 核对应用是否真的发送了预期的数据量

常用示例

常用示例
tcp.len > 0                                  # 只保留携带数据的段
tcp.len == 0                                 # 纯 ACK 与握手包
ip.addr == 10.0.0.9 && tcp.len > 1400        # 接近满载荷的分段
tcp.len == 0 && tcp.analysis.duplicate_ack   # 纯 ACK 中的重复确认
tcp.stream == 8 && tcp.len > 0               # 指定会话的数据段

过滤写法与用途

写法筛出内容用途
tcp.len == 0纯确认与握手包分析控制包比例
tcp.len > 0携带数据的段统计有效载荷
tcp.len > 1400接近满载荷的段观察分片与聚合情况
tcp.len == 0 且带重复确认重复 ACK定位丢包信号
tcp.len 与 frame.len 不是一回事:后者包含所有协议头部,统计有效数据量必须用 tcp.len。
重传段同样可能 tcp.len 大于 0,判断重传要看分析标记而不是长度。

补充要点

  • 把载荷长度与响应时间结合看,能判断慢在小包往返还是大包传输
  • 同一会话内的载荷长度分布反映协议特征,例如是否使用批量发送
  • 统计业务数据量时对载荷长度求和,比使用帧长更接近真实有效载荷
  • 抓包截断会让载荷不完整,此时长度显示正常但内容缺失
tshark 可直接对字段求和,配合统计选项得到每段时间内的有效载荷字节数。
小包占比高不一定是问题:交互型协议本身就依赖大量请求响应往返。

易错点

  • 用 frame.len 统计有效载荷,把头部字节也算进业务量,结论偏高
  • 看到大量 tcp.len 为 0 就判定协议低效:纯 ACK 占高的成因各有不同,需结合请求响应比判断
  • 忽略抓包点的截断(snaplen 过小),导致 tcp.len 显示正常但载荷内容缺失

数据来源与参考

  • Wireshark 显示过滤器参考(tcp.len)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌