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

网络访问流程:HTTPS + TCP + IP

目录

第一阶段:准备阶段 - DNS 解析

第二阶段:建立连接 - 三层握手与加密信道

步骤 1: TCP 三次握手 (建立可靠连接)

步骤 2: TLS 四次握手 (建立安全加密)

第三阶段:数据传输 - 加密的 HTTP 通信

第四阶段:连接终止 - 四次挥手


第一阶段:准备阶段 - DNS 解析

在正式通信开始前,客户端需要知道服务器的 IP 地址。

  1. DNS 查询: 浏览器会检查本地缓存和 Hosts 文件,如果没有找到 www.example.com 对应的 IP 地址,它会向配置的 DNS 服务器发起查询。

  2. 获取 IP: DNS 服务器返回 www.example.com 的 IP 地址,例如 93.184.216.34。至此,客户端知道了目标在哪里。

第二阶段:建立连接 - 三层握手与加密信道

现在,客户端(浏览器)和服务器(93.184.216.34)需要建立一条可靠的、加密的通信信道。这个过程是分层的。

步骤 1: TCP 三次握手 (建立可靠连接)

目标:在客户端和服务器之间建立一条可靠的 TCP 连接。默认端口是 443。

  1. SYN (同步)

    • 客户端 发送一个 TCP 数据包到服务器。这个包的特殊之处在于,其 TCP 头部的 SYN 标志位被设置为 1。

    • 同时,客户端会随机生成一个初始序列号 Seq = X,并放在包中。

    • 此时状态: 客户端进入 SYN-SENT 状态。

  2. SYN-ACK (同步-确认)

    • 服务器 收到 SYN 包后,如果同意连接,会回复一个 TCP 数据包。

    • 这个包的 TCP 头部同时设置了 SYN 和 ACK 标志位。

    • 服务器会确认客户端的序列号:Acknowledgment Number = X + 1

    • 服务器也会随机生成自己的初始序列号 Seq = Y

    • 此时状态: 服务器进入 SYN-RECEIVED 状态。

  3. ACK (确认)

    • 客户端 收到 SYN-ACK 包后,会再次向服务器发送一个确认包。

    • 这个包的 TCP 头部 ACK 标志位被设置为 1。

    • 确认号 Acknowledgment Number = Y + 1,自己的序列号 Seq = X + 1

    • 此时状态: 客户端和服务器都进入 ESTABLISHED 状态。

至此,TCP 连接已建立。 这是一个双向的、可靠的字节流通道。接下来,所有的 HTTPS 数据都将通过这个通道传输。

步骤 2: TLS 四次握手 (建立安全加密)

目标:在已建立的 TCP 连接之上,建立一个安全的加密信道。这个过程就是 TLS 握手。

  1. ClientHello

    • 客户端 向服务器发送一条明文消息,内容包括:

      • 支持的 TLS 版本(如 TLS 1.2)。

      • 客户端生成的随机数(Client Random)。

      • 支持的密码套件列表(如 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)。

      • 支持的压缩方法。

      • (可选)服务器名称指示(SNI),用于告诉服务器客户端想访问哪个域名(在虚拟主机场景下至关重要)。

  2. ServerHello

    • 服务器 回应一条明文消息,内容包括:

      • 选定的 TLS 版本。

      • 服务器生成的随机数(Server Random)。

      • 从客户端列表中选择的一个密码套件。

      • 服务器的数字证书。这个证书包含了服务器的公钥,并由证书颁发机构(CA)签名,用于向客户端证明身份。

  3. 客户端验证与密钥交换

    • 证书验证: 客户端(浏览器)验证服务器的证书:

      • 检查证书是否在有效期内。

      • 检查证书的签发者是否是受信任的 CA。

      • (可选)检查证书中的域名是否与访问的域名一致。

      • 使用 CA 的公钥验证证书的签名,确保证书未被篡改。

    • 生成预备主密钥: 客户端会再生成一个随机数,称为 "Pre-Master Secret"。

    • 加密并发送: 客户端使用服务器证书中的公钥加密这个 "Pre-Master Secret",然后将加密后的结果发送给服务器。

  4. 服务器确认与密钥交换

    • 解密预备主密钥: 服务器用自己的私钥解密客户端发来的数据,得到 "Pre-Master Secret"。

    • (对于支持前向保密的密钥交换,如 ECDHE): 服务器可能会发送一个包含其 DH 参数的 Server Key Exchange 消息,并由证书私钥签名。客户端验证签名后,双方通过 DH 算法协商出 "Pre-Master Secret"。

  5. 生成会话密钥

    • 此时,客户端和服务器都拥有了三个相同的随机数:Client Random, Server Random, 和 Pre-Master Secret。

    • 双方使用相同的密钥派生函数,根据这三个随机数,生成用于本次会话的主密钥(Master Secret)

    • 最后,再由主密钥派生出实际用于加密和解密的对称会话密钥(例如 AES 密钥),以及用于验证数据完整性的 MAC 密钥。

  6. 握手完成

    • 客户端和服务器互相发送一条 "Change Cipher Spec" 消息,通知对方:“从现在开始,后续的所有通信都将使用刚刚协商的会话密钥进行加密。”

    • 然后双方再发送一条 "Finished" 消息,这条消息本身已经是加密的,里面包含了对之前所有握手数据的摘要,用于验证整个握手过程是否被篡改。

至此,TLS 安全连接已建立。 接下来,所有在 TCP 连接上传输的 HTTP 数据,都会先被 TLS 层加密。

第三阶段:数据传输 - 加密的 HTTP 通信

现在,我们有了一个建立在 TCP 之上的、加密的 TLS 隧道。

  1. 应用层数据(HTTP): 浏览器构造一个普通的 HTTP 请求,例如 GET /index.html HTTP/1.1

  2. TLS 加密: TLS 层收到这个明文的 HTTP 请求,使用协商好的对称会话密钥对其进行加密,形成 TLS 记录

  3. TCP 分段: TCP 层将加密后的 TLS 数据视为普通数据流。它可能会将其分割成合适大小的 TCP 段,并为每个段加上 TCP 头部(包含源端口、目标端口、序列号、确认号等)。

  4. IP 封装与路由: IP 层收到 TCP 段后,为其加上 IP 头部,形成 IP 包。IP 头部包含:

    • 源 IP 地址: 你的电脑的 IP。

    • 目标 IP 地址: 93.184.216.34

    • 其他信息(如 TTL、协议号等)。

    路由过程开始

    • 操作系统根据目标 IP 地址和本地路由表,判断这个包应该发送到哪个网关(通常是路由器)。

    • 电脑通过局域网(如 Wi-Fi)将 IP 包发送给路由器。

    • 路由器查看目标 IP,并根据自己的路由表,决定下一个要发送到的路由器。这个过程在互联网上的每一个路由器上重复,直到数据包到达目标服务器所在的网络。

    • 每个中间路由器都会解开 MAC 头部,查看 IP 头部,根据路由表做出转发决策,然后重新封装一个新的 MAC 头部,发往下一跳。这就是 “路由”

  5. 物理传输: 最终,IP 包被转换成电信号或光信号,在物理线路上传输。

服务器端的反向流程:

  1. 服务器的网络接口收到数据帧,层层解封装。

  2. IP 层: 去掉 IP 头部,发现协议是 TCP,将数据交给 TCP 层。

  3. TCP 层: 去掉 TCP 头部,根据端口号 443,将数据段重组为完整的数据流,交给 TLS 层。

  4. TLS 层: 使用会话密钥解密数据,得到明文的 HTTP 请求。

  5. HTTP 层: Web 服务器(如 Nginx)处理 GET /index.html 请求,准备响应数据(如 HTML 文件)。

响应流程与请求完全对称:服务器的 HTTP 响应 -> TLS 加密 -> TCP 分段 -> IP 封装 -> 路由 -> 访问端电脑 -> 反向解封装 -> TLS 解密 -> 浏览器渲染 HTML。

第四阶段:连接终止 - 四次挥手

通信完成后,双方需要优雅地关闭连接。

  1. FIN (结束)

    • 客户端 主动发送一个 TCP 包,其 FIN 标志位设置为 1,表示数据发送完毕,请求关闭连接。

  2. ACK (确认)

    • 服务器 收到 FIN 后,发送一个 ACK 包进行确认。

    • (此时,从客户端到服务器的单向连接关闭,但服务器到客户端的连接可能还在传输数据)。

  3. FIN (结束)

    • 当服务器也数据发送完毕后,它会发送一个自己的 FIN 包给客户端。

  4. ACK (确认)

    • 客户端 收到服务器的 FIN 后,发送一个 ACK 包进行确认。

    • 客户端会等待一个超时时间(TIME_WAIT),确保服务器收到了这个 ACK,然后完全关闭连接。

至此,整个 TCP+TLS 连接完全关闭。

http://www.dtcms.com/a/617787.html

相关文章:

  • 智能体AI、技术浪潮与冲浪哲学
  • 基于 PyTorch + BERT 意图识别与模型微调
  • 沃尔沃公司网站建设微信官方网站建设
  • 网站备案域名怎么买找在农村适合的代加工
  • 42 解决一些问题
  • Claude Code 功能+技巧
  • 基于人脸识别和 MySQL 的考勤管理系统实现
  • AUTOSAR_CP_OS-Operating System for Multi-Core:多核操作系统
  • 什么是 “信任模型” 和 “安全假设”?
  • 【秣厉科技】LabVIEW工具包——HIKRobot(海康机器人系列)
  • 网易UU远程全功能技术解构:游戏级性能突围与安全边界探析
  • 蓝桥杯第八届省赛单片机设计完全入门(零基础保姆级教程)
  • 搭建网站分类建立名词
  • 没有域名的网站wordpress占用资源
  • RPA+AI双剑合璧!小红书商品笔记自动发布,效率提升2000%[特殊字符]
  • 19.传输层协议UDP
  • linux服务-rsync+inotify文件同步-rsync
  • 机器学习之ravel()的作用
  • Wi-Fi 7路由器性能分析:从传输速率到多设备协同全面解析
  • 【Java手搓RAGFlow】-1- 环境准备
  • 审计部绩效考核关键指标与综合评估方法
  • Photoshop - Photoshop 工具栏(29)钢笔工具
  • 营销型网站策划方案大德通众包做网站怎么样
  • 使用 Web Workers 提升前端性能:让 JavaScript 不再阻塞 UI
  • HTTP与HTTPS深度解析:从明文传输到安全通信
  • 知识图谱与语言教育:AI如何重构小语种学习的基础设施
  • 在 Hadoop 生态使用 JuiceFS,并为Hive提供HDFS存储安装指南
  • Hive内置函数
  • 瑞丽航空公司官方网站网络推广的好处
  • [ROS2]启动文件格式