计算机网络
连接世界的隐形桥梁,每一个「打开网页」背后的技术真相。
你每天都在用计算机网络——打开网页、发送消息、在线支付、看视频。但有多少人真正理解这个过程是怎么发生的?输入一个 URL 到页面展示,中间经历了哪些步骤?TCP 的三次握手为什么是三次而不是两次?HTTPS 是怎么做到加密传输的?HTTP/2 和 HTTP/3 改进了什么?
计算机网络不是「背概念」的学科,它是理解互联网运作方式的底层能力。无论是排查网络故障、分析性能瓶颈,还是设计高并发系统,都离不开扎实的网络基础。
这篇文章系列覆盖七层网络模型、TCP/UDP 协议、HTTP/HTTPS/WebSocket、TCP 连接管理(滑动窗口、拥塞控制)、DNS、CDN、以及常考的网络编程问题,从原理到实战帮你构建完整的网络知识体系。
模块速览
计算机网络的知识点可以划分为「协议栈视角」和「问题视角」两条主线。前者帮你建立全局认知,后者帮你应对面试。
| 方向 | 核心内容 |
|---|---|
| 网络基础 | OSI 七层模型、TCP/IP 四层模型、各层职责与设备 |
| 传输层 | TCP 三次握手/四次挥手、滑动窗口、拥塞控制、UDP 特性 |
| 应用层 | HTTP/HTTPS/WebSocket、DNS 解析、CDN 原理 |
| 网络编程 | Socket 编程、BIO/NIO/AIO、多路复用(select/poll/epoll) |
| 高频面试 | URL 到页面展示的过程、HTTPS 加密过程、TCP vs UDP 选型 |
学习路径建议
第一阶段:建立全局认知(2-3 天)
→ 理解 OSI 七层模型和 TCP/IP 四层模型
→ 各层的职责:谁负责传输、谁负责路由、谁负责加密
→ 理解「封装」和「分用」的过程
→ 常见面试题:五层/七层模型分别是什么?
第二阶段:传输层深入(1 周)
→ TCP 三次握手:为什么需要三次?SYN/ACK 的序号怎么定?
→ TCP 四次挥手:为什么 TIME_WAIT 是 2MSL?大量 CLOSE_WAIT 是什么原因?
→ 滑动窗口:流量控制是怎么实现的?
→ 拥塞控制:慢启动、拥塞避免、快速重传、快速恢复
→ UDP:为什么 DNS 查询用 UDP?什么时候选 UDP?
第三阶段:应用层协议(1 周)
→ HTTP 发展史:1.0 → 1.1 → 2.0 → 3.0 的演进
→ HTTP 方法:GET/POST/PUT/DELETE,幂等性分析
→ 状态码:2xx/3xx/4xx/5xx 常见场景
→ HTTPS:SSL/TLS 握手过程,对称加密与非对称加密
→ DNS:解析过程、递归查询与迭代查询、TTL
第四阶段:网络编程与综合(1 周)
→ Socket 通信:TCP 服务端/客户端代码编写
→ I/O 模型:BIO、NIO、AIO 的演进
→ 多路复用:select/poll/epoll 的原理与区别
→ 综合题:输入 URL 到页面展示的全过程
→ CDN 原理:就近访问、缓存策略一个经典问题的完整解答
面试中最高频的网络题是:「从输入 URL 到页面展示,发生了什么?」
这个问题看似简单,实则考察了计算机网络的全貌。好的回答应该涵盖:
第一步:URL 解析
- 浏览器解析 URL,提取协议、域名、路径、端口
- HSTS(HTTPS 严格传输安全)检查
第二步:DNS 解析
- 浏览器缓存 → 系统缓存 → hosts 文件 → 本地 DNS 服务器
- 本地 DNS 缓存未命中时,递归/迭代查询权威 DNS 服务器
- DNS 负载均衡:返回不同 IP 给不同用户
第三步:TCP 连接(三次握手)
- 客户端发送 SYN(seq=x)
- 服务端返回 SYN+ACK(seq=y, ack=x+1)
- 客户端发送 ACK(ack=y+1)
- 此时双方确认彼此的发送和接收能力正常
第四步:TLS 握手(HTTPS)
- 客户端发送支持的 TLS 版本和加密套件列表
- 服务端选择加密套件,发送证书
- 客户端验证证书有效性(证书链、域名、有效期)
- 双方协商对称密钥
第五步:HTTP 请求
- 浏览器构造 HTTP 请求报文
- GET 请求通常没有 body,POST 有 body
第六步:渲染
- 服务端返回 HTML/CSS/JS/图片等资源
- 浏览器解析 HTML,构建 DOM 树
- 遇到 CSS 加载 CSS,遇到 JS 阻塞渲染
- 构建渲染树,布局计算,绘制页面
这个问题的价值在于:它不是考察你背了哪一层,而是考察你对整个网络的融会贯通。
面试的核心逻辑
网络面试的三个核心维度:
第一,协议原理。 TCP 的可靠性是怎么保证的?滑动窗口和拥塞控制分别解决什么问题?HTTP/2 的多路复用是什么原理?
第二,对比选型。 TCP 和 UDP 的区别是什么?什么场景必须用 TCP?什么场景适合用 UDP?HTTP 和 WebSocket 各自适用什么场景?
第三,问题排查。 TCP 连接超时可能是什么原因?浏览器报「请求超时」怎么排查?DNS 劫持是什么原理?如何防御?
"计算机网络的面试,最怕的是『只知道概念,说不出过程』。能把『三次握手』讲到序列号和确认号的层面,才算真正理解。"
