运行Ubuntu。
我有A台->机B(从A到B的单向连接).机器A的目标是将tcp数据包转发给机器B (它没有tcp与机器B的连接,它只是转发从其他机器获得的tcp数据包),在机器A中有c++代码根据业务规则收集一些tcp数据包,然后用原始套接字将它们写入机器B。
我想在机器A上对我的代码进行性能测试,因此为了做到这一点,我需要向机器A发送大量的TCP数据包--我的c++代码将把它们转发给B。最后,我将验证所有数据包都在机器B中恢复。您对工具有什么建议吗?模拟大规模发送的工具和有助于断言的工具(可以通过数量、校验和、任何其他想法来断言)
我认为在上传大文件文件到A转储上传流量,而不是重播它与tcpreplay (我将创建100个线程,重播相同的上传转储,以便有大量的tcp流)。为了验证,我将分析接收方上的tcpdump,以检查它是否具有与发送的数据包相同的例外数量。
这并不是关于tcp,因为协议只生成真正的tcp数据包(作为结构),发送大量的数据包,并通过比较有效负载或数量或任何其他方式进行验证。有什么建议吗?
发布于 2012-08-08 16:36:08
我有A台->机B(从A到B的单向连接).我需要发送大量的TCP数据包从A到B,并验证所有的数据包恢复。你对工具有什么建议吗?
我推荐TCP,它确保数据的reliable, ordered delivery。
(您要求我们提供一个工具来完成底层协议已经完成的任务。)
还请注意,TCP本质上是双向的:ACKs必须从机器B被送回A机。“单向连接”是不可能的--没有ACKs意味着传输将永远停止。
我认为在上传大文件从A到B(当他们有双向连接时这样做)转储流量从A到B,而不是重播它与tcpreplay (我将创建100个线程将重播它,以便有大量的tcp流)。为了验证,我将分析接收方上的tcpdump,以检查它是否具有与发送的数据包相同的例外数量。
TCP不是那样工作的。由于窗口/MTU大小不同、丢弃和重发分组、延迟ACK(导致几个分组的双重传输)等原因,有线上的分组计数可能有所不同。
你不能只是把相同的数据推到电线上,期望它以完全相同的方式工作--在实践中,这通常是有效的(并且是重放攻击的基础),但是TCP是由状态机管理的,您确实需要对每个连接执行这些操作。
如果您需要生成大量TCP流量,而不关心这些数据,则只需启动多个流,将数据发送到远程系统上的侦听器(这可能只是丢弃它)。
如果您关心数据,您应该按照lasrks的建议做,并在接收到的数据退出TCP/IP堆栈后对其进行校验.
https://serverfault.com/questions/415608
复制相似问题