如何进行 TCP 转储以保证所有真正通过网络的数据包都被捕获,并且没有遗漏?
详细信息:我们遇到了第 3 方供应商的问题,他们在 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 个硬件线程
网络:10 GBit,流量在位于一个机架中的 HP 刀片之间。
RHEL 6。