# 从网络角度来看,用户从输入网址到网页显示,期间发生了什么?

8 min read
Table of Contents

从网络角度来看,用户从输入网址到网页显示,期间发生了什么?

从网络角度看用户输入网址到网页显示的过程

【核心定义】

这是一个典型的HTTP请求响应过程,涉及DNS解析、TCP连接建立、HTTP请求发送、服务器处理、响应接收和浏览器渲染等多个网络协议层的协同工作。

【关键要点】

1. DNS域名解析

  • 结论:将域名转换为IP地址
  • 原理:浏览器检查本地缓存 → 系统hosts文件 → 本地DNS解析器缓存 → 递归查询DNS服务器(根域名→顶级域名→权威域名服务器)

2. TCP连接建立

  • 结论:通过三次握手建立可靠连接
  • 原理:客户端发送SYN → 服务器响应SYN+ACK → 客户端发送ACK确认

3. HTTP请求发送

  • 结论:构建并发送HTTP请求报文
  • 原理:包含请求行(方法+URL+版本)、请求头、请求体,通过TCP连接发送到服务器

4. 服务器处理与响应

  • 结论:服务器处理请求并返回响应
  • 原理:Web服务器接收请求 → 应用服务器处理 → 数据库查询 → 生成响应(状态码+响应头+响应体)

5. 浏览器渲染

  • 结论:解析响应内容并渲染页面
  • 原理:解析HTML构建DOM树 → 解析CSS构建CSSOM树 → 合并为渲染树 → 布局 → 绘制

【深度推导/细节】

DNS解析的详细过程

Step 1: 浏览器检查自身缓存(chrome://net-internals/#dns)
Step 2: 操作系统检查hosts文件和DNS缓存
Step 3: 向配置的本地DNS服务器发起递归查询
Step 4: 本地DNS服务器迭代查询:
- 查询根域名服务器(获得.com顶级域名服务器地址)
- 查询顶级域名服务器(获得权威域名服务器地址)
- 查询权威域名服务器(获得目标IP地址)
Step 5: 结果缓存并返回给客户端

TCP三次握手的必要性

  • 解决的根本问题:确保双方都能确认对方的发送和接收能力正常
  • 防止历史连接初始化:通过序列号机制避免旧连接的干扰
  • 同步初始序列号:为可靠传输奠定基础

HTTPS的TLS握手过程

Step 1: Client Hello(支持的TLS版本、加密套件、随机数)
Step 2: Server Hello(选择的版本和套件、服务器随机数、证书)
Step 3: 客户端验证证书,生成预主密钥并用公钥加密
Step 4: 双方通过预主密钥和随机数生成会话密钥
Step 5: 切换为加密通信

【关联/对比】

HTTP/1.1 vs HTTP/2 vs HTTP/3

  • HTTP/1.1:持久连接但存在队头阻塞,每个域名最多6个并发连接
  • HTTP/2:二进制分帧、多路复用、头部压缩、服务器推送
  • HTTP/3:基于QUIC(UDP),解决TCP队头阻塞,0-RTT连接建立

DNS查询类型对比

  • 递归查询:客户端→本地DNS,要求最终结果
  • 迭代查询:本地DNS→各级服务器,只返回下一级地址

渲染引擎差异

  • WebKit(Safari):HTML解析 → DOM树 → 渲染树 → 布局 → 绘制
  • Blink(Chrome):多进程架构,更复杂的渲染流水线

『面试官追问』

可能追问的问题:

  1. DNS解析为什么用UDP而不是TCP?

    • 答:UDP无连接、速度快,适合小数据包查询。仅在响应过大(超过512字节)或区域传输时使用TCP。
  2. TCP为什么需要三次握手而不是两次?

    • 答:两次握手无法防止已失效的连接请求报文突然传送到服务器,导致服务器资源浪费。三次握手确保双方都能确认对方的收发能力。
  3. HTTPS的TLS握手具体如何保证安全?

    • 答:通过非对称加密交换对称密钥(前向安全),证书链验证身份,数字签名防止篡改。
  4. 浏览器并发连接数限制是多少?为什么?

    • 答:HTTP/1.1下每个域名通常6个(Chrome),防止服务器过载和DoS攻击。HTTP/2通过多路复用突破此限制。
  5. 从输入URL到页面显示,哪些步骤可以优化?

    • 答:DNS预解析、TCP快速打开、HTTP/2、CDN加速、资源压缩、缓存策略、懒加载等。

关键数字与设计合理性:

  • DNS TTL(Time to Live):通常300秒,平衡缓存效率与更新及时性
  • TCP初始拥塞窗口:10个MSS(约14KB),平衡传输效率与网络友好性
  • 浏览器并发连接数:6个(HTTP/1.1),基于RFC规范和实践经验
  • TCP Keep-Alive超时:通常2小时,保持连接复用

【性能优化视角】

关键性能指标

  1. DNS解析时间:平均60-120ms,可通过预解析减少
  2. TCP连接时间:1-2个RTT,可通过持久连接复用
  3. TLS握手时间:1-2个RTT(完整握手),会话恢复可减少
  4. TTFB(首字节时间):反映服务器处理速度
  5. 内容下载时间:受带宽和资源大小影响

现代优化技术

  • HTTP/2服务器推送:主动推送关键资源
  • QUIC 0-RTT:重用之前连接的参数快速建立
  • Brotli压缩:比gzip更高的压缩率
  • 资源提示:preconnect、preload、prefetch

这个过程的每个环节都体现了计算机网络分层架构的设计哲学,从应用层到传输层再到网络层,各司其职又协同工作,最终实现了用户友好的Web体验。

My avatar

文章看完了,不打算去别的篇章转转吗?👀 感谢你的耐心阅读!如果你有问题想探讨,或者发现了文中的 Bug,请务必通过页脚的链接联系我


More Posts

# 负载均衡算法有哪些?

8 min read

负载均衡算法是一组用于在多个服务器或计算资源之间智能分配请求或任务的策略,旨在优化资源利用率、最大化吞吐量、最小化响应时间并避免单点过载。

Read

# 到底什么是 TCP 连接?

10 min read

TCP 连接是通信双方在传输数据前,通过三次握手建立的、包含双方状态信息(如序列号、窗口大小等)的虚拟通信通道,确保数据传输的可靠性和有序性。

Read

Comments