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 可直接对字段求和,配合统计选项得到每段时间内的有效载荷字节数。
小包占比高不一定是问题:交互型协议本身就依赖大量请求响应往返。