【面试】计算机网络面试题精选

整理前后端常见网络面试题:TCP/UDP、三次握手、HTTPS、HTTP/1.1~3、缓存、Cookie/Session/JWT、跨域与状态码,附简洁回答模板。

12 分钟阅读
小明

【面试】计算机网络面试题精选

网络面试最容易踩两个坑:

  • 背了很多词,但讲不成体系
  • 每个问题都只能“背定义”

这篇给你一份高频题清单,并配上“可复述”的回答骨架。


1. TCP 和 UDP 的区别?

回答骨架:

  • TCP 面向连接、可靠传输、有拥塞控制和流量控制。
  • UDP 无连接、开销小、时延低,但不保证到达和顺序。
  • 典型场景:
    • TCP:网页、支付、文件传输
    • UDP:实时音视频、游戏、DNS

2. 为什么 TCP 需要三次握手?

核心点:

  • 双方都要确认“发送能力 + 接收能力”都正常。
  • 两次握手无法避免历史连接请求导致的混乱(旧的 SYN 包可能延迟到达)。
  • 三次握手后双方都同步了初始序列号,可靠传输可建立。

详细过程

  1. 客户端 → 服务端:SYN(我要连接,我的初始序号是 x)
  2. 服务端 → 客户端:SYN-ACK(我收到了,我的初始序号是 y,确认你的序号 x+1)
  3. 客户端 → 服务端:ACK(我确认你的序号 y+1)

两次握手为什么不行:客户端发出第一个 SYN,服务端回复 SYN-ACK 后就开始等待。但如果这个 SYN 其实是个迟到的旧请求(已经被客户端遗忘),服务端就建立了一个这边认为有效、那边实际不需要的连接——浪费资源。


3. 为什么挥手是四次?

  • TCP 全双工,两个方向要分别关闭。
  • FIN 只表示“我不再发送”,不代表“我不再接收”。
  • 因此通常需要双方各发一次 FIN + ACK

4. HTTP 和 HTTPS 的区别?

  • HTTP 明文传输,很容易被中间人攻击。
  • HTTPS = HTTP + TLS 加密层。
  • HTTPS 提供三大保证:
    • 机密性:数据加密(AES)
    • 完整性:防篡改(HMAC)
    • 身份认证:证书验证"你是真的服务器吗"

TLS 握手简化版(4 个往返):

  1. ClientHello:支持的加密套件、压缩算法等
  2. ServerHello + Certificate:服务端选择方案,发送证书
  3. KeyExchange:客户端验证完证书后,用公钥加密预主密钥给服务端
  4. 双方基于预主密钥推导出会话密钥,后续就用这个密钥加密通信

默认端口:HTTP 80,HTTPS 443。

为什么某些网站还是 HTTP:HTTPS 有 CPU 开销,小网站成本考量;但现在 TLS 1.3 + 硬件加速后已不是瓶颈。


状态码含义例子
200成功请求处理完成
301永久重定向旧 URL 永不会回来,必须改 Location
302临时重定向下次可能还在原 URL,浏览器通常仍存缓存
304Not Modified协商缓存命中,复用本地
400Bad Request参数格式错(非业务逻辑错,比如 JSON 格式破损)
401Unauthorized未认证(没有登录)
403Forbidden已认证但无权限(你是张三,但这个资源只有李四能访问)
404Not Found资源真的不存在
500Internal Server Error服务端代码崩溃
502Bad Gateway网关/反向代理收不到上游响应
503Service Unavailable服务端过载或维护中

容易搞混的

  • 401 vs 403:401 没认证,403 沒权限(已认证但权限不足)
  • 301 vs 302:301 永久,浏览器会缓存重定向;302 临时,每次都会查
  • 200:成功
  • 301/302:重定向
  • 304:缓存可用
  • 400:请求参数错误
  • 401:未认证
  • 403:已认证但无权限
  • 404:资源不存在
  • 500/502/503:服务端错误

关键是别把 401403 搞反。


7. Cookie、Session、JWT 的区别?

  • Cookie:浏览器侧存储载体。
  • Session:服务端会话状态,通常由 Cookie 中的 Session ID 关联。
  • JWT:自包含令牌,可做无状态认证,但要关注过期与吊销策略。

8. 浏览器缓存机制怎么讲?

建议顺序:

  1. 强缓存:Cache-Control / Expires 本质:浏览器的"同源策略"(Same-Origin Policy)为了安全,限制脚本只能访问同来源的资源。

什么是同源:协议 + 域名 + 端口 都相同。

常见方案

  1. CORS(最主流,现代方案)
    • 后端在响应头加 Access-Control-Allow-Origin: https://example.com
    • 如果要带 Cookie,还要加 Access-Control-Allow-Credentials: true
    • Allow-Origin 不能是通配符 *
  2. 反向代理(常在本地开发时用) 如果问得很细,可以分几个层级回答:

层级 1:从用户敲回车到看到页面的整体流

  1. 浏览器解析 URL
  2. DNS 递归查询(本地缓存 → 递归解析器 → 根服务器 → 顶级域 → 权威 DNS)
  3. 建立 TCP 连接(三次握手)
  4. 如果是 HTTPS,进行 TLS 握手
  5. 发送 HTTP 请求
  6. 服务端处理,返回 HTML 文档
  7. 浏览器开始解析 HTML,构建 DOM 树
  8. 遇到外链资源(CSS、JS、图片)继续请求
  9. CSS 构建 CSSOM,与 DOM 合并为渲染树
  10. 计算布局(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 输入到页面显示发生了什么?

可按链路回答:

  1. DNS 解析
  2. 建立连接(TCP/TLS)
  3. 发送 HTTP 请求
  4. 服务端处理并返回响应
  5. 浏览器解析 HTML/CSS/JS,构建渲染树并绘制

这是高频综合题,建议背熟。


总结

网络面试高分关键不是“背术语”,而是把每个问题讲成“原理 + 场景 + 边界”。

你可以先把这 10 题练到“2 分钟可完整表达”,再拓展细节,效果会非常明显。