使用网络链接调节器在 100% 数据包丢失时测试可达性:帮助我了解正在发生的事情



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

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,这是我没有预料到的。我读到很多抱怨,说可达性并没有真正测试连接性,而是测试连接性的潜力。我的问题是:

"100% Loss"是否允许对Apple服务器的DNS请求通过,但不允许任何数据包通过?

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

来自Apple的SCNetworkReachability参考:

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

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

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

重要:SCNetworkReachability API不打算用作确定网络连接的预运行机制。通过尝试连接来确定网络连接。如果连接失败,请参考SCNetworkReachability API来帮助诊断失败的原因。

最新更新