使用网络链路调节器测试可达性100%丢包:帮助我了解发生了什么

时间:2013-06-01 02:11:07

标签: cocoa networking reachability

帮助我了解在使用网络链接调节器测试可达性代码时所看到的内容。这是我的香草可达性代码:

Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];

switch (netStatus)
{
    case NotReachable:
    {
        NSLog(@"Access Not Available");
        break;
    }

    case ReachableViaWWAN:
    {
        NSLog(@"Reachable WWAN");
        break;
    }
    case ReachableViaWiFi:
    {
        NSLog(@"Reachable WiFi");
        break;
    }
}

现在,当我使用网络链接调节器使用“100%丢失”预设测试此代码时,netStatus的值为ReachableViaWWAN,这是我没想到的。我读了很多关于Reachability没有真正测试连接性的抱怨,而是测试连接的潜力。所以这是我的问题:

“100%丢失”预设是否允许向Apple服务器发出DNS请求,但不允许任何数据包通过?

1 个答案:

答案 0 :(得分:2)

这可能与以下事实有关:Reachability不保证数据包实际上可以到达目标主机。它是关于本地网络配置(接口上/下)以及它是否可以发送数据包。

来自Apple的SCNetworkReachability Reference

  

当应用程序发送到网络堆栈的数据包可以离开本地设备时,可以认为远程主机是可达的。可达性并不能保证主机实际接收数据包。

因此,如果接口已启动且Reachability可以发送包,则会满足并返回状态可达。

来自Apple的开发人员指南Why Networking is hard

  

重要提示:SCNetworkReachability API不用作确定网络连接的预检机制。您可以通过尝试连接来确定网络连接。如果连接失败,请参阅SCNetworkReachability API以帮助诊断故障原因。