【问题标题】:What can be expected in terms of latency with tcp/ip over the loopback interface on windows?在 Windows 上环回接口上的 tcp/ip 延迟方面可以预期什么?
【发布时间】:2012-07-01 19:46:58
【问题描述】:

我正在测量 Windows 上通过环回接口的 TCP/IP 连接的延迟,并且从发送消息到收到响应的时间大约为 4 毫秒。

对于 RPC 目的,在 TCP/IP 之上有一个TCF 层。 除了 TCF 帧之外,发送和接收的消息仅包含一个字符作为有效负载。

处理命令的“服务器”是在 C++ 中使用 boost asio 实现的。 “客户端”发送命令是使用 Python TCF 参考实现的 Python 脚本。

我尝试将套接字选项设置为 TCP_NODELAY 以禁用 Nagle 算法,并尝试了套接字的各种缓冲区大小,但往返时间仍保持在 4 毫秒左右。我原以为它会低一些。

C++ 端的分析表明,它花费了大约 50% 的执行时间等待命令,因此下一步将尝试用 C++ 实现替换 python 脚本,但很高兴知道是什么可以预期回环接口上的往返时间。

这个 SO,问题:
Linux Loopback performance with TCP_NODELAY enabled 是相关的,但没有完全回答我的问题。

【问题讨论】:

  • 如果 C++ 端花费了大约一半的时间等待,那么大概它花费了大约一半的时间不等待。如果您对另一方假设相同,则估计延迟为零。所有时间都计算在内。一半的时间花在 C++ 代码的工作上。一半的时间都花在了 Python 代码的工作上。这样就没有时间双方都在工作,这就是在任何 TCP/IP 延迟期间都会发生的事情。 (发送方等待回复,接收方等待接收。双方都在等待。)
  • +1 @DavidSchwartz 的“Spock”​​回答
  • @DavidSchwarz:+1 我没想到 :-) 谢谢。不过,我非常想知道典型的 TCP/IP 往返时间应该是多少。
  • 在 C++ 中实现“客户端”后,命令/响应对的延迟降至 170µs。用手工制作的字符串 json 化替换对 json_spirit 的调用将其缩短到大约 150µs。

标签: c++ windows network-programming boost-asio loopback


【解决方案1】:

您可以使用ping localhost 建立延迟的下限。它报告的数字是发送一个数据包,接收一个数据包。

如果您的 TCP 消息是在现有连接上发送的,您可能会遇到几乎该延迟。

如果您测量的时间包括 TCP 连接设置,您可能会得到 10 倍的延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2021-04-17
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多