详解 Network.framework:iOS 网络开发的新基石

详解 Network.framework:iOS 网络开发的新基石

引言

自 iOS 12 和 macOS 10.14 起,Apple 推出了一个新的网络开发框架 ------ Network.framework。它被定位为下一代网络连接的基础设施,让开发者可以以更安全、更高效的方式,管理 TCP、UDP、TLS 乃至未来的新型协议连接。

如果你还停留在 NSURLSessionCFStreamBSD socket 的编程方式,那么了解 Network.framework,将帮助你构建出更加现代、安全、灵活的 iOS 应用。

本文将从基础到实战,全面带你认识 Network.framework。


1. 什么是 Network.framework?

Network.framework 是 Apple 提供的一套面向连接级别(Connection Level)编程的现代化 API。

它专注于:

  • 创建和管理 TCP / UDP 连接
  • 加密连接(TLS)
  • 多路径传输(Multipath TCP)
  • 网络状态实时监控(如 Wi-Fi/蜂窝网络切换)
  • 更安全的连接(默认支持 TLS 验证)

📦 支持的主要特性包括:

特性 说明
TCP/UDP 连接 可直接管理传输层连接
TLS 支持 内建安全连接机制
多路径支持 自动在 Wi-Fi 和蜂窝之间切换
网络路径感知 实时监测网络变化,优化连接策略
连接状态管理 支持状态机(Ready/Waiting/Failed)
低功耗优化 移动设备上的更智能资源管理

2. 为什么推出 Network.framework?

Apple 推出 Network.framework,主要为了解决旧网络编程接口存在的问题:

旧方式 存在问题
BSD Socket (C API) 过于底层,容易出错,手动管理 fd
CFStream / CFSocket API 繁杂,扩展性差,TLS 处理复杂
NSURLSession 高层 HTTP 请求很好,但无法细粒度控制底层连接

Network.framework 通过现代设计理念:

  • 提供异步、基于状态机的连接模型
  • 自动管理网络变化(如断网重连)
  • 安全性默认开启(TLS by default)
  • 减少低级错误,提升开发效率

3. Network.framework 的核心组件

3.1 NWConnection

表示单个连接。可以是:

  • TCP 连接
  • UDP 连接
  • TCP+TLS 安全连接

你可以用它来手动建立、管理、发送、接收数据。

swift 复制代码
let connection = NWConnection(host: "example.com", port: 443, using: .tls)

3.2 NWListener

表示服务端监听器。用于:

  • 监听某个端口
  • 接受进来的 TCP/UDP 连接
  • 自建服务器应用(如 P2P、局域网服务)
swift 复制代码
let listener = try NWListener(using: .tcp, on: 1234)

3.3 NWPathMonitor

用于实时监控网络状态变化,比如:

  • 检测当前是 Wi-Fi 还是蜂窝数据
  • 网络是否切换、断开、恢复
swift 复制代码
let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
    if path.status == .satisfied {
        print("Network available")
    } else {
        print("No connection")
    }
}
monitor.start(queue: .global())

3.4 NWParameters

连接的配置参数,包括:

  • 传输协议选择(TCP、UDP)
  • 安全策略(启用/禁用 TLS)
  • 传输选项(如启用 Keep-Alive、多路径 TCP)
swift 复制代码
let parameters = NWParameters(tls: .init(), tcp: .init())

4. Network.framework 与 URLSession 的关系

  • URLSession应用层,面向 HTTP/HTTPS。
  • Network.framework传输层,直接控制 TCP/UDP/TLS。

它们的位置关系大致如下:

复制代码
App
 └── URLSession(HTTP/HTTPS 层)
     └── CFNetwork
         └── Network.framework(TCP/TLS/UDP)

👉 简单说,Network.framework 并不是用来发 HTTP 请求的。如果你需要自己实现 HTTP、WebSocket、自定义协议,才用它。


5. 实战示例:使用 NWConnection 发起 HTTPS 请求

swift 复制代码
import Network

let host = NWEndpoint.Host("example.com")
let port = NWEndpoint.Port.https

let parameters = NWParameters(tls: NWProtocolTLS.Options())
let connection = NWConnection(host: host, port: port, using: parameters)

connection.stateUpdateHandler = { newState in
    switch newState {
    case .ready:
        print("Connection ready!")

        let httpRequest = """
        GET / HTTP/1.1\r
        Host: example.com\r
        Connection: close\r
        User-Agent: NWConnectionClient\r
        \r
        """
        connection.send(content: httpRequest.data(using: .utf8), completion: .contentProcessed({ _ in
            print("Request sent")
        }))
        receiveResponse(connection: connection)
    case .failed(let error):
        print("Connection failed: \(error)")
    default:
        break
    }
}

func receiveResponse(connection: NWConnection) {
    connection.receive(minimumIncompleteLength: 1, maximumLength: 4096) { data, _, isComplete, error in
        if let data = data, !data.isEmpty {
            let response = String(data: data, encoding: .utf8) ?? "<binary>"
            print("Received response: \(response)")
        }
        if isComplete {
            connection.cancel()
        } else if error == nil {
            receiveResponse(connection: connection)
        }
    }
}

connection.start(queue: .global())

这段代码完成了:

  • 建立 TCP + TLS 连接
  • 手动发送 HTTP 报文
  • 接收服务器返回的数据

(注意:并没有用 URLSession!而是自己控制了连接细节。)


6. 适合使用 Network.framework 的场景

场景 说明
自定义协议 比如自定义的 IoT 协议、游戏协议
WebSocket 通信 自己实现基于 TCP/TLS 的 WebSocket
低延迟通信 需要实时性强的连接,比如在线游戏、直播
需要多路径支持 比如无感切换 Wi-Fi ↔ 蜂窝数据
构建 VPN / 代理工具 需要底层管理连接

7. Network.framework 的优势总结

✅ 更安全(默认启用 TLS)

✅ 更高效(异步、低功耗优化)

✅ 支持多路径(Multipath TCP)

✅ 易用的 Swift 风格 API

✅ 适配未来(如 QUIC、HTTP/3)

✅ 系统级优化(网络切换无感知)


小结

Network.framework 是苹果面向未来网络通信推出的重要基建。它为 iOS/macOS 开发者打开了更多灵活、安全、低延迟的通信能力大门。

虽然它不会取代 URLSession(发 HTTP 还是要用 URLSession),但如果你的应用涉及底层连接、定制协议、实时通信 ------

那么掌握 Network.framework,就是成为高级 iOS 网络开发者的重要一环。


下一步建议学习:

  • 深入理解 NWConnection 状态机(.setup / .waiting / .ready / .failed / .cancelled)
  • 如何使用 NWParameters 配置连接参数
  • 如何实现 Multipath TCP 支持
  • 如何结合 DoH 查询结果,基于 IP 建立连接(绕过系统 DNS)

相关推荐
BianHuanShiZhe20 分钟前
x86_64-apple-ios-simulator 错误
ios
安和昂4 小时前
【iOS】 GCD小结
macos·ios·cocoa
YourReference4 小时前
iOS 集成网易云信的音视频呼叫组件
ios·音视频通话·网易云信·云信·呼叫组件
Digitally6 小时前
如何轻松将 iPhone 备份到外部硬盘
ios·iphone
大卫小东(Sheldon)1 天前
记录一次自己用 AI 写IOS APP的经历
ios
加百力1 天前
苹果公司计划按年份来重命名重大的软件,将升级iOS 18软件至iOS 26
ios
鸿蒙布道师2 天前
HarmonyOS 5 应用开发导读:从入门到实践
android·ios·华为·harmonyos·鸿蒙系统·huawei
名字不要太长 像我这样就好2 天前
【iOS】源码阅读(五)——类&类的结构分析
笔记·学习·macos·ios·objective-c
Kila_3 天前
【iOS(swift)笔记-11】App版本升级时本地数据库sqlite更新逻辑
数据库·ios·swift
佛曰_不可说3 天前
xcode手动安装iOS Simulator Runtime
ios·cocoa·xcode