# 计算机基础

# 一、网络

⚡ 30 秒速记

  • 分层记:应用层(HTTP / DNS / WebSocket)→ 传输层(TCP / UDP)→ 网络层(IP)→ 链路层
  • TCP 用握手、确认、重传换可靠有序,UDP 全不管换低延迟;HTTP/3 的 QUIC 在 UDP 上自己做了可靠传输
  • 前端最该抓三段:DNS 解析、建连成本(TCP + TLS 握手往返)、缓存策略(强缓存 / 协商缓存)
  • 队头阻塞:HTTP/1.1 一个连接同时只跑一个请求 → HTTP/2 多路复用解决应用层,但丢包时 TCP 层还会卡 → HTTP/3 换 QUIC 解决
  • 排查按层缩小:打不开先看 DNS 和连通性,证书报错是 TLS,有响应但内容不对才是应用层

前端学网络,最实用的是能把一次请求按层拆开:先 DNS 拿 IP,再 TCP 建连,HTTPS 还要 TLS 握手,最后才是 HTTP 请求和响应。 每一段都有成本,DNS 有缓存,握手要来回跑几趟,所以才有 preconnect、复用连接、收敛域名这些优化;资源能不能干脆不发请求,就看缓存策略。出问题时也按这个顺序查:解析不对、连不上、证书错、还是接口本身返回不对,先定位到层再动手,别一上来就怀疑业务代码。

时序图 · 3 个参与者 / 11 步
alt 缓存里没有alt 资源没变资源有更新浏览器浏览器DNS 服务器DNS 服务器网站服务器网站服务器查浏览器和系统缓存1查询域名对应的 IP2返回 IP 和 TTL3TCP 握手 SYN4SYN + ACK5ACK,连接建立6TLS 握手(HTTPS 才有)7证书和密钥协商结果8发送 HTTP 请求(带缓存校验头)9304,直接用本地缓存10200 和新内容11

💬 面试官追问

  • 部分用户打不开活动页,服务端监控一切正常,你先怀疑什么?

    先怀疑请求根本没到服务器。让用户 nslookup 一下域名,看解析出来的 IP 对不对,再看是不是集中在某个运营商或地区。服务端正常只能证明到了的请求是好的,这时候回滚前端代码没用。

  • 用户改 hosts 指定 IP 后就能打开了,说明什么?

    说明服务器和页面本身是好的,问题在域名解析:可能是某个运营商 DNS 缓存了旧记录,或者被劫持了。去不同网络下查解析结果,确认后修记录、等 TTL 过期,App 里可以考虑上 HTTPDNS。

  • 海外落地页引了五个第三方域名,首屏慢,又不能删,怎么优化?

    关键的一两个域名加 <link rel="preconnect" href="https://cdn.example.com" crossorigin>,提前把 DNS、TCP、TLS 做掉;次要的用 dns-prefetch。别全加 preconnect,建好的连接大约十秒没用上就会被关,白占资源。

  • HTTP/2 都多路复用了,为什么还说有队头阻塞?

    HTTP/2 解决的是应用层:一个连接里多个请求可以交错传。但底下还是一条 TCP,丢一个包,后面所有流的数据都得等它重传完才能交给上层。HTTP/3 把传输层换成 QUIC,每个流独立,丢包只影响自己那个流。

  • 静态资源设了长缓存,运营换了图用户却看不到,怎么兼顾?

    资源文件名带内容 hash,max-age 设一年再加 immutable;入口 HTML 用 no-cache 每次协商。换图就是换了文件名,HTML 一更新新地址就生效,旧缓存自然不再被引用。

webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部