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

Mat*_*ler 8 networking cocoa 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我使用网络链接调节器使用"100%损失"预设测试此代码时 - 值netStatusis ReachableViaWWAN,这是我没想到的.我读了很多关于Reachability没有真正测试连接性的投诉,而是测试了连接的可能性.所以这是我的问题:

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

wrt*_*prt 3

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

来自 Apple 的SCNetworkReachability 参考

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

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

来自苹果开发者指南《为什么网络很难》:

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