当前位置: 首页 > news >正文

Android学习总结之网络篇(HTTP请求流程)

       客户端向服务器发送 HTTPS 请求的过程可以分为 网络连接建立、TLS/SSL 安全握手、数据传输、连接关闭 四个核心阶段

一、DNS 解析:从域名到 IP 的「寻址前奏」

  • 核心目标:将人类可读的域名(如 https://www.example.com)转换为服务器的 IP 地址,用于建立网络连接。
  • 细节扩展
    • DNS 缓存机制:首先检查本地 DNS 缓存(浏览器缓存、操作系统缓存),若未命中则发起网络查询。浏览器会优先使用「DNS 预解析」(提前解析页面中可能用到的域名),减少后续延迟。
    • DNS 查询方式
      • 递归查询:客户端向本地 DNS 服务器(如运营商 DNS)请求,本地服务器若无记录则代替客户端向根 DNS、顶级域名 DNS、权威 DNS 递归查询,最终返回结果(客户端只需一次请求)。
      • 迭代查询:客户端直接向各级 DNS 服务器依次查询,适合自主控制解析流程(如 DNS-over-HTTPS/DoH 场景)。
    • 安全增强:现代浏览器支持 DNS-over-HTTPS(DoH) 或 DNS-over-TLS(DoT),将 DNS 查询加密,防止中间人篡改域名解析结果(如域名劫持)。

二、TCP 三次握手:可靠连接的「安全基石」

  • 基于解析得到的 IP 地址,客户端与服务器通过 TCP 三次握手 建立可靠的传输通道:

  • 客户端 → 服务器:发送 SYN 报文,请求建立连接(初始序列号 Seq=A)。
  • 服务器 → 客户端:返回 SYN+ACK 报文,确认请求(确认号 Ack=A+1,自身序列号 Seq=B)。
  • 客户端 → 服务器:发送 ACK 报文,确认连接(确认号 Ack=B+1)。
    • 三次握手完成后,客户端与服务器建立 TCP 连接(默认端口为 443,HTTPS 专用)。
  • 深度原理
    • 三次握手的必要性
      • 客户端发送 SYN=A(请求连接,初始序列号 A),告知服务器自己的初始序号。
      • 服务器回复 SYN=B + ACK=A+1(确认客户端请求,同时告知自己的初始序号 B),确保双方确认对方的发送能力。
      • 客户端回复 ACK=B+1(确认服务器的请求),确保双方确认对方的接收能力。
      • 为何不是两次?:避免历史失效的连接请求(如延迟的旧 SYN 报文)被误认为有效,导致资源浪费(如「SYN 洪泛攻击」利用此原理消耗服务器资源)。
    • 状态变迁:客户端从 CLOSED → SYN_SENT → ESTABLISHED,服务器从 CLOSED → LISTEN → SYN_RCVD → ESTABLISHED,最终进入数据传输状态。

三、TLS/SSL 握手(建立安全通道)

HTTPS 的核心是通过 TLS/SSL 协议 加密数据,握手过程分为以下步骤(以 TLS 1.2 为例):

1. 客户端发起安全连接请求(ClientHello)
  • 客户端发送支持的 TLS 版本(如 TLS 1.3)、加密套件列表(如 ECDHE-RSA-AES256-GCM-SHA384)、随机数(Client Random) 等信息。
2. 服务器选择加密方案并返回证书(ServerHello + 证书)
  • 服务器从客户端支持的加密套件中选择一个(如 ECDHE 密钥交换算法 + AES 对称加密 + SHA 哈希),返回 服务器数字证书(包含服务器公钥)、服务器随机数(Server Random)、选定的加密套件等。
3. 客户端验证服务器证书
  • 客户端检查证书是否由 可信 CA 签发、是否过期、域名是否与目标一致(防止中间人攻击)。
  • 若证书无效,浏览器会提示 “不安全”;若有效,提取证书中的 服务器公钥
4. 客户端生成预主密钥并加密传输(Pre-Master Secret)
  • 客户端生成一个 预主密钥(Pre-Master Secret),用服务器公钥加密后发送给服务器。
  • 服务器用自己的 私钥解密 得到预主密钥。
5. 双方协商生成会话密钥(对称加密密钥)
  • 客户端和服务器通过 Client Random、Server Random、Pre-Master Secret 计算出 会话密钥(对称密钥)
  • 后续数据传输使用 对称加密(效率高),而密钥协商过程使用 非对称加密(保证安全性)。
6. 验证握手完整性(Finished 消息)
  • 双方发送 Finished 消息,用会话密钥加密,验证整个握手过程是否被篡改。
  • 至此,TLS/SSL 握手完成,建立安全通道。

四、发送 HTTP 请求与接收响应(加密传输)

  1. 客户端发送加密的 HTTP 请求
    • 客户端将 HTTP 请求(如 GET/POST)用 会话密钥加密,通过 TCP 连接发送到服务器。
  2. 服务器解密并处理请求
    • 服务器用会话密钥解密请求,处理业务逻辑(如查询数据库),生成响应。
  3. 服务器返回加密的响应
    • 服务器将响应数据用会话密钥加密后发送给客户端。
  4. 客户端解密并显示响应
    • 客户端用会话密钥解密响应,解析并渲染内容(如网页、数据)。

五、连接关闭

  1. TLS 连接关闭
    • 双方发送 CloseNotify 消息,通知对方关闭安全通道。
  2. TCP 四次挥手
    • 客户端和服务器通过四次挥手释放 TCP 连接(FIN+ACK 报文交互)。

核心技术深度对比与安全设计

技术点非对称加密(握手阶段)对称加密(传输阶段)
优势安全性高(公钥公开,私钥唯一)效率高(加密 / 解密速度快)
缺点计算耗时(RSA 加密大文件慢)密钥传输需安全通道(依赖非对称加密)
典型算法RSA、ECC(椭圆曲线密码学)AES-GCM、ChaCha20-Poly1305
结合原因用非对称加密保护对称密钥的传输安全用对称加密处理大量数据传输
  • 证书信任链:通过 CA 层级签名(根 CA → 中级 CA → 服务器证书),构建「信任锚」,确保服务器身份不可伪造(破解需伪造整个链,成本极高)。
  • TLS 1.3 优化:相比 1.2,减少 1 次 RTT(往返时间),握手阶段从 2-RTT 缩短至 1-RTT,提升性能;禁用不安全的算法(如 SHA-1、RC4),增强安全性。

扩展加密

       对称加密算法是加密和解密使用 同一密钥 的加密方式,具有效率高、速度快的特点,适用于大量数据的加密传输。以下是常见的对称加密算法及其原理、使用场景的详细解析:

 分组加密算法(Block Cipher)

将明文分成固定长度的 数据块,逐块加密,输出等长的密文块。

  • AES(高级加密标准)

    • 原理
      • 分组长度固定为 128 位,密钥长度可选 128 位、192 位、256 位(密钥越长越安全)。
      • 采用 代替 - 置换网络(SP 网络),通过字节替换、行移位、列混淆、轮密钥加等多轮变换(10-14 轮,依密钥长度而定),将明文块转换为密文块。
      • 安全性基于 数学难题的复杂性,目前未被破解,是全球主流加密算法。
    • 使用场景
      • HTTPS/TLS 协议(如 AES-GCM 模式,同时提供加密和认证)、VPN、硬盘加密(如 BitLocker)、数据存储加密。
      • 支持多种工作模式:CBC(需初始化向量 IV)、GCM(推荐,效率高且防篡改)、CTR(适合高速传输)。
  • DES(数据加密标准)

    • 原理
      • 分组长度 64 位,密钥长度 56 位(实际 8 位用于奇偶校验)。
      • 采用 Feistel 网络结构,将明文分为左右两半,通过 16 轮迭代、子密钥异或、S 盒替换等操作加密。
    • 缺点与使用
      • 因密钥过短(56 位可通过暴力破解),已被淘汰,仅用于旧系统兼容。
      • 衍生算法 3DES(三重 DES):通过 3 次 DES 加密(密钥可重复或不同),将密钥长度提升至 112/168 位,作为过渡方案,目前也逐渐被 AES 取代。
流加密算法(Stream Cipher)

将明文逐位 / 逐字节与 密钥流(伪随机序列)异或生成密文,无需分组。

  • ChaCha20

    • 原理
      • 基于 ChaCha 核心函数,通过 20 轮循环(10 轮加密)生成密钥流,输入为密钥(256 位)、非 ce(12 位)和计数器(32 位)。
    • 优势
      • 抗量子攻击潜力(相比 AES),且在移动端(如 ARM 架构)性能优于 AES(无需硬件加速),被 TLS 1.3 和 IPsec 采纳(如 ChaCha20-Poly1305 组合)。

核心原理对比

特性分组加密(如 AES)流加密(如 ChaCha20)
处理方式分块处理(固定长度,需填充)逐位 / 字节处理(无需填充)
密钥流生成依赖明文块和密钥,每块独立加密生成独立于明文的伪随机密钥流,与明文异或
安全性依赖分组模式(如 GCM 防篡改)依赖密钥流的随机性(非 ce 需唯一)
效率适合大块数据,硬件加速优化(如 AES-NI)适合实时传输(如视频流),软件层面高效

        非对称加密算法(公钥加密算法)的核心是使用 一对关联的密钥(公钥和私钥):公钥公开,用于加密或验证签名;私钥私密,用于解密或生成签名。以下是常见的非对称加密算法及其原理、特点和应用:

一、RSA(最经典的非对称算法)

原理:
  • 数学基础:基于大整数分解难题(两个大素数的乘积难以快速分解)。
  • 密钥生成
    1. 选择两个大素数 p 和 q,计算 n=p×q(模数)。
    2. 计算欧拉函数 ϕ(n)=(p−1)(q−1)。
    3. 选择一个与 ϕ(n) 互质的整数 e(公钥指数,通常取 65537)。
    4. 计算私钥指数 d,满足 d×e≡1modϕ(n)(通过扩展欧几里得算法)。
  • 加密 / 解密
    • 加密:C=Memodn(明文 M 用公钥 (n,e) 加密)。
    • 解密:M=Cdmodn(密文 C 用私钥 d 解密)。
特点:
  • 优点:兼容性强,支持数字签名和密钥加密。
  • 缺点:密钥长度长(常用 2048/4096 位),加密效率低,不适合加密大量数据。
  • 应用场景
    • HTTPS 中加密预主密钥(Pre-Master Secret)。
    • 数字证书(CA 用 RSA 私钥签名证书)。
    • 软件签名(如 Windows 驱动程序签名)。

二、ECC(椭圆曲线加密算法,现代主流)

原理:
  • 数学基础:基于椭圆曲线离散对数难题(在椭圆曲线上,已知点 P 和倍数 kP,难以反推 k)。
  • 密钥生成
    1. 选定椭圆曲线参数(如 SECP256R1、SECP384R1)。
    2. 选择私钥 d(随机整数),计算公钥 Q=d×G(G 是椭圆曲线的基点)。
  • 加密 / 解密
    • 加密:用公钥 Q 生成共享密钥 kQ,结合对称密钥算法(如 AES)加密数据。
    • 解密:用私钥 d 计算 d×kG=kQ,还原共享密钥。
特点:
  • 优点:相同安全强度下,密钥长度比 RSA 短(如 256 位 ECC ≈ 3072 位 RSA),效率更高,适合移动设备和嵌入式系统。
  • 缺点:数学原理复杂,实现难度较高。
  • 应用场景
    • TLS 1.3 及现代加密协议的首选算法(如 ECDHE 密钥交换)。
    • 比特币、以太坊等区块链的地址生成和签名。
    • 数字签名(ECDSA,椭圆曲线数字签名算法)。

为什么非对称算法在 TLS 中这样用?

  1. RSA:历史兼容性强,用于证书签名和预主密钥加密,但因效率低,新场景优先选 ECC。
  2. ECC/ECDHE:短密钥、高安全性、高效率,成为 TLS 1.3 及后续的核心(如 Chrome 81+ 默认优先 ECC)。
  3. 非对称算法的核心价值在于 安全交换对称密钥 和 验证身份(数字签名),而大量数据的加密解密仍依赖对称算法(如 AES),两者结合实现了 “安全” 与 “效率” 的平衡。

总结:HTTPS 如何同时实现「可靠、安全、高效」?

  1. 可靠性:TCP 三次握手与四次挥手,确保连接建立与释放的有序性,重传机制保证数据不丢失。
  2. 安全性
    • 身份认证:数字证书验证服务器身份,防止中间人冒充。
    • 数据加密:握手阶段用非对称加密协商密钥,传输阶段用对称加密提升效率,结合前向保密防止密钥泄露后的历史数据破解。
    • 完整性校验:哈希算法与 MAC 码确保数据未被篡改。
  3. 效率优化
    • 会话重用(Session ID 或 Session Ticket):避免重复完整握手,减少延迟。
    • TLS 1.3 与 ALPN/SNI 扩展:减少 RTT 次数,支持多域名与协议协商。

http://www.mrgr.cn/news/97600.html

相关文章:

  • 【蓝桥杯】动态规划:背包问题
  • Android Input——IMS启动流程(二)
  • 每日OJ题_剑指offer数组篇(剑指offer04+剑指offer11+剑指offer21)
  • IntelliJ IDEA下开发FPGA——FPGA开发体验提升__上
  • 【蓝桥杯】搜索算法:剪枝技巧+记忆化搜索
  • [蓝桥杯] 求和(C语言)
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day7
  • 【蓝桥杯】动态规划:线性动态规划
  • IntelliJ IDEA下开发FPGA——FPGA开发体验提升__下
  • JVM基础架构:内存模型×Class文件结构×核心原理剖析
  • PythonJSON解析如何优雅处理嵌套JSON字符串
  • springboot中使用async实现异步编程
  • 【蓝桥杯】动态规划背包问题
  • Go语言从零构建SQL数据库(5)-Pratt解析算法:SQL表达式解析的核心引擎
  • 算法与数据结构线性表之栈和队列
  • Docker与VNC的使用
  • PPTAgent:一款开源免费生成和评估幻灯片的项目
  • Linux信号——信号的保存(2)
  • Linux信号——信号的处理(3)
  • QT6(12)3.3.1 Qt元对象系统概述:QObject 类与 QMetaObject 类,类型转换 qobject_cast<T>()。3.3.3 属性系统:帮助文档,