【问题标题】:Slow DNS lookup on iOS simulatoriOS模拟器上的慢速DNS查找
【发布时间】:2011-12-24 18:03:14
【问题描述】:

我正在使用NSURLConnection 访问网络服务(在.local 主机上)。当我通过主机名访问主机时,我看到了 5 秒以上的延迟,但是当我通过 IP 访问它时,连接几乎立即完成。 在真正的 iPhone 而不是模拟器上运行应用程序根本不会显示任何延迟(测试是在相同的网络连接上完成的)。所以这似乎是 iOS 模拟器或 OS X 特有的问题。

我可以使用以下终端命令模拟问题:

nslookup webservice.myhost.local(速度很快)

dscacheutil -q host -a name webservice.myhost.local显示延迟

使用dscacheutil 命令的Wireshark 分析网络流量时,我看到几个Standard query AAAA 请求被标记为红色并得到一个空响应。完成这些操作后,我会看到一个 Standard query A 请求,它的响应包含正确的 IP 地址。 AAAA 请求大约需要 5 秒,这可以解释延迟。

【问题讨论】:

  • 您可以截取此类数据包并将其放在网络上的某个位置(例如,imageshack.us 或您自己的网站)。

标签: objective-c ios dns nsurlconnection


【解决方案1】:

Web 服务是否可能启用了 IPv6,而您不能在模拟器中使用它?

我在 OSX 上看到这一点,例如在运行本地 IPv4 的 DNS 服务时 - 如果我运行 dig @localhost 会挂起几秒钟,直到初始 IPv6 连接超时,然后 然后 它会尝试 IPv4 .

【讨论】:

  • 我认为问题确实与 IPv6 有关。这可能是问题所在吗? en.wikipedia.org/wiki/IPv6_brokenness 即使我在本地网络上?
  • 它不会是 DNS 白名单 - 这是内容提供商使用的一种技术,以确保只有已知的“工作”支持 IPv6 的 ISP 尝试通过 IPv6 发送用户。
  • 好的。好吧,我会把积分奖励给你,因为它肯定与 IPv6 相关。希望我的 IT 部门。将能够找出导致它的原因。如果有,我会更新帖子。
  • 您找到解决方案了吗?我目前正在开发一个 iPad 网络应用程序,这个 bug 真的很烦人,而且要花费很多时间。
【解决方案2】:

This answer 为我解决了这个问题。 (创建一个 IPv6 ::1 环回条目以与每个 127.0.0.1 一起使用。)

【讨论】:

    【解决方案3】:

    对于其他偶然发现此问题的人...我自己必须在我的机器上禁用 IPv6 以避免在 IPv6 失败时在模拟器中挂起。我按照以下说明进行操作:https://discussions.apple.com/message/18097613#18097613

    这是为了:

    “要在 OS X Lion 中禁用 IPv6,您需要使用终端。

    应用程序 > 实用程序 > 终端

    要确定 Mac 的所有网络接口是什么,请发出以下命令:networksetup -listallnetworkservices

    要为无线禁用 IPv6,请发出以下命令:networksetup -setv6off Wi-Fi;

    要为以太网禁用 IPv6,请发出以下命令:networksetup -setv6off Ethernet

    要重新启用 IPv6,请改用 -setv6automatic"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2018-02-13
      • 2013-11-02
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多