VuePress 站点
首页
数学
计算机基础
Java后端
AI大模型
UI设计
首页
数学
计算机基础
Java后端
AI大模型
UI设计
  • 计算机基础
  • 计算机网络应用

    • 课程笔记:TCP三次握手建立连接
    • 课程笔记:TCP三次握手的必要性
    • 课程笔记:TCP协议缺陷与SYN Flood攻击
    • 课程笔记:TCP四次挥手释放连接
    • 课程笔记:TCP四次挥手释放连接的必要性
    • 课程笔记:TCP 报文段格式与 IP 分组
    • 课程笔记:HTTP/2 新特性——二进制分帧
    • 课程笔记:HTTP/2 新特性——多路复用
    • 课程笔记:HTTP/2 新特性——服务器推送(Server Push)
    • 课程笔记:HTTPS 简介与架构图
    • 课程笔记:HTTPS原理与传输层安全协议(TLS)
    • 课程笔记:HTTPS原理——对称加密算法
    • 课程笔记:HTTPS原理——非对称加密算法
    • 课程笔记:HTTPS 原理 —— 数字签名
    • 课程笔记:HTTPS 原理——证书与 CA
    • 课程笔记:完整的HTTPS协议通信流程
    • 课程笔记:HTTPS 协议的性能损耗
    • 课程笔记:TLS False Start 加速 HTTPS
    • 课程笔记:升级 HTTP 协议到 HTTP/2
    • 课程笔记:通过会话恢复加速 HTTPS
    • 课程笔记:OWASP 组织与十大 Web 安全漏洞
    • 课程笔记:XSS 跨站脚本攻击
    • 课程笔记:存储型XSS跨站脚本攻击
    • 课程笔记:XSS攻击窃取Cookie
    • 课程笔记:反射型XSS跨站脚本攻击
    • 课程笔记:DOM型XSS跨站脚本攻击
    • 课程笔记:植入 JS、HTML 代码攻击
    • 课程笔记:XSS攻击的防护策略
    • 课程笔记:XSS攻击的输入环节防护
    • 课程笔记:XSS 劫持 Cookie 的防护策略
    • 课程笔记:XSS 内容输出防护方案
    • 课程笔记:CSP 内容安全策略
    • 课程笔记:CSP 内容安全策略的应用方式
    • 课程笔记:CSRF 跨站请求伪造攻击原理
    • 课程笔记:CSRF 跨站点请求伪造攻击案例
    • 课程笔记:CSRF 跨站请求伪造防护方案
    • 课程笔记:OWASP CSRFTester 工具的原理与使用
    • 课程笔记:点击劫持攻击原理
    • 课程笔记:点击劫持防护方案
    • 课程笔记:URL 跳转漏洞原理与防护
    • 课程笔记:Session 认证与会话劫持
    • 课程笔记:Session固定与Session保持攻击
    • 课程笔记:注入攻击与 OWASP 靶机平台
    • 课程笔记:SQL盲注与ORM注入攻击及防护
    • 课程笔记:XML注入、代码注入、OS命令注入攻击
    • 课程笔记:文件上传漏洞与文件下载/目录浏览漏洞
    • 课程笔记:访问控制与权限访问漏洞
    • 课程笔记:DDoS 分布式拒绝服务攻击原理与防护
    • 课程笔记:CC(Challenge Collapsar)攻击与防护
    • 课程笔记:CDN 的工作原理
    • 课程笔记:CDN的网络架构和术语说明
    • 课程笔记:CDN应用场景与阿里云CDN
    • 课程笔记:如何使用阿里云CDN服务
    • 课程笔记:CDN 刷新与预热
    • 课程笔记:阿里云 CDN 回源配置
    • 课程笔记:CDN 缓存配置
    • 课程笔记:CDN 访问控制与性能优化
  • 计算机网网络

    • 📖 教材介绍与课程导言
    • 📖 1.1 信息时代的计算机网络
    • 📖 1.2 因特网概述
    • 📖 1.3 电路交换、分组交换和报文交换
    • 📖 1.4 计算机网络的定义和分类
    • 📖 1.5 计算机网络的性能指标(1)
    • 📖 1.5 计算机网络的性能指标(2)
    • 📖 1.6.1 常见的三种计算机网络体系结构
    • 📖 1.6.2 计算机网络体系结构分层的必要性
    • 📖 1.6.3 计算机网络体系结构分层思想举例
    • 📖 计算机网络体系结构中的专用术语
    • 📖 物理层概述
    • 📖 物理层下面的传输媒体
    • 📖 传输方式
    • 📖 编码与调制
    • 📖 2.5 信道的极限容量
    • 📖 2.6 信道复用技术
    • 📖 3.1 数据链路层概述
    • 📖 3.2 数据链路层的三个重要问题
    • 📖 3.2.1 封装成帧和透明传输
    • 📖 3.2.2 差错检测
    • 📖 3.2.3 (1) 可靠传输的相关基本概念
    • 📖 3.2.3 (2) 可靠传输的实现机制 - 停止-等待协议(SW)
    • 📖 3.2.3 (3) 可靠传输的实现机制 - 回退N帧协议(GBN)
    • 📖 3.2.3 (4) 可靠传输的实现机制 - 选择重传协议(SR)
    • 📖 3.3 点对点协议 PPP
    • 📖 3.4 共享式以太网
    • 📖 3.4.1 网络适配器和 MAC 地址
    • 📖 3.4.2 (1) CSMA/CD 协议的基本原理
    • 📖 3.4.2 (2) 共享式以太网的争用期、最小帧长和最大帧长
    • 📖 3.4.2 (3) 共享式以太网的退避算法和信道利用率
    • 📖 3.4.3 使用集线器的共享式以太网
    • 📖 3.4.4 在物理层扩展以太网
    • 📖 3.4.5 (1) 网桥的主要结构和基本工作原理
    • 📖 3.4.5 (2) 透明网桥的自学习和转发帧的过程以及生成树协议STP
    • 📖 3.5 交换式以太网
    • 📖 3.5.1 以太网交换机
    • 📖 3.5.2 共享式以太网和交换式以太网的对比
    • 📖 3.6 以太网的MAC帧格式
    • 📖 3.7.1 虚拟局域网 VLAN 概述
    • 📖 3.7.2 虚拟局域网 VLAN 的实现机制
    • 📖 3.8 以太网的发展
    • 📖 3.9.1 802.11 无线局域网的组成
    • 📖 3.9.2 802.11 无线局域网的物理层
    • 📖 3.9.3 (1) 802.11 无线局域网的数据链路层 —— 使用 CSMA/CA 协议(而不使用 CSMA/CD 协议)
    • 📖 CSMA/CA(载波监听多址接入/碰撞避免)协议的基本工作原理
    • 📖 802.11 无线局域网的 MAC 帧格式
    • 📖 网络层概述
    • 📖 网际协议 IP(网际协议)与异构网络互连
    • 📖 IPv4 地址及其编址方法——概述
    • 📖 IPv4 地址的分类编址方法
    • 📖 IPv4 地址的划分子网编址方法
    • 📖 IPv4 地址的无分类编址方法(CIDR)
    • 📖 IPv4 地址的应用规划
    • 📖 IPv4 地址与 MAC 地址
    • 📖 地址解析协议 ARP
    • 📖 IP 数据报的发送和转发流程
    • 📖 IPv4 数据报的首部格式
    • 📖 静态路由配置
    • 📖 因特网的路由选择协议概述
    • 📖 路由信息协议 RIP(路由信息协议)
    • 📖 开放最短路径优先 OSPF(开放最短路径优先)
    • 📖 边界网关协议 BGP(边界网关协议)
    • 📖 路由器的基本工作原理
    • 📖 网际控制报文协议 ICMP(网际控制报文协议)
    • 📖 虚拟专用网 VPN 和网络地址转换 NAT
    • 📖 IP 多播技术的相关基本概念
    • 📖 在局域网上进行硬件多播
    • 📖 在因特网上进行 IP 多播需要的两种协议
    • 📖 网际组管理协议 IGMP
    • 📖 多播路由选择协议
    • 📖 移动 IP 技术概述
    • 📖 IPv6 引进的主要变化
    • 📖 IPv6 数据报的基本首部和扩展首部
    • 📖 IPv6 地址
    • 📖 从 IPv4 向 IPv6 过渡
    • 📖 网际控制报文协议 ICMPv6
    • 📖 软件定义网络 SDN
    • 📖 运输层概述 — 进程间基于网络的通信
    • 📖 TCP/IP 体系结构运输层中的两个重要协议
    • 📖 运输层端口号、复用与分用的概念
    • 📖 UDP 和 TCP 的对比
    • 📖 TCP 报文段的首部格式
    • 📖 "三报文握手"建立 TCP 连接
    • 📖 "四报文挥手"释放 TCP 连接
    • 📖 TCP 的流量控制 (Flow Control)
    • 📖 TCP 的拥塞控制 (Congestion Control) 及与网际层拥塞控制的关系
    • 📖 TCP 可靠传输的实现
    • 📖 TCP 超时重传时间 (RTO) 的选择
    • 📖 TCP 的选择确认 (SACK)
    • 📖 6.1 应用层概述
    • 📖 6.2 客户—服务器方式和对等方式
    • 📖 6.3 动态主机配置协议 DHCP
    • 📖 6.4 域名系统 DNS
    • 📖 6.5 文件传送协议 FTP
    • 📖 电子邮件
    • 📖 万维网 WWW
    • 📖 网络安全概述
    • 📖 密码学相关基本概念
    • 📖 对称密钥密码体制
    • 📖 公钥密码体制
    • 📖 报文摘要和报文鉴别码
    • 📖 数字签名(digital signature)
    • 📖 实体鉴别
    • 📖 密钥分发
    • 📖 访问控制
    • 📖 网络体系结构各层采取的安全措施—物理层和数据链路层
    • 📖 网络体系结构各层采取的安全措施—网络层
    • 📖 网络体系结构各层采取的安全措施—运输层
    • 📖 网络体系结构各层采取的安全措施—应用层
    • 📖 防火墙访问控制与入侵检测系统
    • 📖 常见的网络攻击及其防范
    • 📖 定长子网划分和变长子网划分的二叉树解法

课程笔记:TLS False Start 加速 HTTPS

课程名称:计算机网络应用 核心摘要:本讲围绕 HTTPS 的延迟优化展开,先剖析标准 TLS 握手需消耗 2 个 RTT 的原因及三个随机数生成对称密钥的过程,再重点讲解 TLS False Start(抢跑)优化原理——客户端在握手未完全确认时即发送加密数据,将握手压缩为 1 个 RTT,并给出 Nginx 服务端的两行启用配置。

一、 核心概念与原理

  • HTTPS:在 HTTP 之下加入 TLS/SSL 安全层,实现加密传输、身份认证与数据完整性保护。
  • TLS 握手:客户端与服务端协商加密算法、交换证书、生成对称密钥的过程,是 HTTPS 建立安全通道的前置步骤。
  • RTT(Round-Trip Time,往返时间):一次"请求—响应"一来一回的耗时,是衡量网络延迟的核心指标。标准 TLS 握手需 2 个 RTT。
  • False Start(抢跑):客户端在发送 ChangeCipherSpec 后,不等待服务端确认便提前发送加密的 App Data,使握手的总耗时降为 1 个 RTT。本质是"不按规则顺序行驶,提前干活"。
  • 对称加密 / 非对称加密:握手阶段使用证书公钥进行非对称加密传送随机数;握手完成后所有 App Data 使用对称加密(双方密钥相同)。
  • 算法协商:客户端在 Client Hello 中携带自身支持的加密算法列表,服务端从中选择一个双方都支持的算法;启用 False Start 时改为服务端算法优先,免去等待客户端列表。

二、 技术细节与协议分析

1. 标准 TLS 握手流程(2 RTT)

阶段方向报文说明
第 1 个 RTTClient → ServerClient Hello携带客户端随机数 Random1、支持的加密算法列表
Server → ClientServer Hello携带服务端随机数 Random2、选定的加密算法
Server → ClientCertificate下发服务器证书(含公钥)
Server → ClientServer Hello Done / Certificate Status通知客户端服务端 Hello 阶段结束
第 2 个 RTTClient → ServerClient Key Exchange客户端校验证书合法后生成 Random3,用证书公钥加密发送
Client → ServerChangeCipherSpec通知服务端切换到协商好的加密规格
Client → ServerFinished加密的握手结束验证消息
Server → ClientChangeCipherSpec服务端通知切换加密规格
Server → ClientFinished服务端握手结束验证
握手完成Client → ServerApplication Data握手完成后才可发送正文数据

2. 三个随机数与对称密钥生成

随机数生成方生成时机传输方式
Random1客户端本地生成明文,随 Client Hello 发送
Random2服务端服务端生成明文,随 Server Hello 发送
Random3客户端校验证书通过后生成密文,用证书公钥加密后发送(仅服务端私钥可解密)
  • 双方各持有一模一样的三个随机数,按相同算法计算得出对称加密的会话密钥。
  • Random3 加密传输的原因:Random1、Random2 为明文,需保证第三个随机数的安全,防止中间人推算出对称密钥。
  • 公钥加密的数据只有持有私钥的服务端能解密,从而保证 Random3 不被拦截窃取。

3. False Start(抢跑)优化原理

  • 正常规则:必须先完成 TLS 握手(含服务端的 ChangeCipherSpec 与 Finished 确认),客户端才能发送 App Data。
  • 抢跑做法:客户端在发送完 ChangeCipherSpec 后,不等服务端回复,立即发送对称加密后的 App Data(HTTP 请求)。
  • 效果:将 2 RTT 压缩为 1 RTT,减少一个往返时间的延迟。
  • 前提条件:客户端(浏览器)与服务端双方均需支持 False Start;默认情况下主流浏览器(Chrome 等)均支持。
  • 风险说明:理论上存在服务端拒绝算法导致抢跑数据无效的可能,但因服务端配置的是通用算法列表,正常情况下基本不会出问题。

4. 优化前后 RTT 对比

模式握手 RTTApp Data 发送时机总往返次数
标准 TLS 握手2 RTT握手完全确认后发送2
TLS False Start1 RTT发送 ChangeCipherSpec 后立即抢跑发送1

5. 抓包验证(拉勾教育实例)

  • 通过 Wireshark(大白鲨)抓包可见,拉勾教育已启用 False Start。
  • 抓包序列中:Client Hello → Server Hello + Certificate + Server Hello Done → Client Key Exchange + ChangeCipherSpec → HTTP/2 请求(App Data) → New Session Ticket。
  • 中间穿插的两个 HTTP/2 协议数据包即为抢跑发送的正文数据;若无 False Start,这两包应位于整个 TLS 握手完成之后。

三、 实践应用与配置命令

Nginx 启用 TLS False Start 的关键配置

在 Nginx 的 HTTPS server 段中添加以下两行即可启用:

server {
    listen 443 ssl http2;                  # 监听 443,启用 SSL 与 HTTP/2
    ssl_certificate     /path/to/server.crt;   # 指定证书文件
    ssl_certificate_key /path/to/server.key;   # 指定私钥文件
    ssl_session_cache   shared:SSL:10m;        # 会话缓存
    ssl_session_timeout 10m;

    # —— 以下两行为 False Start 启用关键 ——
    # 1. 指定常用加密算法列表(非对称/对称/摘要算法,需大部分浏览器支持)
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4;

    # 2. 启用服务器算法优先,使 Nginx 在 TLS 握手时直接选定算法,
    #    无需等待客户端算法列表协商,从而支持 False Start 抢跑
    ssl_prefer_server_ciphers on;
}

配置要点说明:

  1. ssl_ciphers:列出系统中常用且大部分浏览器支持的算法(含非对称加密、对称加密、摘要算法),是服务端"排班"的候选集合。
  2. ssl_prefer_server_ciphers on:启用服务器算法优先。原本需等待客户端发送算法列表后协商,现在由服务端直接选定适配算法,省去等待环节,配合客户端抢跑完成 1 RTT 握手。
  3. 仅需上述两行配置即可启用抢跑,配置简单,且能带来一定的效率提升。

四、 重点与难点提示

  • 考点 1:标准 TLS 握手为什么需要 2 个 RTT?需能画出完整流程并标明每个 RTT 包含的报文。
  • 考点 2:三个随机数各自由谁生成、何时生成、以何种方式传输,以及为何 Random3 必须加密。
  • 考点 3:False Start 的定义——客户端在发送 ChangeCipherSpec 后未等服务端确认即发送加密 App Data,将 2 RTT 降为 1 RTT。
  • 易错点:False Start 必须客户端与服务端双向支持,仅一端支持无效;浏览器默认支持,服务端需通过 Nginx 配置开启。
  • 易错点:握手完成前任何 Application Data 都不能发送——这是标准规则,False Start 是对此规则的"抢跑"特例。
  • 面试题:如何减少 HTTPS 的延迟?答:TLS False Start 可将握手从 2 RTT 降为 1 RTT;此外还有 Session Resumption(会话复用)、TLS 1.3 0-RTT 等优化方案。
  • 面试题:ssl_prefer_server_ciphers on 的作用是什么?答:让服务端优先选择加密算法,避免等待客户端算法列表协商,配合 False Start 使用。

五、 课后疑问/遗留问题

  1. False Start 在服务端最终拒绝算法或握手失败的极端情况下,客户端抢跑发送的数据如何处理?是否存在回滚机制?
  2. 除了 False Start,HTTPS 还有哪些延迟优化方案?(如 Session Resumption 会话复用、Session Ticket、TLS 1.3 的 1-RTT 与 0-RTT 等,后续课程待补充)
  3. TLS 1.3 相比 TLS 1.2 在握手 RTT 上有何本质改进?与 False Start 思路是否一致?
  4. ssl_ciphers 列表中各算法的安全等级如何排序?如何选择兼顾安全性与兼容性的算法组合?
最近更新: 2026/6/23 17:18
Contributors: yangwenguang
Prev
课程笔记:HTTPS 协议的性能损耗
Next
课程笔记:升级 HTTP 协议到 HTTP/2