Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 定时发送和接收相同的数据包_C++_C_Unix_Boost - Fatal编程技术网

C++ 定时发送和接收相同的数据包

C++ 定时发送和接收相同的数据包,c++,c,unix,boost,C++,C,Unix,Boost,我想通过发送与源IP具有相同dest IP的数据包来计算系统延迟的速度。这样做相对简单吗 您将如何定制数据包 设置这两个IP地址会达到我的目的吗 什么是最好的计时方法 任何低/高级别的提示/想法都将不胜感激。我打算在Unix上使用C/C++以及boost库和libpcap 编辑:我应该补充一点,我将在家庭网络上,在路由器后面做这件事。如果我使用我系统的192.168.2.1本地IP作为源地址和目标地址,我假设数据包将进入路由器并直接返回。您不需要自定义数据包。只需创建一个与服务器连接到同一ip地

我想通过发送与源IP具有相同dest IP的数据包来计算系统延迟的速度。这样做相对简单吗

您将如何定制数据包

设置这两个IP地址会达到我的目的吗

什么是最好的计时方法

任何低/高级别的提示/想法都将不胜感激。我打算在Unix上使用C/C++以及boost库和libpcap


编辑:我应该补充一点,我将在家庭网络上,在路由器后面做这件事。如果我使用我系统的192.168.2.1本地IP作为源地址和目标地址,我假设数据包将进入路由器并直接返回。

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


对于计时,您可以使用该功能,它可能是最广泛用于此类事情的功能。

您可以尝试ping到自己的IP。这将产生ICMP数据包。还有一些库也允许您从应用程序执行同样的操作

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

对于所需的计时,可以使用gettimeofday函数

编辑: 你可以从你的C++程序中提取。查看:或者查看其他论坛。我之所以强调ping,是因为它从网络堆栈返回。另一方面,如果您发送UDP数据包,希望应用程序返回并回显,则侦听服务器上的数据包处理时间会增加

如果您ping到本地机器ip或lo,它将返回,而不必切换或下一跳路由器。即使您移除eth电缆或wifi,它也会响应


不过,您要做的是用NTP协议在NTP守护进程中实现。

Hi Joachim,您是说我唯一不会测量的是通过介质的数据包的实际物理传递吗?如果是的话,那不是什么大问题。最后一个问题:我问这个问题的原因是因为我想了解更多关于高频交易的信息。从寻找额外速度的角度来看,linux网络堆栈是否已经进行了大量优化。换句话说,您认为这是linux HF开发人员重新编写的部分之一吗?或者,像TCP一样,这是一个已经发展到尽可能高效的东西吗?我没有权威这么说,但是从任何应用程序的角度来看,我相信Linux的网络堆栈是最高效的。大部分性能和通常更重要的可扩展性将来自于在应用层设计中高效地处理响应,最容易处理消息,以及通过高效路由创建更多的资源服务器。感谢Dipan,这很好,因为我不太确定我是否能够重新编写Linux!那么我从我的C++程序ping?ICMP数据包将保留在网络堆栈上,或转到路由器并返回?请将我的答案附加到您的查询中。谢谢。出于好奇,你知道我上面对约阿希姆的最后一句话的答案吗?它可能根本不会击中路由器。网络驱动程序可能会注意到它们是相同的,并将其复制到in,因此甚至无法实际到达网络。