这是我的看法。
网络活动的副本被写入缓冲区,并snoop
从缓冲区读取。只要 snoop 能够足够快地获取数据(直接写入文件比写入终端或 er 更快bzip
),那么缓冲区就永远不会填满。
但是如果网络活动量很大,并且snoop
无法在数据进入时快速写出(无论出于何种原因),则snoop
必须等待,因此原始缓冲区就会变满。
如果缓冲区变大,会发生什么情况?
- 为了实现最大吞吐量,缓冲区会无限增大。
:-/
- 为了降低内存使用率,可能会排除一些数据。
:-o
- 为了获得稳定的结果,网络 I/O 会受到瓶颈限制,直到缓冲区中有更多空间。
B-)
我对 Solaris 特别感兴趣,但有关其他 UNIX 系统的信息也很有趣。
答案1
我认为监听程序丢弃数据包是为了在活动高峰期不延迟它们。
Snoop 提供了 -D 开关来显示捕获期间丢弃的数据包数量。
该 -s snaplen
交换机可用于在snaplen
字节后截断数据包捕获,这意味着在高流量期间缓冲区溢出的可能性较小。
手册页的警告部分也提到了这一点
实时数据包解释的处理开销要高得多。因此,数据包丢失数量可能会更高。为了获得更可靠的捕获,请使用 -o 选项将原始数据包输出到文件并离线分析数据包。