计算机网络基础与移动开发中的 TLS
本文核心说明:没有 TLS 会怎样、既然 TCP 已建连为何仍需要 TLS。
| 问题 | 结论 |
|---|---|
| 没有 TLS 会怎样? | 明文 HTTP 易被窃听与篡改;无法可靠验证对端是否为预期服务器,MITM 风险高。 |
| TCP 三次握手验证服务端身份吗? | 不验证「网站/服务身份」;只建立传输层会话,不涉证书与加密身份。 |
| TCP 已经连上了,为什么还需要 TLS? | TCP 只保证传输语义(可靠、有序);身份、保密、完整性由 TLS 在 TCP 之上提供;二者解决不同层面的问题。 |
一、计算机网络入门:和「分层」打交道
1.1 为什么谈「层」
网络协议常被画成栈状:上层依赖下层提供的能力,每一层只解决自己的问题。常见两套说法:
| 模型 | 分层(自顶向下) | 备注 |
|---|---|---|
| TCP/IP 四层(工程里最常用) | 应用层 → 传输层 → 网际层 → 网络接口层 | 与实现、排障最贴近 |
| OSI 七层(教学) | 应用、表示、会话、传输、网络、数据链路、物理 | 概念更细,可与 TCP/IP 对照理解 |
对移动端开发,最常打交道的是:应用层(HTTP 等)、传输层(TCP/UDP)、以及「下面能通」背后的 IP 与路由。
1.2 各层在做什么(极简)
- 应用层:进程之间的「业务协议」——HTTP、HTTPS、DNS、FTP、SMTP 等;关心 URL、方法、Header、Body。
- 传输层:端到端——用 端口号 把数据交给主机上的哪个应用;TCP 提供可靠有序字节流,UDP 提供尽力交付。
- 网际层(IP):主机到主机——寻址与路由(IPv4/IPv6);不负责可靠传输。
- 链路层及以下:同一链路/局域网上的帧传输(以太网、Wi‑Fi 等)。
HTTPS 不是和 TCP「并列」的另一层协议,而是:HTTP 运行在 TLS 之上,TLS 再运行在 TCP 之上(HTTP over TLS over TCP)。
二、IP、端口与「谁在和谁说话」
- IP 地址:标识网络中的一台主机(或一个接口)。
- 端口:标识主机上的应用/服务(逻辑概念,如 443 常给 HTTPS)。
- Socket:常指
(IP, 端口)这一对端点;「建立 TCP 连接」即两端点之间形成一条逻辑管道。
三、TCP:可靠字节流与三次握手
3.1 TCP 提供什么
在 IP 之上提供:面向连接、有序、可靠的字节流(确认、重传、拥塞控制等)。适合 HTTP、HTTPS、WebSocket(底层也是 TCP)等需要完整、按序交付的场景。
3.2 三次握手在验证「身份」吗?
不验证「你是不是 example.com」这种身份。
三次握手(SYN → SYN-ACK → ACK)完成的是:
- 双方同步初始序列号,协商出可传输的 TCP 状态;
- 确认「对端有一个进程在监听该端口、且愿意建立连接」。
它既不校验 TLS 证书,也不解决「对端是不是你信任的那台服务器」——它只保证在当前 IP:端口上有一条可用的 TCP 会话。若链路上有攻击者,只要能把流量引到自己机器上,TCP 照样能「握手成功」。
四、没有 TLS(仅用 HTTP)会怎样?
在「已建立 TCP、但不用 TLS」的典型场景(明文 HTTP)下:
- 无保密性:路径上任意可见位置的设备(恶意热点、运营商设备、局域网嗅探等)可能读到请求/响应中的密码、Token、隐私内容。
- 无完整性保证(对 HTTP 负载而言):攻击者可篡改页面或 API 响应而用户难以察觉(除非应用层再做签名,且密钥分发仍是难题)。
- 无强身份绑定:客户端无法密码学地证明「我正在和真正的 api.example.com 对话」;容易遭受 中间人(MITM)——攻击者分别与客户端、真实服务器各建一条 TCP,在中间解密/再加密或篡改明文。
因此:TCP 解决「连上、传得对」;TLS 解决「跟谁连、别人能不能读/改」。
五、TLS 在 TCP 之后补上了什么?
顺序是:DNS(常为 UDP)→ TCP 建连 → TLS 握手 → HTTP 或 WebSocket 等应用数据。
TLS 握手在 TCP 已连通之后进行,主要完成:
- 身份:通过 X.509 证书链等机制,让客户端验证服务端身份(及可选的客户端证书双向认证)。
- 密钥协商:生成仅会话双方知道的密钥,用于后续对称加密。
- 算法与参数:协商加密套件、协议版本等。
TLS 1.3 常见特点:更少往返、更早加密、废弃弱算法。
六、HTTPS、证书与移动开发中的库
- HTTPS = HTTP + TLS。证书校验用于防 MITM,并在可信对端上提供加密通道。
- AFNetworking:
AFHTTPSessionManager配合AFSecurityPolicy(含 SSL Pinning 等策略)。 - Alamofire:
ServerTrustManager等,表达「信任谁、是否 Pin」。 - Reachability(如
AFNetworkReachabilityManager/NWPathMonitor)只反映链路是否可用,不能替代 TLS 证书校验。
七、WebSocket、UDP、DNS(对照)
| 话题 | 要点 |
|---|---|
| WebSocket | 常由 HTTP(S) Upgrade 建立,之后在同一条 TCP 上双向传帧;wss:// 即 WebSocket over TLS。 |
| UDP | 无连接、不保证顺序与到达;DNS、部分实时业务、QUIC/HTTP3 会用到。 |
| DNS | 域名解析为 IP;多数由系统代劳,排障时需会看解析是否异常。 |