使 TCP 转储不丢失数据包

Nei*_*our 4 networking linux tcpdump sctp

如何进行TCP转储,保证真正通过网络的所有数据包都被捕获,并且没有遗漏?

详细信息:我们与在 SCTP 堆栈之上提供解决方案的第 3 方供应商有问题,他也实施了该解决方案。
在相当高的吞吐量(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 个硬件线程
网络:10 GBit,流量在位于一个机架中的 HP 刀片之间。
瑞尔 6.

the*_*bit 8

对于您的流量,我会声称 libpcap 不会有丢包的问题,​​除非您的设置效率特别低。如果您tcpdump用于捕获,它将在其最终输出行中报告丢弃的数据包数量。如果你看到丢弃的数据包,您可能希望通过提供增加的tcpdump的缓冲区大小-B选项设置值大大高于默认的2 MB。

不过,您可能想看看PF_RING

谁需要PF_RING™?

基本上每个人都必须每秒处理许多数据包。术语“许多”根据您用于流量分析的硬件而变化。它的范围可以从 1.2GHz ARM 上的 80k 包/秒到低端 2.5GHz Xeon 上的 14M 包/秒及以上。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)
Run Code Online (Sandbox Code Playgroud)

如果您坚持使用 libpcap 应用程序进行数据包捕获,PF_RING 用户指南解释了如何编译和配置启用 PF_RING 的 libpcap 库。