正文:
随着网络流量的日益增长,数据包捕获工具的性能问题日益凸显。这些工具需要从网络接口读取数据包、进行必要的处理,并将结果发送到磁盘或屏幕。看似简单的任务,在处理每秒数百万个数据包时却变得极具挑战。本文将介绍一些帮助数据包捕获程序跟上负载的常见技术,并通过Tcpdump、Zeek和Wireshark等三种常见的数据包捕获工具来展示这些技术的实际应用。这是本系列文章的第一篇,后续两篇将涵盖处理和输出。
### 小标题:问题测量
操作系统库(如Linux和Mac上的libpcap,Windows上的winpcap/Npcap)用于实现数据包捕获,它使用共享数据区来写入数据包(数据包捕获程序从中读取)。一旦数据包被捕获工具检索,该数据包所占用的空间就会被释放,以便其他传入的数据包使用。如果操作系统提供数据包的速度超过捕获工具读取的速度,那么空间将会填满。当空间被填满时,新到达的数据包将导致最旧的数据包被丢弃,库通过为每个丢弃的数据包增加计数器来记录这一点。当数据包捕获工具关闭时,它可以查询libpcap以获取一些统计信息,如“接收到的总数据包数”和“必须丢弃的数据包数”。如果捕获工具经常无法跟上,丢失的数据包可能占总接收数据包的5%到90%以上。如果工具在关闭时报告这种情况,应检查丢失率是否低于3%(可能可以接受)或高于5%(则需要寻找性能修复)。Tcpdump在关闭时会报告这些统计信息;以下是在运行Tcpdump时按下Ctrl-C的输出:
```
8392934 packets captured
92990354 packets received by filter
10466 packets dropped by kernel
```
在这个例子中,网络接口上到达了大约9300万个数据包。其中,大约有800万个被认为是有趣的(其他约8500万个数据包甚至没有交给Tcpdump进行处理;下文将介绍如何进行过滤)。仅有超过1万个被丢弃——内核收到了这些数据包并将它们放在Tcpdump可以看到的地方,但由于Tcpdump无法及时检索,因此这些数据包从未被处理。在这个例子中,由于Tcpdump运行速度过慢,0.12%的有用数据包丢失了。如果没有那个过滤器,Tcpdump将不得不处理超过11倍的数据包,几乎肯定无法跟上流量。
### 小标题:输入
首先,我们将查看来自网络接口的数据。在这个讨论中,我们只关注原始数据包流。数据包捕获工具需要能够以足够的速度从网络接口读取数据包,以便在数据包到达时能够及时处理它们。这通常涉及到优化网络接口的驱动程序和配置,以确保数据包能够以最高的效率传输到捕获工具。
### 小标题:结论
对于运维和网络工程师来说,了解数据包捕获工具的性能问题及其解决方案至关重要。通过测量和优化数据包捕获过程,可以显著提高网络监控和分析的效率,从而更好地维护网络性能和安全性。通过本文介绍的技术和工具,工程师可以更有效地处理大量数据包,减少数据丢失,并确保网络监控的准确性。
原文: APNIC Blog(2020-11-02)|编译自 APNIC Blog,事实以原文为准。
来源:APNIC Blog