考点:

  1. 浏览器输入 URL 到页面展示的全过程
  2. DNS 解析过程
  3. TCP 三次握手 / 四次挥手 / TIME_WAIT / CLOSE_WAIT
  4. HTTP 与 HTTPS 的区别,TLS 握手过程
  5. HTTP 常见方法、状态码、长连接、Keep-Alive
  6. HTTP/1.1、HTTP/2、HTTP/3 的区别
  7. Cookie、Session、Token、JWT
  8. 浏览器缓存:强缓存、协商缓存
  9. 跨域问题:同源策略、CORS、预检请求
  10. WebSocket 与 HTTP 的区别
  11. CDN、反向代理、负载均衡、网关
  12. 结合 K8s 的网络排障思路:Service、Ingress、CoreDNS、Pod 网络
Q1:从浏览器输入一个 URL 到页面最终展示,中间发生了什么?
  • 核心要点

    • 浏览器先解析 URL,确定协议、域名、端口、路径。
    • 查询缓存与 DNS,获取目标 IP。
    • 与目标服务建立 TCP 连接;如果是 HTTPS,还要进行 TLS 握手。
    • 浏览器发送 HTTP 请求,请求可能经过 CDN、负载均衡、Nginx/Ingress、网关、后端服务。
    • 服务端返回 HTTP 响应,浏览器解析 HTML,构建 DOM 树。
    • 遇到 CSS/JS/图片等资源继续发起请求。
    • 浏览器构建 DOM + CSSOM,生成 Render Tree,布局(Layout),绘制(Paint),合成(Composite)。
  • 易错点

    • 把“DNS 解析”和“TCP 建连”顺序说反。
    • 以为 HTTPS 只是在 HTTP 外面“加密一下”,却说不清 TLS 握手。
    • 忽略浏览器缓存、重定向、CDN、代理层。
    • 只说前端渲染,不提网络链路和服务端。
  • 深挖点

    • 如果在 K8s 中,请求通常可能经过:DNS -> SLB/LB -> Ingress -> Service -> Pod
    • 如果页面慢,如何定位是 DNS、TCP、TLS、TTFB、静态资源还是前端渲染问题。
    • 首包时间(TTFB)受哪些因素影响。

Q2:DNS 解析的过程是怎样的?为什么它对运维很重要?
  • 核心要点

    • 浏览器先查本地缓存、系统缓存、hosts 文件。
    • 若未命中,请求本地域名解析器。
    • 本地 DNS 递归查询,可能依次访问根 DNS、顶级域 DNS、权威 DNS。
    • 最终返回域名对应的 IP,并按 TTL 缓存。
    • 在 K8s 中,集群内部域名解析通常依赖 CoreDNS。
  • 易错点

    • 分不清 递归查询 和 迭代查询。
    • 不知道 hosts 的优先级通常高于 DNS。
    • 忽略 DNS 缓存和 TTL 对故障切换的影响。
    • 不知道 K8s Pod 内部服务名也依赖 DNS 解析。
  • 深挖点

    • 为什么修改 DNS 记录后不能立刻全网生效。
    • CoreDNS 异常会导致哪些现象:服务名不可解析、业务间调用失败。
    • 如何排查 DNS 问题:nslookupdig、Pod 内测试、CoreDNS 日志。

Q3:TCP 三次握手和四次挥手分别是什么?为什么不是两次或三次?
  • 核心要点

    • 三次握手目的是确认双方的 收发能力 和初始序列号。
    • 四次挥手是因为 TCP 是 全双工,双方关闭连接要分别发送 FIN/ACK。
    • 建连流程:SYN -> SYN+ACK -> ACK
    • 挥手流程:FIN -> ACK -> FIN -> ACK
  • 易错点

    • 说不清第三次握手的作用。
    • 把“确认对方能发能收”和“确认自己能发能收”逻辑说混。
    • 认为挥手一定是四次,实际也可能三次(某些 ACK/FIN 合并)。
    • 不知道 TIME_WAIT 出现在哪一方。
  • 深挖点

    • 为什么需要 TIME_WAIT:防止旧报文影响新连接、保证被动关闭方收到最后 ACK。
    • 为什么大量短连接可能导致 TIME_WAIT 过多。
    • 在高并发网关/Nginx/Ingress 场景下,连接管理为何重要。

Q4:TIME_WAIT 和 CLOSE_WAIT 分别是什么?面试中常怎么考?
  • 核心要点

    • TIME_WAIT:主动关闭连接的一方,在发送最后 ACK 后进入该状态。
    • CLOSE_WAIT:被动关闭连接的一方,收到 FIN 后进入该状态,等待应用主动调用 close。
    • TIME_WAIT 多通常是连接关闭频繁;CLOSE_WAIT 多通常意味着应用未正确释放连接。
  • 易错点

    • 把 TIME_WAIT 和 CLOSE_WAIT 的归属方说反。
    • 只会背定义,不会分析问题根因。
    • 误以为所有大量 TIME_WAIT 都是异常。
  • 深挖点

    • 如果服务端 CLOSE_WAIT 很多,优先怀疑什么:应用代码、连接未释放、线程阻塞。
    • 如果 TIME_WAIT 很多,如何优化:连接复用、长连接、合理调参,但不能盲目改内核参数。
    • 在容器和节点上怎么排查:netstat / ss、应用日志、连接池配置。

Q5:HTTP 和 HTTPS 的区别是什么?HTTPS 为什么更安全?
  • 核心要点

    • HTTP 明文传输;HTTPS = HTTP + TLS。
    • HTTPS 提供 加密性、完整性、身份认证。
    • TLS 握手阶段协商加密套件、交换密钥、验证证书。
    • 服务端通过 CA 签发的证书证明身份,防止中间人攻击。
  • 易错点

    • 只说“HTTPS 更安全”,但说不出安全体现在哪里。
    • 认为 HTTPS 使用非对称加密传输所有数据,实际上通常是 非对称加密协商密钥,对称加密传输数据。
    • 搞不清证书校验和 CA 信任链。
  • 深挖点

    • TLS 握手的主要阶段是什么。
    • 为什么 HTTPS 比 HTTP 更耗时,但 HTTP/2、连接复用、TLS 会话恢复可优化。
    • 在 K8s 中 TLS 终止通常放在哪里:LB、Ingress、网关。

Q6:HTTP/1.1、HTTP/2、HTTP/3 有什么区别?
  • 核心要点

    • HTTP/1.1
      • 默认长连接。
      • 支持管线化,但基本很少用。
      • 存在队头阻塞问题。
    • HTTP/2
      • 二进制分帧。
      • 多路复用。
      • Header 压缩。
      • 同一连接可并发多个请求。
    • HTTP/3
      • 基于 QUIC,底层用 UDP。
      • 进一步减少传输层队头阻塞。
      • 建连和迁移更友好。
  • 易错点

    • 把 HTTP/2 的多路复用和 TCP 层完全独立看待,忽略 TCP 丢包仍会影响。
    • 误认为 HTTP/3 只是“更快的 HTTP/2”。
    • 不知道 HTTP/3 为何基于 UDP。
  • 深挖点

    • 为什么 HTTP/2 仍然可能有队头阻塞。
    • 为什么移动网络切换下 QUIC 更有优势。
    • 实际运维中,CDN、网关、Ingress 是否支持 HTTP/2/3。

Q7:Cookie、Session、Token、JWT 的区别是什么?
  • 核心要点

    • Cookie:浏览器保存的小块数据,会随请求自动带上。
    • Session:服务端保存用户会话状态,客户端一般只存 Session ID。
    • Token:服务端认证后发给客户端,后续请求客户端主动携带。
    • JWT:一种 Token 格式,通常由 Header、Payload、Signature 组成。
  • 易错点

    • 把 Cookie 和 Session 当成同一个东西。
    • 以为 JWT 天然安全,忽略泄露、过期、吊销问题。
    • 不知道 Cookie 可设置 HttpOnlySecureSameSite
  • 深挖点

    • 分布式系统中 Session 共享怎么做:Redis、粘性会话等。
    • 为什么很多微服务/API 网关场景偏向 Token/JWT。
    • JWT 适合无状态认证,但不适合频繁主动注销的复杂场景。

Q8:浏览器缓存有哪些?强缓存和协商缓存有什么区别?
  • 核心要点

    • 强缓存:浏览器不发请求,直接用本地缓存。
      • 常见字段:ExpiresCache-Control
    • 协商缓存:浏览器发请求问服务端资源是否变化。
      • 常见字段:Last-Modified / If-Modified-Since
      • ETag / If-None-Match
    • 未变更返回 304 Not Modified
  • 易错点

    • 分不清强缓存和协商缓存。
    • 不知道 Cache-Control 优先级通常高于 Expires
    • 误认为返回 304 就完全没有网络开销。
  • 深挖点

    • 为什么静态资源常配合文件指纹/hash。
    • 为什么 API 接口一般不建议随便强缓存。
    • CDN 缓存、浏览器缓存、Nginx 缓存之间是什么关系。

Q9:什么是跨域?CORS 是怎么工作的?
  • 核心要点

    • 浏览器有同源策略:协议、域名、端口三者相同才算同源。
    • 跨域本质是 浏览器安全限制,不是服务端之间不能通信。
    • CORS 通过响应头允许指定来源访问。
    • 非简单请求通常会先发 OPTIONS 预检请求。
  • 易错点

    • 把“跨域”理解成网络不通。
    • 不知道跨域限制主要发生在浏览器端。
    • 不了解 Access-Control-Allow-OriginAllow-Credentials 的配合限制。
    • 误以为 Postman 能跨域说明浏览器也能。
  • 深挖点

    • 为什么带自定义 Header、JSON、PUT/DELETE 可能触发预检。
    • 为什么 Access-Control-Allow-Origin: * 不能和凭证一起用。
    • 在 Nginx/Ingress 层如何统一处理跨域配置。

Q10:WebSocket 和 HTTP 有什么区别?什么场景下会用到?
  • 核心要点

    • HTTP 通常是请求-响应模式。
    • WebSocket 建立连接后可全双工通信,适合实时场景。
    • WebSocket 握手基于 HTTP Upgrade。
    • 常见场景:实时日志、监控面板、聊天、推送。
  • 易错点

    • 认为 WebSocket 完全不是 HTTP。
    • 不知道 WebSocket 初始握手依赖 HTTP。
    • 说不清为什么它更适合实时通信。
  • 深挖点

    • 在 K8s 中通过 Ingress 代理 WebSocket 需要注意什么:连接升级、超时配置、长连接。
    • WebSocket 和 SSE 的区别。
    • 长连接过多时如何考虑资源占用和连接治理。

Q11:常见 HTTP 状态码有哪些?运维场景重点看哪些?
  • 核心要点

    • 200:成功。
    • 301/302:重定向。
    • 304:缓存命中,资源未修改。
    • 400:请求错误。
    • 401:未认证。
    • 403:已认证但无权限。
    • 404:资源不存在。
    • 499:客户端主动断开(Nginx 常见)。
    • 502:网关/代理访问上游异常。
    • 503:服务不可用。
    • 504:网关超时。
  • 易错点

    • 分不清 401403
    • 分不清 502504
    • 不知道 499 常见于 Nginx。
  • 深挖点

    • 在 K8s + Ingress 场景下:
      • 502 常见于上游 Pod 异常、端口不通、探针失败。
      • 504 常见于上游处理过慢、超时配置太小。
      • 503 可能是无可用 Endpoint。
    • 如何从浏览器、Nginx、Ingress、Pod 日志联合定位。

Q12:如果用户反馈“网页打不开”,你会怎么排查?
  • 核心要点

    • 先确认是 DNS 问题、网络问题、TLS 问题、代理问题、服务异常、前端资源问题 哪一层。
    • 典型链路:
      • 域名是否解析正常
      • 端口是否通
      • TLS 证书是否正常
      • LB/Ingress/Nginx 是否转发成功
      • Service/Pod 是否健康
      • 应用日志是否报错
    • 命令思路:pingcurldig/nslookuptelnet/ncss/netstat、日志查看。
  • 易错点

    • 一上来就怀疑代码,忽略 DNS、证书、代理、网络 ACL。
    • 只在浏览器层面排查,不分层。
    • 不知道 K8s 中还要检查 ServiceEndpointsIngressCoreDNS
  • 深挖点

    • 如果浏览器超时但 curl 正常,可能是跨域、证书、浏览器缓存、代理插件问题。
    • 如果域名解析正常但访问 502,重点看 Ingress/Nginx 到上游的连通性。
    • 如果集群内服务名不通,优先看 CoreDNS 和网络策略。

三、速记笔记

  • 浏览器访问链路:URL -> DNS -> TCP/TLS -> HTTP 请求 -> 代理/网关 -> 服务 -> 响应 -> 渲染
  • DNS:先缓存,再递归;K8s 里重点看 CoreDNS
  • TCP 三次握手:确认双方收发能力与序列号
  • TIME_WAIT:主动关闭方;CLOSE_WAIT:被动关闭方未正确 close
  • HTTPS:HTTP + TLS,解决 加密、完整性、身份认证
  • HTTP/2:多路复用、头部压缩、二进制分帧
  • 缓存:
    • 强缓存:Cache-Control / Expires
    • 协商缓存:ETag / Last-Modified
  • 跨域:浏览器同源策略问题,服务端靠 CORS 放行
  • Cookie vs Session vs Token
    • Cookie:浏览器存
    • Session:服务端存
    • Token/JWT:客户端携带
  • K8s 运维关联重点:DNS、Ingress、Service、证书、负载均衡、502/503/504 排障