计算机网络:电脑访问网站的完整流程详解+面试习题

当你在浏览器地址栏输入 https://www.example.com 并按下回车时,一场复杂的网络通信流程随即展开。以下是 从用户输入到页面显示的完整流程 ,包含所有技术细节:

一、URL解析与预处理

1. URL结构解析

浏览器首先解析输入的URL,提取核心信息:

https://www.example.com:443/path/page.html?param=value#section

  • 协议 : https → 加密的HTTP协议,使用TCP 443端口

  • 域名 : www.example.com → 服务器的域名标识

  • 端口 : :443 → HTTPS默认端口(HTTP默认80端口,可省略)

  • 路径 : /path/page.html → 服务器上的资源路径

  • 查询参数 : ?param=value → 传递给服务器的额外参数

  • 片段标识符 : #section → 页面内锚点(仅浏览器本地处理,不发送到服务器)

2. 浏览器缓存检查

浏览器会检查本地缓存**(内存缓存、磁盘缓存)**,判断资源是否已存在且未过期:

  • 缓存命中 :直接从缓存加载,跳过后续网络请求

  • 缓存未命中 :继续执行网络请求流程

二、DNS域名解析:将域名转换为IP地址

浏览器无法直接使用域名通信,需要通过**DNS(域名系统)**将域名解析为IP地址。

1. DNS解析流程

  1. 本地DNS缓存检查 :浏览器、操作系统、路由器依次检查缓存

  2. 递归DNS查询 :

  • 客户端向 本地DNS服务器 (通常是ISP提供)发送递归查询

  • 本地DNS服务器向 根域名服务器 查询 .com 顶级域名服务器的IP

  • 本地DNS服务器向 .com 顶级域名服务器查询 example.com 权威DNS服务器的IP

  • 本地DNS服务器向 example.com 权威DNS服务器查询 www.example.com 的IP

  1. 返回结果 :本地DNS服务器将 www.example.com 的IP地址(如 93.184.216.34 )返回给浏览器

2. DNS优化技术

  • DNS预解析 :浏览器预先解析页面中的域名

  • DNS缓存 :本地缓存解析结果,减少重复查询

  • DNS负载均衡 :权威DNS服务器返回多个IP,实现服务器负载均衡

三、TCP连接建立:三次握手

获得服务器IP后,浏览器通过 TCP协议 与服务器建立可靠连接(HTTPS需额外进行TLS握手)。

1. TCP三次握手流程

客户端 → 服务器:SYN(同步序列号)+ 初始序列号(ISN=1000)

服务器 → 客户端:SYN+ACK(确认)+ 服务器ISN(2000)+ 确认号(1001)

客户端 → 服务器:ACK(确认)+ 确认号(2001)

2. 三次握手的意义

  • 第一次握手 :客户端请求建立连接,发送初始序列号

  • 第二次握手 :服务器确认连接请求,发送自己的初始序列号和确认客户端序列号

  • 第三次握手 :客户端确认服务器的序列号,连接正式建立

3. TCP关键参数协商

  • MSS(最大段大小) :协商每个TCP段的最大数据量(通常=MTU-IP头-TCP头=1460字节)

  • 窗口大小 :协商流量控制参数

  • 选项字段 :如SACK(选择性确认)、TS(时间戳)等优化参数

四、TLS/SSL握手:建立加密通道(仅HTTPS)

如果是HTTPS协议,在TCP连接建立后,需要通过**TLS/SSL(传输层安全)**握手建立加密通道。

1. TLS 握手流程(现代浏览器默认)

  1. 客户端问候 :发送TLS版本、支持的加密套件、随机数 client_random

  2. 服务器问候 :发送选择的TLS版本、加密套件、随机数 server_random 、服务器证书

  3. 证书验证 :客户端验证服务器证书(颁发机构、有效期、域名匹配等)

  4. 密钥交换 :客户端生成 预主密钥(pre-master secret) ,用服务器公钥加密后发送

  5. 会话密钥生成 :双方使用 client_random 、 server_random 和预主密钥计算 会话密钥 (用于后续加密通信)

  6. 握手完成 :双方发送加密的 Finished 消息,确认握手成功

2. TLS加密机制

  • 对称加密 :使用会话密钥加密HTTP数据(速度快)

  • 非对称加密 :仅用于握手阶段的密钥交换(安全性高)

  • 数字证书 :由CA机构颁发,证明服务器身份,防止中间人攻击

五、HTTP请求发送:请求服务器资源

加密通道建立后,浏览器通过**HTTP/2(或HTTP/1.1)**协议向服务器发送请求。

1. HTTP请求结构

HTTP请求由三部分组成: 请求行 、 请求头 、 请求体

GET /path/page.html?param=value HTTP/2

Host: www.example.com

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64;

x64) ...

Accept: text/html,application/xhtml+xml,...

Accept-Encoding: gzip, deflate, br

Cookie: session_id=abc123

2. 关键请求头解析

  • Host :指定服务器域名(支持虚拟主机)

  • User-Agent :浏览器类型和版本信息

  • Accept :客户端可接受的响应格式

  • Accept-Encoding :支持的压缩算法(如gzip、br)

  • Cookie :存储在客户端的会话信息

3. HTTP请求的传输

  • HTTP请求被拆分为 HTTP帧 (HTTP/2)或 TCP段 (HTTP/1.1)

  • 每个帧/段被封装在 TLS记录 中加密

  • TLS记录被封装在 TCP段 中,添加TCP头

  • TCP段被封装在 IP数据包 中,添加IP头

  • IP数据包被封装在 MAC帧 中,添加MAC头

  • MAC帧转换为 物理信号 (电/光/无线)发送到网络

六、服务器处理请求

服务器收到请求后,经过多层处理,生成响应。

1. 服务器处理流程

  1. 网络层接收 :网络接口卡接收物理信号,转换为MAC帧,解析后传递IP数据包

  2. 传输层处理 :TCP协议重组TCP段,验证校验和,传递给TLS层

  3. TLS层解密 :使用会话密钥解密TLS记录,得到HTTP请求

  4. 应用层处理 :

  • Web服务器 (如Nginx、Apache)接收HTTP请求

  • 根据请求路径查找资源或转发给 应用服务器 (如Tomcat、Node.js)

  • 应用服务器处理业务逻辑(如查询数据库、生成动态内容)

  1. 生成响应 :将处理结果封装为HTTP响应

2. 服务器组件示例

客户端 → 负载均衡器 → Web服务器 → 应用服务器 → 数据库

  • 负载均衡器 :分发请求到多台Web服务器(如Nginx、LVS)

  • Web服务器 :处理静态资源请求,转发动态请求(如Nginx)

  • 应用服务器 :执行业务逻辑,生成动态内容(如Node.js)

  • 数据库 :存储和查询数据(如MySQL、MongoDB)

七、HTTP响应返回:服务器响应客户端

1. HTTP响应结构

HTTP响应由三部分组成: 状态行 、 响应头 、 响应体

HTTP/2 200 OK

Content-Type: text/html; charset=UTF-8

Content-Length: 12345

Content-Encoding: gzip

Date: Wed, 10 Jan 2026 08:00:00 GMT

Set-Cookie: new_session=def456
<!DOCTYPE html>

<html>

<head><title>Example</title></head>

<body><h1>Hello World</h1></body>

</html>

2. 关键响应头解析

  • 状态码 : 200 OK → 请求成功(常见状态码:404未找到、500服务器错误)

  • Content-Type :响应体的媒体类型(如 text/html 、 application/json )

  • Content-Length :响应体的长度(字节)

  • Content-Encoding :响应体使用的压缩算法

  • Set-Cookie :服务器设置的Cookie信息

3. HTTP响应的传输

与请求发送流程相反:

  • HTTP响应被封装为HTTP帧/TCP段

  • 加密为TLS记录,封装为TCP段、IP数据包、MAC帧

  • 转换为物理信号发送回客户端

八、浏览器渲染页面

浏览器接收HTTP响应后,开始解析和渲染页面。

1. 响应处理流程

  1. 解码响应体 :根据 Content-Encoding 解压响应体

  2. 解析HTML :构建 DOM树 (Document Object Model)

  3. 解析CSS :构建 CSSOM树 (CSS Object Model)

  4. 构建渲染树 :将DOM树和CSSOM树合并,生成 渲染树 (包含可见元素的样式信息)

  5. 布局(Layout) :计算每个元素的位置和大小

  6. 绘制(Paint) :将渲染树转换为像素点

  7. 合成(Composite) :将不同图层的像素点合成最终图像

2. 资源加载与优化

  • 并行加载 :浏览器同时加载多个资源(如CSS、JS、图片)

  • 预加载 :使用 <link rel="preload"> 提前加载关键资源

  • 懒加载 :延迟加载非首屏资源(如图片)

九、TCP连接关闭:四次挥手

页面加载完成后,TCP连接会根据情况关闭。

1. TCP四次挥手流程

客户端 → 服务器:FIN(结束发送)+ 序列号(A)

服务器 → 客户端:ACK(确认)+ 确认号(A+1)

服务器 → 客户端:FIN(结束发送)+ 序列号(B)

客户端 → 服务器:ACK(确认)+ 确认号(B+1)

2. 挥手过程详解

  • 第一次挥手 :客户端通知服务器不再发送数据

  • 第二次挥手 :服务器确认接收

  • 第三次挥手 :服务器通知客户端不再发送数据

  • 第四次挥手 :客户端确认接收,连接关闭

3. 连接复用与优化

  • HTTP/1.1 :默认使用 持久连接 (Keep-Alive),减少连接建立开销

  • HTTP/2 :使用 多路复用 ,在单个TCP连接上并行传输多个HTTP请求/响应

  • HTTP/3 :基于 QUIC协议 ,使用UDP替代TCP,解决TCP队头阻塞问题

十、物理层传输细节

在整个流程中,所有数据最终都通过 物理层 传输:

1. 数据封装与解封装

数据在网络中传输时,会经过多层封装和解封装:

应用层:HTTP请求/响应 →

传输层:TCP段(添加TCP头) →

网络层:IP数据包(添加IP头) →

数据链路层:MAC帧(添加MAC头) →

物理层:物理信号(电/光/无线)

2. 物理信号传输

  • 电信号 :双绞线(网线)传输,通过电压变化表示0/1

  • 光信号 :光纤传输,通过光强度变化表示0/1

  • 无线信号 :WiFi/4G/5G传输,通过电磁波频率/相位变化表示0/1

3. 网络设备协作

  • 网卡 :将数字信号转换为物理信号

  • 交换机 :同一网络内的数据帧转发(基于MAC地址)

  • 路由器 :不同网络间的数据包路由(基于IP地址)

  • 防火墙 :过滤网络流量,保障安全

  • 代理服务器 :缓存资源,加速访问(如CDN)

总结:完整流程时间线

  1. 0-10ms :URL解析与缓存检查

  2. 10-100ms :DNS域名解析

  3. 100-200ms :TCP三次握手(HTTPS需额外TLS握手)

  4. 200-300ms :HTTP请求发送与服务器处理

  5. 300-500ms :HTTP响应返回与浏览器渲染

  6. 500ms+ :页面加载完成,TCP连接关闭

从用户输入到页面显示,整个流程涉及 应用层 (HTTP/DNS)、 传输层 (TCP/TLS)、 网络层 (IP)、 数据链路层 (MAC)和 物理层 (物理信号),是现代网络通信技术的综合体现。

核心技术栈:URL、DNS、TCP、TLS/SSL、HTTP/HTTPS、HTML/CSS/JS、浏览器渲染引擎

十一、面试习题

一、选择题

HTTP协议是基于哪个协议之上的?

A. UDP

B. TCP

C. IP

D. HTTP/2
**B. TCP**
以下哪个HTTP方法用于获取资源?

A. POST

B. GET

C. PUT

D. DELETE
**B. GET**

HTTP协议的默认端口号是:

A. 80

B. 443

C. 8080

D. 21
**A. 80**
HTTP状态码200表示:

A. 请求成功

B. 请求重定向

C. 请求错误

D. 服务器错误
**A. 请求成功**
以下哪个状态码表示客户端请求的资源不存在?

A. 200

B. 301

C. 404

D. 500
**C. 404**

二、判断题

HTTP协议是无状态的,即每个请求都是独立的。(对/错)

HTTP/2相比HTTP/1.1引入了头部压缩和多路复用等特性。(对/错)

HTTPS协议在HTTP协议的基础上增加了SSL/TLS层,用于加密通信。(对/错)

HTTP请求报文包含请求行、请求头和请求体。(对/错)

HTTP响应报文包含状态行、响应头和响应体。(对/错)
**HTTP协议是无状态的,即每个请求都是独立的。(对/错)**

**对**

**HTTP/2相比HTTP/1.1引入了头部压缩和多路复用等特性。(对/错)**

**对**

**HTTPS协议在HTTP协议的基础上增加了SSL/TLS层,用于加密通信。(对/错)**

**对**

**HTTP请求报文包含请求行、请求头和请求体。(对/错)**

**对**

**HTTP响应报文包含状态行、响应头和响应体。(对/错)**

**对**

三、简答题

简述HTTP协议的工作原理。
HTTP是一种应用层协议,用于在Web服务器和客户端之间传输超文本数据。它的工作原理基于请求/响应模型:客户端(如浏览器)发送一个HTTP请求到服务器,服务器处理请求并返回一个HTTP响应。这个响应包含了所请求的数据(如HTML文档、图片等)或者错误信息。
解释HTTP状态码301和302的区别。
HTTP状态码301表示永久重定向,意味着请求的资源已被永久移动到新位置,客户端应使用Location头指定的新URI进行以后的请求。302表示临时重定向,资源临时被移动到另一个URI,客户端在本次请求中使用新URI,但在未来的请求中仍应使用原URI。
什么是HTTP请求方法?请列举常见的HTTP请求方法并简要说明其用途。
**GET**:请求从服务器检索特定资源。是最常用的方法。

**POST**:向服务器提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。

**PUT**:上传指定资源,请求服务器存储资源。

**DELETE**:请求服务器删除指定的资源。

**HEAD**:请求获取与GET请求相同的响应,但没有响应体。
什么是HTTP头信息?请列举常见的HTTP请求头和响应头字段。

  • **请求头**:

  • `User-Agent`:发出请求的浏览器或客户端标识。

  • `Accept`:客户端能够处理的媒体类型。

  • `Host`:请求的服务器的域名。

  • `Content-Type`:请求体的媒体类型。

  • `Authorization`:认证信息,用于访问受保护的资源。

  • **响应头**:

  • `Content-Type`:响应体的媒体类型。

  • `Set-Cookie`:服务器向客户端设置cookie。

  • `Location`:用于重定向的URI。

  • `Server`:服务器软件名称。
    简述HTTPS协议与HTTP协议的区别。
    HTTPS是HTTP的安全版本,它在HTTP的基础上通过SSL/TLS协议提供了数据加密、完整性校验和身份验证。这意味着HTTPS可以保护交换的数据免受窃听和篡改,并确保数据是从一个真实的服务器发送的。主要区别在于HTTPS在传输层使用SSL/TLS进行加密,而HTTP不提供这样的加密。

相关推荐
左绍骏2 小时前
01.学习预备
android·java·学习
wanderist.2 小时前
C++输入输出的一些问题
开发语言·c++·图论
PXM的算法星球2 小时前
用 semaphore 限制 Go 项目单机并发数的一次流量控制优化实践
开发语言·后端·golang
寻星探路2 小时前
【算法专题】哈希表:从“两数之和”到“最长连续序列”的深度解析
java·数据结构·人工智能·python·算法·ai·散列表
非凡ghost2 小时前
ImageConverter(图像转换编辑工具)
图像处理·人工智能·windows·学习·计算机视觉·软件需求
鹏程十八少2 小时前
破解Android悬浮窗遮挡无障碍服务难题:我在可见即可说上踩过的坑
android·前端·面试
@zulnger2 小时前
python 学习笔记(闭包)
笔记·python·学习
SHolmes18542 小时前
Python all函数 判断是否同时满足多个条件
java·服务器·python
inksci2 小时前
Python 中使用 SQL 连接池
服务器·数据库·python