TCP/IP
第一层:应用层 (Application Layer)
- 核心协议:HTTP、DNS
- 关注点:数据格式、交互效率、应用层队头阻塞
这一层决定了浏览器如何获取网页资源。
1. HTTP 协议的进化史

2. 深度辨析:HTTP/2 为什么还没彻底解决阻塞?
HTTP/2 解决了应用层的「请求排队」,但所有请求共用一个 TCP 连接。一旦底层 TCP 丢了一个包,操作系统内核会暂停后续所有包的交付(等待重传),导致所有 Stream(图片、JS、CSS)全部卡顿。这就是 TCP 队头阻塞。
第二层:安全层 (Security / TLS)
- 核心协议:TLS/SSL、HTTPS
- 关注点:加密、身份认证、防篡改
HTTPS = HTTP + TLS/SSL。它在应用层和传输层之间加了把「锁」。
1. HTTPS 的核心机制(混合加密)
-
非对称加密 (RSA/ECC):用于握手阶段
- 利用公钥和私钥交换「会话密钥」。公钥加密,私钥解密。
- 公钥的作用:公开给客户端,用于加密数据或验证签名。
- 证书 (Certificate):服务器的身份证,包含公钥和 CA 签名。防止黑客伪造公钥。
-
对称加密 (AES):用于数据传输阶段
- 使用握手协商好的「会话密钥」。速度极快。
2. TLS 握手流程(以 TLS 1.2 为例)
这是一个 2-RTT 的过程(TLS 1.3 优化为 1-RTT)。
-
Client Hello:发送支持的加密套件 + 随机数 A
-
Server Hello:选定套件 + 随机数 B + 下发证书
-
Key Exchange
- 客户端验证证书(查 CA 信任链)
- 生成随机数 C (Pre-master secret),用证书里的公钥加密,发给服务端
-
Session Key 生成:双方用 A+B+C 算出一个相同的会话密钥
-
Finished:双方互发加密消息验证
3. 中间人攻击 (MITM) 原理与防御
-
攻击原理:攻击者拦截请求,伪装成服务器(给客户端发伪造证书),又伪装成客户端(和服务器建立连接)。
-
抓包工具 (Charles/Fiddler) 原理:
- 用户手动信任 Charles 的根证书 (Root CA)。
- Charles 动态签发伪造的网站证书。因为根证书被信任,操作系统也会信任这张伪造证书。
- Charles 解密两端数据,实现「明文抓包」。
第三层:传输层 (Transport Layer)
- 核心协议:TCP、UDP、QUIC
- 关注点:端到端连接、可靠性、流量控制
这是网络的「心脏」,负责数据包的送达保障。
1. TCP 三次握手(建立连接)
-
流程:SYN → SYN+ACK → ACK
-
为什么不是两次?
- 为了防止已失效的连接请求报文段突然又传到服务端。
- 若是两次握手,服务端收到旧的 SYN 会误以为建立新连接,白白等待数据,造成资源死锁。
2. TCP 四次挥手(断开连接)
-
流程:FIN → ACK(半关闭)→ FIN → ACK
-
为什么需要等待 2MSL?
- 确保服务端收到了最后一个 ACK。若 ACK 丢了,服务端会重发 FIN,客户端必须有时间处理这个重发的 FIN。
3. TCP 的可靠性保障(核心难点)
TCP 强在「既可靠又尽量快」。
-
流量控制 (Sliding Window)
- 机制:接收端通过 Window Size 告诉发送端:「我还能吃得下多少数据」。
- 目的:防止发送端发太快,撑爆接收端缓冲区。
-
拥塞控制 (Congestion Control):全局网络保护
- 慢启动 (Slow Start):连接刚建立,cwnd(拥塞窗口)指数级增长 (1, 2, 4, 8…)
- 前端影响:导致首屏加载慢。前几轮 RTT 只能发几 KB 数据,带宽再大也没用。
- 对策:增大初始窗口 (initcwnd=10)、CDN 缩短 RTT。
- 快重传 (Fast Retransmit)
- 若连续收到 3 个重复的 ACK,说明特定包丢了,但网络没瘫痪。
- 动作:立即重传丢失包,不等待超时,不进入慢启动(只减半窗口)。
- 慢启动 (Slow Start):连接刚建立,cwnd(拥塞窗口)指数级增长 (1, 2, 4, 8…)
-
Nagle 算法 vs Delayed ACK
- 发送端想攒大包再发 (Nagle),接收端想等数据顺风车再回 ACK (Delayed)。
- 死锁:导致 40ms 延迟。Web 开发通常开启
TCP_NODELAY禁用 Nagle。
4. HTTP/3 (QUIC) —— UDP 的逆袭
QUIC 在应用层(用户态)重新实现了 TCP 的功能,并做了重大改进:
-
解决重传歧义:Packet Number 严格单调递增。即使重传,PN 也会变。发送端能精确计算 RTT。
-
无队头阻塞 (No HOL)
- 引入 Stream(流)概念。
- Stream A 的包丢了,只阻塞 Stream A;Stream B(如 CSS)到齐了直接渲染。
-
连接迁移
- 使用 Connection ID (CID) 标识连接,而不是 IP。
- 手机从 WiFi 切到 4G,IP 变了但 CID 没变,连接保持不断,无需重连。
第四层:网络层 (Network Layer)
- 核心协议:IP、ARP、ICMP
- 关注点:寻址、路由
解决「如何从世界的一个角落找到另一个角落」的问题。
1. IP 寻址
-
IP 地址:逻辑地址(如 192.168.1.5)
-
子网掩码 (Subnet Mask):用于判断目标 IP 是在局域网还是外网
- 目标 IP & 子网掩码 == 本机网络号?
- 是:直接发给目标(通过 ARP 查 MAC)
- 否:发给默认网关(路由器)
2. 路由 (Routing)
- 路由器:三层设备。
- 查路由表,决定数据包的「下一跳 (Next Hop)」给谁;会拆掉旧的 MAC 头,换上新的 MAC 头(源=路由器,目的=下一跳)。
第五层:数据链路层 & 物理层
- 核心协议:Ethernet、ARP
- 关注点:局域网内直连、物理介质
1. MAC 与帧
- MAC 地址:硬件唯一身份证。
- ARP 协议:广播询问「谁是这个 IP?」,获取对应的 MAC 地址。
2. 交换机 (Switch)
- 二层设备,维护 MAC 地址表。
- 只看 MAC 地址,把数据帧从对应端口转发出去。
总结:从输入 URL 到页面展示(网络视角)
- 应用层:浏览器构造 HTTP 请求。
- 安全层:TLS 握手,协商密钥,加密请求。
- 传输层:TCP 三次握手建立连接;将大文件切割成段 (Segment),加上 TCP 头(端口、序号)。
- 网络层:IP 协议加上 IP 头(源/目 IP);查路由表,发现目标在外网,决定发给网关。
- 链路层:ARP 查网关 MAC;封装成帧 (Frame)。
- 物理层:变成电信号发出。
- 传输中:经过交换机(二层转发)→ 路由器(三层路由)→ 互联网 → 目标服务器。
- 接收端:层层解封装 → 校验 → 解密 → 浏览器渲染。