【面试】计算机网络面试题精选
整理前后端常见网络面试题:TCP/UDP、三次握手、HTTPS、HTTP/1.1~3、缓存、Cookie/Session/JWT、跨域与状态码,附简洁回答模板。
12 分钟阅读
小明
【面试】计算机网络面试题精选
网络面试最容易踩两个坑:
- 背了很多词,但讲不成体系
- 每个问题都只能“背定义”
这篇给你一份高频题清单,并配上“可复述”的回答骨架。
1. TCP 和 UDP 的区别?
回答骨架:
- TCP 面向连接、可靠传输、有拥塞控制和流量控制。
- UDP 无连接、开销小、时延低,但不保证到达和顺序。
- 典型场景:
- TCP:网页、支付、文件传输
- UDP:实时音视频、游戏、DNS
2. 为什么 TCP 需要三次握手?
核心点:
- 双方都要确认“发送能力 + 接收能力”都正常。
- 两次握手无法避免历史连接请求导致的混乱(旧的 SYN 包可能延迟到达)。
- 三次握手后双方都同步了初始序列号,可靠传输可建立。
详细过程:
- 客户端 → 服务端:SYN(我要连接,我的初始序号是 x)
- 服务端 → 客户端:SYN-ACK(我收到了,我的初始序号是 y,确认你的序号 x+1)
- 客户端 → 服务端:ACK(我确认你的序号 y+1)
两次握手为什么不行:客户端发出第一个 SYN,服务端回复 SYN-ACK 后就开始等待。但如果这个 SYN 其实是个迟到的旧请求(已经被客户端遗忘),服务端就建立了一个这边认为有效、那边实际不需要的连接——浪费资源。
3. 为什么挥手是四次?
- TCP 全双工,两个方向要分别关闭。
FIN只表示“我不再发送”,不代表“我不再接收”。- 因此通常需要双方各发一次
FIN+ACK。
4. HTTP 和 HTTPS 的区别?
- HTTP 明文传输,很容易被中间人攻击。
- HTTPS = HTTP + TLS 加密层。
- HTTPS 提供三大保证:
- 机密性:数据加密(AES)
- 完整性:防篡改(HMAC)
- 身份认证:证书验证"你是真的服务器吗"
TLS 握手简化版(4 个往返):
- ClientHello:支持的加密套件、压缩算法等
- ServerHello + Certificate:服务端选择方案,发送证书
- KeyExchange:客户端验证完证书后,用公钥加密预主密钥给服务端
- 双方基于预主密钥推导出会话密钥,后续就用这个密钥加密通信
默认端口:HTTP 80,HTTPS 443。
为什么某些网站还是 HTTP:HTTPS 有 CPU 开销,小网站成本考量;但现在 TLS 1.3 + 硬件加速后已不是瓶颈。
| 状态码 | 含义 | 例子 |
|---|---|---|
| 200 | 成功 | 请求处理完成 |
| 301 | 永久重定向 | 旧 URL 永不会回来,必须改 Location |
| 302 | 临时重定向 | 下次可能还在原 URL,浏览器通常仍存缓存 |
| 304 | Not Modified | 协商缓存命中,复用本地 |
| 400 | Bad Request | 参数格式错(非业务逻辑错,比如 JSON 格式破损) |
| 401 | Unauthorized | 未认证(没有登录) |
| 403 | Forbidden | 已认证但无权限(你是张三,但这个资源只有李四能访问) |
| 404 | Not Found | 资源真的不存在 |
| 500 | Internal Server Error | 服务端代码崩溃 |
| 502 | Bad Gateway | 网关/反向代理收不到上游响应 |
| 503 | Service Unavailable | 服务端过载或维护中 |
容易搞混的:
401vs403:401 没认证,403 沒权限(已认证但权限不足)301vs302:301 永久,浏览器会缓存重定向;302 临时,每次都会查200:成功301/302:重定向304:缓存可用400:请求参数错误401:未认证403:已认证但无权限404:资源不存在500/502/503:服务端错误
关键是别把 401 和 403 搞反。
7. Cookie、Session、JWT 的区别?
- Cookie:浏览器侧存储载体。
- Session:服务端会话状态,通常由 Cookie 中的 Session ID 关联。
- JWT:自包含令牌,可做无状态认证,但要关注过期与吊销策略。
8. 浏览器缓存机制怎么讲?
建议顺序:
- 强缓存:
Cache-Control/Expires本质:浏览器的"同源策略"(Same-Origin Policy)为了安全,限制脚本只能访问同来源的资源。
什么是同源:协议 + 域名 + 端口 都相同。
常见方案:
- CORS(最主流,现代方案)
- 后端在响应头加
Access-Control-Allow-Origin: https://example.com - 如果要带 Cookie,还要加
Access-Control-Allow-Credentials: true - 且
Allow-Origin不能是通配符*
- 后端在响应头加
- 反向代理(常在本地开发时用) 如果问得很细,可以分几个层级回答:
层级 1:从用户敲回车到看到页面的整体流
- 浏览器解析 URL
- DNS 递归查询(本地缓存 → 递归解析器 → 根服务器 → 顶级域 → 权威 DNS)
- 建立 TCP 连接(三次握手)
- 如果是 HTTPS,进行 TLS 握手
- 发送 HTTP 请求
- 服务端处理,返回 HTML 文档
- 浏览器开始解析 HTML,构建 DOM 树
- 遇到外链资源(CSS、JS、图片)继续请求
- CSS 构建 CSSOM,与 DOM 合并为渲染树
- 计算布局(Layout),绘制(Paint),合成(Composite)
层级 2:如果继续追问 JS 的执行时机
- HTML 解析 → 构建 DOM
- 遇到
<script>停止 HTML 解析,执行脚本 - 如果有
defer,脚本在 HTML 完全解析后执行 - 如果有
async,脚本异步加载,加载完就执行(不等 HTML)
实战补充:大多数网站首屏体验优化就在这些环节——DNS 缓存、CDN 加速、脚本延后加载、图片懒加载等限制。
- 常见方案:
- CORS(最主流)
- 反向代理
- JSONP(仅 GET,历史方案)
面试补充:带凭证请求要配 Access-Control-Allow-Credentials,且 Allow-Origin 不能是 *。
10. 一次 URL 输入到页面显示发生了什么?
可按链路回答:
- DNS 解析
- 建立连接(TCP/TLS)
- 发送 HTTP 请求
- 服务端处理并返回响应
- 浏览器解析 HTML/CSS/JS,构建渲染树并绘制
这是高频综合题,建议背熟。
总结
网络面试高分关键不是“背术语”,而是把每个问题讲成“原理 + 场景 + 边界”。
你可以先把这 10 题练到“2 分钟可完整表达”,再拓展细节,效果会非常明显。