我想通过发送与源IP具有相同目标IP的数据包来计算系统延迟的速度。这样做比较简单吗?
您如何自定义构建数据包?
设置两个IP地址会实现我的目标吗?
什么是最好的计时方法?
非常感谢任何低/高级别的提示/想法。我打算在Unix上使用C / C ++和boost库以及libpcap。
编辑:我应该补充一点,我将在家庭网络上,在路由器后面这样做。我假设如果我使用192.168.2.1(我的系统的本地IP)作为源地址和目标地址,数据包将转到路由器并直接返回。
答案 0 :(得分:0)
您不需要自定义程序包。只需创建一个连接到与服务器相同的ip-address的套接字,然后开始发送包。请注意,这些包永远不会离开网络堆栈,因此您将测量的基本上是系统在用户空间和内核空间之间复制数据的速度。
对于时间安排,你可以使用clock
函数,它可能是最常用的函数。
答案 1 :(得分:0)
您可以尝试ping自己的IP。这将产生ICMP数据包。有些库也允许您从应用程序中执行相同的操作。
如果您想为自己创建数据包,可以使用套接字API。请记住,您可以将源IP地址和目标IP地址发送为相同,但端口号需要不同。
对于时间安排,您需要使用gettimeofday
功能。
编辑: 你可以从你的C ++程序ping。请参阅:http://verplant.org/liboping/或查看其他论坛。我强调ping的原因是因为它从网络堆栈返回。如果另一方面发送UDP数据包,期望应用程序返回并回显,则会添加侦听服务器上数据包的处理时间。
如果您ping到本地计算机ip(甚至是lo
),它将返回而不会转到交换机或下一跳路由器。即使您移除了eth电缆或wifi,它也会响应。
您尝试执行的操作是使用NTP协议在NTP守护程序中实现的。