跳转至

Tcpdump

tcpdump 简介

回放报文

tcpdump -r old_file -w new_files '<capture filters>'

抓包丢包现象处理

造成这种丢包的原因是由于 libcap 抓到包后,tcpdump 上层没有及时的取出,导致 libcap 缓冲区溢出,从而覆盖了未处理包。也就是说 tcpdump 使用 libcap 将在 linux 内核协议栈中的数据包文件提取出来,放到 libcap 的缓存区内,tcpdump 处理 ibcap 缓存区内数据,而但 tcpdump 处理速度跟不上时,libcap 缓冲区内容就会被覆盖,从而产生丢包现象

  1. 最小化抓取过滤范围,即通过指定网卡,端口,包流向,包大小减少包数量

  2. 添加 -n 参数,禁止反向域名解析

  3. 添加 --buffer-size=409600 参数,加大 OS capture buffer size

  4. 指定 -s 参数, 最好小于 1000

  5. 将数据包输出到 cap 文件

  6. 用 sysctl 修改 SO_REVBUF 参数,增加 libcap 缓冲区长度 /proc/sys/net/core/rmem_default/proc/sys/net/core/rmem_max

sysctl -w net.core.rmem_default=16777216
sysctl -w net.core.wmem_default=16777216
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
  1. UDP buffer size 不足

使用 systemd 运行 tcpdump

参考资料