2011-11-22 63 views
0

我想通过发送与源IP具有相同目标IP的数据包来使系统的等待时间有多快。这是相对简单的事情吗?定时发送和接收相同的数据包

您将如何定制构建数据包?

会设置两个IP地址实现我后?

什么是最佳的计时方法?

任何提示/想法在低/高层次将不胜感激。我打算在升级库和libpcap上使用Unix上的C/C++。

编辑:我应该补充我会在家庭网络上做这个,在路由器后面。如果我使用192.168.2.1(我的系统的本地IP)作为源地址和目的地址,我认为数据包会进入路由器并直接返回。

+1

它可能根本不会打到路由器。网络驱动程序可能会注意到它们是相同的,因此无法在物理上达到网络。 – Matt

回答

0

你可以尝试ping你自己的IP。这会产生ICMP数据包。有些库也允许您从应用程序中执行相同的操作。

如果您想为自己创建数据包,则可以使用套接字API。请记住,您可以将源IP地址和目标IP地址发送为相同,但端口号需要不同。

您需要的时间可以使用gettimeofday函数。

编辑: 你可以 ping你的C++程序。请参阅:http://verplant.org/liboping/或查看其他论坛。我强调ping的原因是它从网络堆栈中直接返回。另一方面,如果您发送UDP数据包,期望应用程序返回并回显,则会添加侦听服务器上数据包的处理时间。

如果ping到本地计算机ip(或甚至lo),它会返回而不会转到下一跳路由器。即使您删除了您的eth电缆或wifi,它也会作出响应。

你正在做的是在NTP守护进程中用NTP协议实现。

+0

所以我从我的C++程序“平”? ICMP数据包将保留在网络堆栈中,或者转到路由器并返回? – user997112

+0

将我的答案附加到您的查询中。 –

+0

谢谢Dipan。出于好奇,你会知道我上面对约阿希姆的最后评论的答案吗? – user997112

0

您不需要为此定制软件包。只需创建一个连接到与服务器相同的IP地址的套接字,并开始发送包。请注意,这些软件包永远不会离开网络堆栈,因此您将要测量的基本上是系统在用户空间和内核空间之间复制数据的速度。

对于时机,您可以使用clock函数,它可能是最广泛用于此类事情的函数。

+0

嗨Joachim,你说我唯一不会测量的唯一东西就是包裹在媒体上的实际物理传递吗?如果是这样,那不是一个大问题。 – user997112

+0

@ user997112这是正确的。 –

+0

只是最后一个问题:我问这个问题的原因是因为我想了解更多关于高频交易的信息。从寻找额外速度的角度来看,linux网络堆栈已经得到了较好的优化。换句话说,你认为这是linux HF开发人员重写的部分之一吗?或者像TCP一样,这是否已经发展到尽可能高效? – user997112