如何进行 TCP 转储,以保证捕获所有真正通过网络的数据包并且不会遗漏任何内容?
详细信息:我们遇到了第三方供应商的问题,该供应商在 SCTP 堆栈之上提供了解决方案,并实施了该解决方案。
在相当高的吞吐量(52 000 条消息/秒,平均消息大小为 500 字节)下,SCTP 链路中断。
我们认为错误出在供应商 SCTP 堆栈中。
但供应商表示,发生这种情况的原因是 SCTP 堆栈发送了一条消息,没有收到 ACK,发送了多次重新传输,也没有收到 ACK,并关闭了 SCTP 链路。
因此,供应商表示,这是网络的问题,因为它丢失了数据包。
在客户端和服务器双方的 TCP 转储中,我们看到原始消息到达了服务器,并且服务器没有用 ACK 进行响应。但是供应商表示 TCP 转储并不可靠,在捕获 TCP 转储时,可能无法捕获某些数据包,因为 libpcap 库仅在一个硬件线程内工作,其功能不足以记录所有数据包。
技术数据:52 000 条消息/秒,平均消息大小为 500 字节,因此总共 26 MB/秒,使用 4 条 SCTP 链路。
硬件:CPU E5-2670,2.6 GHz,8 个 HW 线程
网络:10 GBit,流量在 HP 刀片之间,这些刀片位于一个机架中。RHEL
6。
答案1
根据您的流量,我认为 libpcap 应该不会遇到丢包问题,除非您的设置特别低效。如果您使用 libpcap 进行tcpdump
捕获,它将在其最终输出行中报告丢包数量。如果您看到丢包,您可能需要通过提供以下信息来增加 tcpdump 的缓冲区大小选项-B
设置一个远高于默认值 2 MB 的值。
尽管如此,你可能需要看看PF_RING:
谁需要 PF_RING™?
基本上,每个人都需要每秒处理许多数据包。术语“许多”根据您用于流量分析的硬件而变化。范围从 1.2GHz ARM 上的 80k pkt/sec 到低端 2.5GHz Xeon 上的 14M pkt/sec 及以上。PF_RING™ 不仅使您能够更快地捕获数据包,而且还能更有效地捕获数据包,从而节省 CPU 周期。仅给出一些数字,您可以看到 nProbe(NetFlow v5/v9 探测器)使用 PF_RING™ 的速度有多快,或者查看下表。
在 Core2Duo 1.86 GHz 和低端 Xeon 2,5 Ghz 上执行 10 Gigabit 测试
ixgbe
Application Rate
pfcount (RX, with PF_RING™ DNA) 11 Mpps (Core2Duo), 14.8 Mpps (Xeon)
pfsend (TX, with PF_RING™ DNA) 11 Mpps (Core2Duo), 14.8 Mpps (Xeon)
这PF_RING 用户指南如果您坚持使用 libpcap 应用程序进行数据包捕获,请解释如何编译和配置支持 PF_RING 的 libpcap 库。