在内核空间中捕获数据包的缓冲区大小?

时间:2011-08-08 08:16:22

标签: linux unix networking network-programming linux-kernel

浏览tcpdump here的手册页 如果缓冲区已满,内核似乎可以丢弃数据包。 我想知道是否

1)该大小是可配置的和/或 2)我在哪里可以看到我的发行版的大小?

从手册页(以便参考):

数据包``由内核删除''(这是由于缺少缓冲区空间而丢弃的数据包数量,由运行tcpdump的操作系统中的数据包捕获机制,如果操作系统报告该信息应用程序;如果没有,则报告为0)。

2 个答案:

答案 0 :(得分:10)

您可以检查以下几个方面来缓解内核删除的数据包

  • 查看配置/proc/sys/net/core/netdev_max_backlog/proc/sys/net/core/netdev_budget。默认值可能很低;尝试将每个设置为2000。
  • 写入输出设备屏幕可能会阻塞/减慢tcpdump进程足够长的时间以填充recv缓冲区
    • 使用-nn关闭DNS查找和端口命名
    • 写入文件而不是屏幕
    • 尝试使用gulp
    • 等工具
  • 如果您有多处理器计算机,请查看使用taskset
  • 使用nice设置流程的优先级

即使使用这些设置,也可能只是因为您无法跟上您尝试捕获的流量速度。查看您的NIC和机器的详细信息,确保您的期望是可能的。

答案 1 :(得分:1)

1)它是可配置的,但不精确,因为它会根据您的请求确定合适的大小。

2)将setsockopt / getsockoptSO_RCVBUF / SO_SNDBUF

一起使用

我不熟悉linux,但似乎这个链接很好地解释了它。 http://linux.die.net/man/7/socket