一、先说结论
如果面试官问“在浏览器输入一个 URL 到页面展示,中间发生了什么”,可以先抓住主线:
- 浏览器解析 URL
- 查询缓存与 DNS 解析域名
- 建立连接(TCP 或 QUIC)
- 如果是 HTTPS,再做 TLS 握手
- 发送 HTTP 请求
- 服务端处理并返回响应
- 浏览器解析 HTML、CSS、JS,最终渲染页面
而如果单独问 DNS,则核心就是:
把域名解析成 IP 地址。
如果面试官问“在浏览器输入一个 URL 到页面展示,中间发生了什么”,可以先抓住主线:
而如果单独问 DNS,则核心就是:
把域名解析成 IP 地址。
如果把 HTTP 最核心的内容压缩成几句话,可以这么记:
这篇文章主要回答两个高频面试问题:
如果先把答案压缩成几句话,可以这样记:
这一篇聚焦几个在面试里经常一起出现、但又容易零散记忆的知识点:
如果先把主线压缩成几句话,可以这样记:
这一篇主要解决四类高频问题:
如果先把主线压缩成几句话,可以这样记:
HTTP 是 Web 世界最核心的应用层协议之一。我们平时在浏览器里访问网页、调用后端接口、加载图片和视频,本质上都在使用 HTTP。
如果只记住「HTTP 是请求响应协议」这句话,其实远远不够。面试里更常见的问题是:
很多人会用一句话概括:
HTTPS 就是在 HTTP 和 TCP 之间加了一层 TLS/SSL。
这句话方向没错,但如果只记这一句,其实还是不够。因为面试官真正想听到的,通常不是“多了一层加密”,而是下面这些点:
学 TCP 的时候,最容易乱掉的不是某一个知识点本身,而是这些概念老是缠在一起:
如果不先把主线抓住,很容易背一堆术语,最后还是讲不顺。
我自己的理解是:TCP 想做可靠传输,就必须回答四个问题。
TCP 是面向连接的协议,通信之前需要先建立连接,通信结束后需要释放连接。建立连接使用三次握手(Three-Way Handshake),释放连接使用四次挥手(Four-Way Handshake)。
TCP 提供可靠传输,双方需要在传输数据之前先「商量好」一些参数,比如各自的初始序列号。握手过程就是双方互相确认对方的收发能力正常,并同步这些参数。
挥手则是为了优雅地关闭连接。因为 TCP 是全双工的(双方可以同时发送和接收),所以每个方向的关闭需要单独进行。
TCP/IP 四层模型是互联网的基础架构模型,自下而上分为四层:网络接口层、网络层、传输层、应用层。每一层负责不同的功能,通过逐层封装的方式实现端到端的网络通信。
┌─────────────────────────────────────────────────────┐
│ 应用层 │
│ HTTP, HTTPS, DNS, FTP, SSH │
├─────────────────────────────────────────────────────┤
│ 传输层 │
│ TCP, UDP │
├─────────────────────────────────────────────────────┤
│ 网络层 │
│ IP, ICMP, ARP │
├─────────────────────────────────────────────────────┤
│ 网络接口层 │
│ 以太网, WiFi │
└─────────────────────────────────────────────────────┘