当TCP用于本地IPC时,环回快捷方式不适用于OSX for IPv6地址

时间:2016-02-09 00:22:28

标签: linux macos sockets tcp loopback

我正在使用TCP套接字在同一台机器上运行的应用程序之间进行本地IPC。

在这个IPC中交换的数据非常简单:客户端发送一个4字节的请求,服务器发送一个128kB的响应,这基本上是在一个紧凑的循环中发生的。

现在,如果我打开到127.0.0.1或:: 1的连接,我会通过环回获得预期的快捷方式,如this question中所述,并且延迟非常低。

如果我打开与192.168.0.2(机器的本地v4地址)的连接,则会发生同样的事情。网络堆栈看起来足够智能,可以检测到它是同一台机器并且延迟非常低。

现在,如果我打开与我的机器的任何全局v6地址的连接(无论临时与否都无关紧要),如果我在OSX(10.11.3)上,则延迟会大大增加,但不会在Linux上。似乎Linux足够聪明,可以检测到它可能正在使用环回并加快速度,而OSX无法通过v6地址实现这一点。

总结:

  • 127.0.0.1:快到处都是
  • 本地v4地址:快到处
  • 本地v6地址:Linux上速度快,OSX速度慢

这是OSX的已知缺陷,还是Linux正在做一些不应该做的事情?

编辑:我是否使用TCP_NODELAY选项没有区别。

0 个答案:

没有答案