特定平台的网络技术 <- 网络概述

作者: raingu24 | 来源:发表于2017-07-07 21:37 被阅读9次

    iOS和OS X中的网络技术非常相似,大多数网络应用几乎不要求特定于平台的代码。但是,你应该知道两者还是有所不同的。

    在iOS中,你可以使用特定平台的网络API来处理捕获网络的验证,并可以指定VoIP网络流。还有,iOS网络应用更有可能在多个设备上运行(通常使用蜂窝网络以及Wi-Fi连接),并且需要在应用进入后台的时候清理网络连接。

    在OS X中的网络环境是高度可配置和可扩展的。系统配置(System Configuration)框架提供用于确定和设置当前网络配置的API。此外,网络内核扩展允许你通过添加类似防火墙或VPN这样的功能,来扩展OS X的核心网络基础架构。

    本章描述这些与特定平台有关的差异。

    iOS要求你处理后台并指定蜂窝网络使用策略

    这部分描述了网络技术以及特定于iOS的技术,包括关于捕获网络支持的信息、后台、以及仅连接Wi-Fi等内容。

    正确地限制蜂窝网络

    有两种方法防止通过蜂窝网络发送连接。要基于应用的要求和目的选择方法。

    在SCNetworkReachability API中的kSCNetworkReachabilityFlagsIsWWAN标记,告诉你如果应用连接到特定主机,哪个接口将可能被使用。但是这个标记可能会被误导,因为:

    • Wi-Fi信号可能会在应用检查可达性之后、连接之前消失。
    • 不同的主机可能被不同的接口访问。你不能信任一个对多个主机都有效的可达性检查(并且你不能信任对虚拟IP地址的可达性检查,例如0.0.0.0)。
    • 同一主机的不同IP地址,可能会被不同接口访问。如果远程主机同时有IPv4和IPv6地址,iOS通常会尝试同时连接两个地址,然后使用最先创建的连接,并取消对另一个连接的尝试。如果用户的蜂窝网络提供IPv6并且用户的Wi-Fi网络没有提供,则可以使用蜂窝网络或Wi-Fi连接,这取决于哪个连接更快。注意:在iOS 6中,如果Wi-Fi被作为IPv4或IPv6的主要接口,则蜂窝网络就不会被作为这两者的主要接口,所以这个特殊情况只是特定于iOS 5及更早版本。

    如果应用必须绝对避免通过蜂窝连接发送数据,应用必须在创建连接的时候明确的声明限制策略。如果你以询问的方式使用可达性(比如,在使用蜂窝网络下载较大的电影之前询问用户),你还应该考虑将蜂窝网络的连接禁用。如果连接失败,请求用户对使用蜂窝网络发送数据的许可,并在没有上述标记的情况下再次尝试。

    在Foundation层,你可以使用NSMutableURLRequest的setAllowsCellularAccess:方法来指定是否一个请求能通过蜂窝网络连接发送。你还可以使用allowsCellularAccess来检查当前的值。

    在Core Foundation 层,你可以在打开一个数据流(从CFSocketStream 或 CFHTTPStream APIs获取)之前通过设置kCFStreamPropertyNoCellular属性来实现相同的效果。

    在老版本的iOS中,你可以继续使用kSCNetworkReachabilityFlagsIsWWAN作为确定是否使用蜂窝网络连接发送流量的一种方式,但你应该知道它的局限性。

    正确地处理后台

    当应用在后台时它可以被挂起,这意味着它不能长时间处理网络流量。在一些情况下,当应用被挂起的时候,已经存在的连接会被关闭。要了解应对后台的技术,请阅读Networking and Multitasking。

    正确地注册VoIP sockets

    NSInputStream, NSOutputStream, CFStream, 和 NSURLConnection API有对VoIP通信的内建支持。这个支持允许你为VoIP注册TCP连接,以便如果应用被挂起,在数据到达时该应用会被唤醒。

    更多信息,阅读App Programming Guide for iOS中的Implementing a VoIP Application。

    为捕获的网络支持注册

    捕获网络是Wi-Fi网络,它在用户执行某些操作(例如登录、指定支付、或统一条款及条件)之前是不能提供网络访问的。捕获网络通常是在公共区域,例如机场和酒店。

    当用户加入一个捕获网络,Captive Network Support(捕获网络支持)通常会提供一个用于允许用户使用网络的认证网页表单。如果你的应用注册了捕获网络的SSID,但是该网页被禁用,该用户可以在你的应用中完成认证。

    更多信息,请阅读CaptiveNetwork Reference。

    OS X让你进行全系统更改

    下面的部分介绍了在何处能了解在OS X中使用网络接口,以及开发扩展网络堆栈的网络核心扩展。

    开发网络设置应用程序

    如果你想在用户级别的应用程序中修改当前的网络配置,使用System Configuration框架。

    想要了解关于System Configuration的架构,请阅读System Configuration Programming Guidelines。然后阅读 System Configuration Framework Reference来了解可用的API。

    如果你的应用程序专门使用Wi-Fi连接到无线网络,你可以使用Core WLAN框架。更多信息,请阅读CoreWLAN Framework Reference。

    开发网络内核扩展

    如果你想修改或扩展OS X的网络基础架构,例如实现一个自定义防火墙、自定义VPN、或者一个带宽管理系统,你需要编写一个内核扩展(kernel extension,kext),这个扩展插入到内核的网络子系统。这些扩展被称为网络内核扩展,或NKE。

    想要了解编写kext的基础知识,请阅读Kernel Extension Programming Topics。然后阅读Network Kernel Extensions Programming Guide来了解如何实现网络kext。

    相关文章

      网友评论

        本文标题:特定平台的网络技术 <- 网络概述

        本文链接:https://www.haomeiwen.com/subject/vkvrhxtx.html