一句话说透计算机网络里面的从浏览器输入url到显示主页的过程

200 阅读3分钟

一句话总结:
从输入URL到显示主页,就像快递从下单到收货——查地址(DNS)、找路线(TCP)、打包发货(HTTP)、拆箱验货(渲染),一步都不能少!


一、整体流程概览

  1. 输入URL:用户输入网址(如 https://www.example.com)。
  2. DNS解析:将域名转换为IP地址(找快递地址)。
  3. 建立TCP连接:通过三次握手与服务端建立可靠连接(确认快递路线)。
  4. TLS握手(HTTPS) :加密通信通道(给快递加锁)。
  5. 发送HTTP请求:浏览器请求页面数据(下单)。
  6. 服务器处理请求:后端生成HTML(打包商品)。
  7. 接收HTTP响应:服务器返回数据(快递发货)。
  8. 浏览器解析渲染:构建DOM、CSSOM、渲染树,最终显示页面(拆箱验货)。
  9. 加载附加资源:图片、JS、CSS等(拆多个包裹)。

二、详细步骤拆解

1. DNS解析:查快递地址

  • 浏览器缓存:先查本地是否有缓存(如 www.example.com → 93.184.216.34)。
  • 系统缓存:无缓存则查操作系统(hosts文件)。
  • 路由器缓存:继续向上查路由器DNS缓存。
  • ISP DNS服务器:向网络服务商的DNS服务器查询。
  • 递归查询:若ISP无记录,依次查询根域名 → .com域名 → 权威域名服务器。

示例

输入 www.example.com → DNS解析 → 获得IP 93.184.216.34  

2. 建立TCP连接:三次握手确认路线

  • 第一次握手:客户端发送 SYN 包(我要发快递)。
  • 第二次握手:服务端回复 SYN-ACK 包(我收到了,你能收到吗?)。
  • 第三次握手:客户端发送 ACK 包(能收到,开始发吧!)。

比喻

  • 客户:“我要发货”(SYN)。
  • 快递站:“收到,请确认地址”(SYN-ACK)。
  • 客户:“确认无误”(ACK)。

3. TLS握手(HTTPS):加密快递箱

  • ClientHello:客户端支持的TLS版本、加密套件。
  • ServerHello:服务端选择加密方式,发送证书(含公钥)。
  • 验证证书:浏览器检查证书是否有效(是否由可信CA签发)。
  • 密钥交换:客户端生成会话密钥,用公钥加密后发送。
  • 加密通信:双方使用会话密钥加密数据。

关键点:确保传输过程防窃听、防篡改。

4. 发送HTTP请求:下单

GET / HTTP/1.1  
Host: www.example.com  
User-Agent: Chrome/120.0  
Accept: text/html  
Cookie: session_id=abc123  

5. 服务器处理请求:打包商品

  • Web服务器(如Nginx) :处理静态资源(HTML、CSS)。
  • 应用服务器(如Tomcat) :执行业务逻辑(查询数据库)。
  • 数据库(如MySQL) :返回查询结果(商品数据)。

6. 接收HTTP响应:快递发货

HTTP/1.1 200 OK  
Content-Type: text/html  
Content-Length: 1234  

<!DOCTYPE html>  
<html>...</html>  

7. 浏览器解析渲染:拆箱验货

  • 解析HTML:构建DOM树(网页结构)。
  • 解析CSS:生成CSSOM树(样式规则)。
  • 合并渲染树:DOM + CSSOM → 渲染树。
  • 布局(Layout) :计算元素位置和大小。
  • 绘制(Paint) :将像素输出到屏幕。

优化点

  • 异步加载JS:使用 async 或 defer 避免阻塞DOM解析。
  • 懒加载图片:仅加载可视区域内的图片。

8. 加载附加资源:拆多个包裹

  • 并发请求:浏览器并行下载图片、JS、CSS(同一域名默认6个并发)。
  • 缓存策略:检查 Cache-Control 和 ETag,复用本地缓存。

三、关键问题与解决方案

问题解决方案
DNS解析慢使用DNS预解析 <link rel="dns-prefetch">
TCP握手延迟启用HTTP/2或HTTP/3(QUIC协议)
渲染阻塞内联关键CSS,异步加载JS
资源过大压缩文件(Gzip/Brotli),CDN加速
HTTPS证书错误检查证书有效期,更新为可信CA签发

四、总结口诀

“输入URL找IP,三次握手建连接。
HTTPS加个密,请求响应传数据。
解析渲染拼页面,资源加载别忘记。
缓存并发优化好,网页秒开用户喜!”