9

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

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;
    }
}

现在,当我使用 Network Link Conditioner 使用“100% Loss”预设测试此代码时 - 的值为netStatusis ReachableViaWWAN,这是我没有预料到的。我读到很多抱怨说可达性并没有真正测试连通性,而是测试连通性的潜力。所以这是我的问题:

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

4

1 回答 1

3

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

来自 Apple 的SCNetworkReachability 参考

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

所以如果接口是 up 并且 Reachability 可以发送一个包,它是满意的并返回状态可达。

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

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

于 2015-03-04T14:49:45.253 回答