一个写了十年代码、面过上百场的过来人,说点面试里真正管用的东西。
网络方向最高频的一道题,没有之一。
面试官问:“从输入URL到页面展示,发生了什么?”
大部分人的回答是:DNS解析→TCP三次握手→HTTP请求→浏览器渲染→断开连接。
面试官听了点点头,心里想:“八股文背得还行。”
但如果你想拿高分,就不能只背流程。
你得让面试官觉得:你不光知道流程,还知道每一层为什么这样设计。
今天就把这道题拆透了。每一层都给你“基础答案”和“加分答案”,背下来就能用。
这道题到底在考什么?
这道题覆盖了计算机网络全部五层模型。面试官想通过一道题,摸清你对整个网络栈的理解深度。
| 考察点 | 你答得出来吗 |
|---|---|
| 浏览器缓存 | 强缓存 vs 协商缓存 |
| DNS解析 | 递归 vs 迭代 |
| TCP三次握手 | 为什么不是两次? |
| HTTPS/TLS握手 | 加密流程是怎样的? |
| HTTP演进 | HTTP/1.1、HTTP/2、HTTP/3有什么区别? |
| 浏览器渲染 | 从HTML到页面,经历了什么? |
| TCP四次挥手 | 为什么是四次?TIME_WAIT是什么? |
第一步:浏览器缓存检查
基础答案
浏览器先检查缓存,有就直接用,没有就发请求。
加分答案
缓存分为两种:
强缓存:没过期就直接用,根本不发请求。
协商缓存:过期了,去服务器问一下“资源变没变”,没变就继续用(304),变了就拉新的(200)。
一句话讲给面试官:强缓存不发请求,协商缓存发请求但不一定传数据。缓存是性能优化的第一道关卡,也是面试官考察你是否真正关注过页面加载速度的切入点。
第二步:DNS解析——把域名变成IP
基础答案
浏览器把域名转换成IP地址,才能找到服务器。
加分答案
DNS解析是一层一层查的,顺序是:
浏览器缓存 → 操作系统hosts文件 → 本地DNS服务器 → 根DNS服务器 → 顶级域服务器 → 权威DNS服务器
两种查询方式:
- 递归查询:客户端只问一次,DNS服务器替你问到底
- 迭代查询:DNS服务器告诉你“你去问下一个”,客户端自己一路问下去
一句话讲给面试官:DNS是互联网的“电话簿”,从本地缓存一路问到权威服务器。递归是“你帮我查”,迭代是“你告诉我下家在哪”。
第三步:TCP三次握手——建立连接
基础答案
客户端发SYN,服务器回SYN-ACK,客户端再发ACK,连接建立。
加分答案
三次握手的核心目的不是“确认双方在线”,而是同步双方的初始序列号,保证后续数据不乱序、不丢失。
关键追问:为什么不是两次握手?
两次握手无法防止过期的连接请求突然传到服务器。服务器以为客户端要建立新连接,会白白等着,浪费资源。
一句话讲给面试官:三次握手是为了同步序列号,防止过期请求浪费服务器资源。两次握手做不到这一点。
第四步:TLS握手——加密通信(HTTPS才有这一步)
基础答案
客户端和服务端协商加密方式,交换密钥,后续通信加密传输。
加分答案
HTTPS用的是混合加密:
- 非对称加密(公钥/私钥):安全,但慢——用来交换密钥
- 对称加密:快——用来传输数据
TLS握手流程简化为四步:
① 客户端发“我要加密通信”(ClientHello)
② 服务器回复“可以”,并附上数字证书(ServerHello + 证书)
③ 客户端验证证书是否可信(CA签名、域名、有效期)
④ 双方协商出对称加密密钥,后续用对称加密传输数据
一句话讲给面试官:HTTPS用非对称加密交换密钥,用对称加密传输数据。证书是用来验证“对方真的是他要冒充的那个网站”。
第五步:HTTP请求与响应
基础答案
浏览器发HTTP请求,服务器返回HTML、CSS、JS等资源。
加分答案
HTTP协议经历了三代演进:
| 版本 | 特点 | 问题 |
|---|---|---|
| HTTP/1.1 | 每个请求一个TCP连接 | 队头阻塞——前面的请求慢了,后面的都得等 |
| HTTP/2 | 多路复用——一个TCP连接并发处理多个请求 | 解决了应用层队头阻塞,但TCP层的队头阻塞还在 |
| HTTP/3 | 基于UDP的QUIC协议 | 彻底解决队头阻塞,连接建立更快 |
一句话讲给面试官:1.1排队,2.0并行,3.0换车(从TCP换到UDP)。每次演进都在解决“前面的请求堵住后面的”这个问题。
第六步:浏览器渲染——把代码变成页面
基础答案
浏览器解析HTML和CSS,把代码渲染成可视页面。
加分答案
渲染是一个渐进式的过程,完整路径是:
解析HTML → DOM树
解析CSS → CSSOM树
DOM + CSSOM → 渲染树(只包含可见元素)
布局 → 绘制 → 合成 → 页面展示
两个关键点:
- CSS阻塞渲染:CSS不加载完,页面不显示
- JS阻塞解析:JS执行时,HTML解析暂停
优化方向:CSS放在<head>尽早加载,JS用defer或async避免阻塞。
一句话讲给面试官:浏览器渲染是“先搭结构(DOM),再化妆(CSS),最后上墙(绘制)”。关键优化是让CSS尽早加载、JS延后执行。
第七步:TCP四次挥手——断开连接
基础答案
客户端发FIN,服务器回ACK,服务器发FIN,客户端回ACK。
加分答案
TCP是全双工通信——双方都可以发送和接收。所以关闭也要分两步:先关客户端→服务器的方向,再关服务器→客户端的方向。
关键追问:为什么是四次不是三次?
因为客户端说“我发完了”,不代表服务器也发完了。服务器可能还有数据要发,所以不能合并成一次。
TIME_WAIT是什么?
客户端发完最后的ACK后,要等待2MSL才彻底关闭。目的是确保服务器收到了ACK——万一ACK丢了,服务器会重发FIN,客户端还能回应。
一句话讲给面试官:四次挥手是因为TCP是全双工的,关闭要分两步走。TIME_WAIT是为了确保最后的ACK能送达。
面试加分答案(直接背)
面试官:从输入URL到页面展示,发生了什么?
你可以这样答(7层框架):
我从七个环节来回答。
第一,缓存检查。浏览器先看强缓存,没过期直接用;过期了走协商缓存,去服务器确认资源是否更新。
第二,DNS解析。把域名转成IP,从浏览器缓存一路查到权威DNS服务器。
第三,TCP三次握手。同步序列号,建立可靠连接。为什么不是两次?为了防止过期请求浪费服务器资源。
第四,TLS握手(如果是HTTPS)。用非对称加密交换对称加密密钥,后续用对称加密传输数据。
第五,HTTP请求。发送请求,服务器返回资源。HTTP/1.1有队头阻塞,HTTP/2用多路复用解决了这个问题。
第六,浏览器渲染。解析HTML和CSS,构建DOM树和CSSOM树,合并成渲染树,经过布局、绘制、合成后展示页面。
第七,TCP四次挥手。断开连接,客户端等待2MSL确保最后的ACK到达。
面试官追问:你有没有实际遇到过跟这些环节相关的问题?
面试官听完上面那套,觉得你理论过关。这时候可能会追问一句:
“你刚才提到缓存策略,实际项目中遇到过缓存导致的问题吗?”
加分答案:
遇到过。有一次修改了页面的CSS样式,但用户反馈页面没变化。排查后发现是强缓存导致的——
Cache-Control: max-age=86400(24小时),用户浏览器用的是旧缓存。解决方案是给静态资源加版本号:
style.css?v=2.3.1。这样每次版本更新,URL变了,浏览器就会重新拉取,不受缓存影响。后来还发现HTML页面本身设置了缓存,导致用户看到的是旧版HTML,引用的新CSS版本号在里面根本不存在。最终方案是HTML走协商缓存(
Cache-Control: no-cache),确保每次请求都验证更新;静态资源走强缓存+版本号。
还有一次和DNS相关的问题:有一次部署新服务,域名解析一直不生效。排查发现是本地DNS服务器缓存了旧记录,最后等TTL过期才生效。从那以后,部署前会先调小TTL(比如300秒),等稳定后再改大。
面试加分项:反问面试官的问题
面试是双向的。当面试官问完“你有什么想问我的吗”,如果能反问一个高质量问题,会立刻拉高面试官的印象分。
你可以这样问(网络方向):
“我想了解一下,公司目前的技术栈里,HTTP协议用的是哪个版本?有没有计划向HTTP/3迁移?如果已经在用,迁移过程中遇到的主要挑战是什么?”
这个问题既展示了你对HTTP/3的关注,又让对方觉得你是一个关心实际工程问题的候选人,而不是只会背八股文。
不同面试场景的侧重点
| 面试类型 | 面试官最看重什么 | 建议侧重 |
|---|---|---|
| 互联网大厂 | 协议细节 + 工程实践 + 性能优化 | 重点讲HTTP/2多路复用、缓存策略、渲染优化,最好能结合项目经历 |
| 国企/银行 | 基础概念清晰 + 表达能力 | 重点讲清楚每一步是干什么的,不需要太深,但逻辑要通顺 |
| 考研复试 | 理论深度 + 设计原理 | 重点讲三次握手为什么不是两次、四次挥手为什么是四次、TIME_WAIT的作用 |
一句话建议:大厂重实战追问,国企重逻辑通顺,考研重理论正确。根据面试类型调整讲述的侧重点,能更精准命中面试官的预期。
记忆口诀
把这7步串成一个顺口溜:
缓存DNS握握手,加密HTTP走一走,渲染完成挥挥手。
| 关键词 | 对应环节 |
|---|---|
| 缓存 | 第一步:浏览器缓存 |
| DNS | 第二步:域名解析 |
| 握握手 | 第三步:TCP三次握手 |
| 加密 | 第四步:TLS握手 |
| HTTP走一走 | 第五步:HTTP请求与响应 |
| 渲染 | 第六步:浏览器渲染 |
| 挥挥手 | 第七步:TCP四次挥手 |
参考来源
本文知识点参考自《计算机网络:自顶向下方法》、MDN Web Docs、Chrome开发者文档。
作者签名:
全栈开发者 · 毕设/面试辅导请私信 · 有用就行 🙏