Mac OS X 慢连接 - mdns 4-5 秒 - bonjour 慢
Mac OS X slow connections - mdns 4-5 seconds - bonjour slow
我终于束手无策了。我已经用谷歌搜索这个问题一个星期了。我已经尝试对我的 Mac (10.12 Sierra) 和我的域控制器 (Windows Server 2016) 进行故障排除,但我离解决问题还差得很远。
我的问题是,当使用 PHP 的 ldap_connect() 功能时,我需要大约 5 秒才能收到回复。事情只是挂起 5 秒钟,然后我就成功连接了。复制此命令的确切命令(假设我的 DC 的 IP 地址为 192.168.2.5
):
$ldap = ldap_connect('ldap://192.168.2.5:389');
我没有使用 SSL 或 TLS。它只是一个到 DC 的简单明文连接,其防火墙完全关闭。我最终在我的 DC 上安装了 Wireshark 以获取有关正在发生的事情的更多信息,我注意到了这一点:
No. | Time | Source | Destination | Protocol | Length | Info
1 | 327 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QU" question
2 | 328 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QM" question
3 | 331 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QM" question
4 | 332 | 192.168.2.108 | 192.168.2.5 | TCP | 78 | 49860 > 389 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=32 TSval=371626102 TSecr=0 SACK_PERM=1
5 | 332 | 192.168.2.5 | 192.168.2.108 | TCP | 74 | 389 > 49860 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 TSval=2494847497 TSecr=371626102
6 | 332 | 192.168.2.108 | 192.168.2.5 | TCP | 66 | 49860 > 389 [ACK] Seq=1 Ack=1 Win=131744 Len=0 TSval=371626102 TSecr=2494847497
7 | 332 | 192.168.2.108 | 192.168.2.5 | LDAP | 96 | bindRequest(1) "ldap" simple
8 | 332 | 192.168.2.5 | 192.168.2.108 | LDAP | 88 | bindResponse(1) success
如您所见,当我启动 ldap_connect()
函数时,我立即在 327 秒处看到第一个数据包(自 运行 Wireshark 以来)。我看到 3 个 mdns 数据包,总共 5 秒。然后在第四个、第五个和第六个数据包上,我看到了 TCP 三向握手,然后它继续给我一个成功的 ldap 连接。因此,我看到的 5 秒延迟是所有 mdns 数据包还是 Apple 的 Bonjour?在这一点上,我不知道如何解决这个问题。
免责声明:我正在使用 Laravel Valet,它使用 dnsmasq。我不知道这是否会导致我的问题。我还没有卸载这个软件还没找到。
编辑: 我已经排除了 Laravel 代客。我完全卸载了它,它仍然是一个问题。我也排除了 Laravel。我是 运行 这个脚本,但问题仍然存在:
<?php
$start = microtime(true);
$ldap = ldap_connect('ldap://192.168.2.5:389');
$end = microtime(true);
echo $end - $start;
edit2: 好的,我已经进一步解决了这个问题。我在我的 Mac 上安装了 Wireshark 并注意到了下面的内容。
然后我 运行 这个命令:
➜ ~ scutil --dns
DNS 配置
resolver #1
search domain[0] : corp.[redacted].com
nameserver[0] : 192.168.2.4
nameserver[1] : 192.168.2.5
if_index : 7 (en3)
flags : Request A records
reach : Reachable, Directly Reachable Address
resolver #2
domain : local
options : mdns
timeout : 5
flags : Request A records
reach : Not Reachable
order : 300000
这是我的主机名!我的主机名在尝试使用多播 DNS 解析它时导致了 5 秒的延迟。为什么? .local
是保留域,为什么 Apple 会将其附加到我的主机名?
如您所见,它会自动附加 .local
.
无论如何,我已经通过将 127.0.0.1 Ryans-MacBook-Pro.local
添加到我的 /etc/hosts
文件来解决我的问题。由于某种原因,它不在那里。
我的 ldap_connect()
现在应该是即时的!
确保您的主机名在 /etc/hosts
文件中,如下所示:
127.0.0.1 localhost Ryans-MacBook-Pro.local
只需将我的主机名替换为您的即可。
我终于束手无策了。我已经用谷歌搜索这个问题一个星期了。我已经尝试对我的 Mac (10.12 Sierra) 和我的域控制器 (Windows Server 2016) 进行故障排除,但我离解决问题还差得很远。
我的问题是,当使用 PHP 的 ldap_connect() 功能时,我需要大约 5 秒才能收到回复。事情只是挂起 5 秒钟,然后我就成功连接了。复制此命令的确切命令(假设我的 DC 的 IP 地址为 192.168.2.5
):
$ldap = ldap_connect('ldap://192.168.2.5:389');
我没有使用 SSL 或 TLS。它只是一个到 DC 的简单明文连接,其防火墙完全关闭。我最终在我的 DC 上安装了 Wireshark 以获取有关正在发生的事情的更多信息,我注意到了这一点:
No. | Time | Source | Destination | Protocol | Length | Info
1 | 327 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QU" question
2 | 328 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QM" question
3 | 331 | 192.168.2.108 | 224.0.0.251 | MDNS | 83 | Standard query 0x0000 A Ryans-MacBook-Pro.local, "QM" question
4 | 332 | 192.168.2.108 | 192.168.2.5 | TCP | 78 | 49860 > 389 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=32 TSval=371626102 TSecr=0 SACK_PERM=1
5 | 332 | 192.168.2.5 | 192.168.2.108 | TCP | 74 | 389 > 49860 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 TSval=2494847497 TSecr=371626102
6 | 332 | 192.168.2.108 | 192.168.2.5 | TCP | 66 | 49860 > 389 [ACK] Seq=1 Ack=1 Win=131744 Len=0 TSval=371626102 TSecr=2494847497
7 | 332 | 192.168.2.108 | 192.168.2.5 | LDAP | 96 | bindRequest(1) "ldap" simple
8 | 332 | 192.168.2.5 | 192.168.2.108 | LDAP | 88 | bindResponse(1) success
如您所见,当我启动 ldap_connect()
函数时,我立即在 327 秒处看到第一个数据包(自 运行 Wireshark 以来)。我看到 3 个 mdns 数据包,总共 5 秒。然后在第四个、第五个和第六个数据包上,我看到了 TCP 三向握手,然后它继续给我一个成功的 ldap 连接。因此,我看到的 5 秒延迟是所有 mdns 数据包还是 Apple 的 Bonjour?在这一点上,我不知道如何解决这个问题。
免责声明:我正在使用 Laravel Valet,它使用 dnsmasq。我不知道这是否会导致我的问题。我还没有卸载这个软件还没找到。
编辑: 我已经排除了 Laravel 代客。我完全卸载了它,它仍然是一个问题。我也排除了 Laravel。我是 运行 这个脚本,但问题仍然存在:
<?php
$start = microtime(true);
$ldap = ldap_connect('ldap://192.168.2.5:389');
$end = microtime(true);
echo $end - $start;
edit2: 好的,我已经进一步解决了这个问题。我在我的 Mac 上安装了 Wireshark 并注意到了下面的内容。
然后我 运行 这个命令:
➜ ~ scutil --dns
DNS 配置
resolver #1
search domain[0] : corp.[redacted].com
nameserver[0] : 192.168.2.4
nameserver[1] : 192.168.2.5
if_index : 7 (en3)
flags : Request A records
reach : Reachable, Directly Reachable Address
resolver #2
domain : local
options : mdns
timeout : 5
flags : Request A records
reach : Not Reachable
order : 300000
这是我的主机名!我的主机名在尝试使用多播 DNS 解析它时导致了 5 秒的延迟。为什么? .local
是保留域,为什么 Apple 会将其附加到我的主机名?
如您所见,它会自动附加 .local
.
无论如何,我已经通过将 127.0.0.1 Ryans-MacBook-Pro.local
添加到我的 /etc/hosts
文件来解决我的问题。由于某种原因,它不在那里。
我的 ldap_connect()
现在应该是即时的!
确保您的主机名在 /etc/hosts
文件中,如下所示:
127.0.0.1 localhost Ryans-MacBook-Pro.local
只需将我的主机名替换为您的即可。