linux – 使用pcap vs raw socket捕获性能
捕获网络流量以进行调试时,似乎有两种常见方法:
>使用原始套接字. 在性能方面,这两种方法之间有很大差异吗? libpcap似乎是一种很好的兼容方式来收听真实的网络连接或重放一些固定数据,但是这个功能集是否会带来性能损失? 解决方法
答案旨在解释有关libpcap的更多信息.
libpcap使用PF_PACKET来捕获接口上的数据包.请参阅以下链接. 从上面的链接 在Linux 2.4 / 2.6 / 3.x中,如果未启用PACKET_MMAP,则捕获过程非常紧凑 性能改进可能因使用PF_PACKET实现而异. 从https://www.kernel.org/doc/Documentation/networking/packet_mmap.txt – 据说TPACKET_V3带来以下好处: 使用libpcap的缺点 – >如果应用程序需要保存数据包,则可能需要进行此操作 请参阅pcap_next_ex的联机帮助页. pcap_next_ex()读取下一个数据包并返回成功/失败指示.如果数据包读取没有问题,指针 PF_PACKET用作内核中的抽头,即所有传入和传出的数据包都被传送到PF_SOCKET.这导致对所有传出数据包进行昂贵的packet_rcv调用.由于libpcap使用PF_PACKET,因此libpcap可以捕获所有传入和传出的数据包.如果应用程序只对传入的数据包感兴趣,那么可以通过在libpcap句柄上设置pcap_setdirection来丢弃传出的数据包. libpcap通过检查数据包元数据上的标志在内部丢弃传出的数据包.所以本质上,libpcap仍然可以看到传出的数据包,但以后才会被丢弃.对于仅对传入数据包感兴趣的应用程序,这是性能损失. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |