IOS 网络层次

IOS 网络层的组织如下:

  • Cocoa 层 (webKit、Game Kit、NSURL、Bonjour)
  • Core Foundation层 (CFNetwork、CFNetServices)
  • OS 层 (BSD)
  • HardWare 层(Wi-Fi、Cellular、Bluetooth)

Game Kit

核心功能在于为IOS 应用提供了另一个点到点的网络选项。在传统的网络配置中,Game Kit构建在Bonjour之上。它能创建自组(ad-hoc)的Bluetooth Personal Area NetWorks (PAN),创建网络时,只需要会话标识符、显示名与连接模式,不需要Socket配置或任何其他底层网络

Bonjour Bonjour

为基于组播域名服务(multicast DNS)的开放性零设置网络标准所起的名字,能自动发现IP网络上的电脑、设备和服务。Bonjour 使用工业标准的 IP 协议来允许设备自动发现彼此,而不需输入IP 地址或配置DNS 服务器。

NSStream

cocoa级别的api,构建在CFNetwork之上,作为NSURLConnection的基础,旨在完成一些底层的网络任务,例如telnet、SMTP, NSStream没有提供对处理HTTP/S响应状态码或认证的內建支持,它所发出与接收的数据都位于C缓冲中。它无法管理多个外发请求,需要子类化添加。NSStream是异步的,通过NSStreamDelegate实现通信更新。

CFNetWork

CFNetWork API位于基础的BSD socket之上(Internet Berkeley sockets),用在NSStream、URL加载系统、Bonjour与Game Kit API的实现中。它为HTTP与FTP等高级协议提供原生支持。CFNetwork与BSD socket之间的主要差别在于运行循环集成。

BSD socket

构成大多数网络活动的基础,是网络框架层次体系中的软件最底层。BSD socket使用C实现,它没有在操作系统中插入任何钩子

运行循环

运行循环是有类NSRunLoop表示的,有些线程可以让操作系统唤醒睡眠的线程以管理到来的事件,运行循环是这些线程的基础组件,运行循环可以在一个周期内调度任务并处理到来的事件,IOS应用中每个线程最多只有一个运行循环,对于主线程中,APP 中在应用委托 applicationDidFinishLaunchingWithOptions:方法调用后就可以访问。

辅助线程必须显示运行自己的运行循环,在辅助线程中运行循环之前,至少添加一个输入源或定时器,否则,运行循环就会立刻退出。运行循环会从两类源中接收事件:输入源与定时器。输入源(通常是基于端口的或是自定义的)会异步向应用发送事件,两类源的主要差别在于内核会自动发出基于端口的源信号,而自定义源就需要从不同的线程中手动发出。

定时器会生成基于时间的通知,它为应用提供了一种机制以在未来的某个时间执行某个具体任务。定时器事件是同步发出的,并且与特定的模式有关

运行循环模式

每次通过运行循环都是在你所指定的模式下的一次运行。运行循环模式是由操作系统所用的一种约定,用于过滤监控的源并发布事件,比如调用委托方法等。模式包含了应该监控的输入源与定时器,以及当运行循环事件发生时应该通知的观察者。

关于RunLoop的苹果官方文档https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

CFRunLoopRef 的开源资料https://opensource.apple.com/source/CF/CF-1151.16

http://www.jianshu.com/p/2ae2a049fb9e

你可能感兴趣的:(IOS 网络层次)