Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于在内核空间捕获数据包的缓冲区大小?_Linux_Unix_Networking_Network Programming_Linux Kernel - Fatal编程技术网

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

Linux 用于在内核空间捕获数据包的缓冲区大小?,linux,unix,networking,network-programming,linux-kernel,Linux,Unix,Networking,Network Programming,Linux Kernel,浏览tcpdump的手册页 如果缓冲区已满,内核似乎可以丢弃数据包。 我想知道 1) 该大小是可配置的和/或 2) 我在哪里可以看到发行版的大小 从手册页(便于参考): packets`` dropped by kernel'(如果操作系统向应用程序报告该信息,则由于缺少缓冲区空间,运行tcpdump的操作系统中的数据包捕获机制丢弃的数据包数;如果操作系统未向应用程序报告该信息,则报告为0).1)它是可配置的,但并不完全是根据您的要求决定合适的大小 2) 使用setsockopt/getsock

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

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

从手册页(便于参考):

packets`` dropped by kernel'(如果操作系统向应用程序报告该信息,则由于缺少缓冲区空间,运行tcpdump的操作系统中的数据包捕获机制丢弃的数据包数;如果操作系统未向应用程序报告该信息,则报告为0).

1)它是可配置的,但并不完全是根据您的要求决定合适的大小

2) 使用
setsockopt/getsockopt
SO\u RCVBUF/SO\u SNDBUF

我不熟悉linux,但这个链接似乎很好地解释了这一点。

您可以检查几个方面来缓解内核丢弃的数据包:

  • 查看配置
    /proc/sys/net/core/netdev_max_backlog
    /proc/sys/net/core/netdev_budget
    。违约率可能相当低;尝试将每个设置为2000左右
  • 写入输出设备屏幕可能会阻塞/减慢
    tcpdump
    进程,时间足以填满recv缓冲区
    • 使用
      -nn
      关闭DNS查找和端口命名
    • 写入文件而不是屏幕
    • 尝试一种工具,例如
  • 如果您有一台多处理器机器,请查看如何使用
    taskset
  • 使用
    nice
    设置流程的优先级

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

谢谢您的回答。我尝试了你的建议,得到的答案大约是48kb。这似乎不对。它是套接字缓冲区的大小,而不是内核用于接收数据包的缓冲区大小。谢谢你的辛勤工作。修改/proc/sys/net/core/netdev_max_backlog为我做到了这一点。这里的离题问题如果您碰巧看到这条评论,为什么在unix中写入文件要比写入屏幕快/好,而在unix中这两种文件实际上都是文件?我不是专家,但我想这可以归结为两种情况下都可以使用的缓冲技术。我相信如果你问一个正式的问题,你会得到一个更明确的答案;)我可以问一个正式的问题,但我需要确保情况确实如此。您目前是否有任何第一手经验/案例研究,您在哪里观察到了这一点?我真的很想知道答案,如果写入文件而不是屏幕更快。感谢您抽出时间回答我的问题。这将非常依赖于输出设备。使用
gnome终端
vs
aterm
在我的机器上快速运行,设置为在大量下载时捕获100000个数据包:
gnome终端
(到文件):20丢弃
gnome终端
(到屏幕):27217丢弃
aterm
(到文件):0丢弃
aterm
(到屏幕):0dropped@Anon:ezpz是对的,写入文件可能比写入屏幕快得多。写入“屏幕”实际上意味着写入PTY,PTY的缓冲区大小非常有限。如果PTY另一侧的显示程序读取速度不够快,则该缓冲区将填满,并且对PTY的写入将开始阻塞。大多数显示程序都比磁盘慢(磁盘也有更大的缓冲区)。