计算机网络
这篇解决什么问题
大多数现代应用都运行在网络之上。计算机网络要解决的是:不同机器如何找到彼此,如何建立连接,如何传输数据,如何处理丢包、延迟、安全和协议差异。
学完你会掌握
- 分层模型的意义。
- IP、TCP、UDP、DNS、HTTP、HTTPS 各自解决什么问题。
- 一次请求从浏览器到服务器经历了哪些步骤。
- 网络问题该从哪些层次排查。
核心概念
可以把网络简化为几个层次:
| 层次 | 关注点 | 常见概念 |
|---|---|---|
| 应用层 | 数据语义 | HTTP、DNS、WebSocket |
| 传输层 | 端到端传输 | TCP、UDP |
| 网络层 | 跨网络寻址 | IP、路由 |
| 链路层 | 局域网传输 | Ethernet、Wi-Fi |
HTTP 关心请求和响应,TCP 关心可靠传输,IP 关心地址和路由,DNS 负责把域名解析成 IP。
URL 解析
一次网络访问通常从 URL 开始。以这个地址为例:
https://example.com:443/search?q=ai
| 部分 | 含义 |
|---|---|
https |
协议,决定通信规则和是否加密 |
example.com |
域名,需要通过 DNS 找到 IP |
443 |
端口,HTTPS 默认端口 |
/search |
路径,表示服务器上的资源位置 |
q=ai |
查询参数,传递额外条件 |
端口很重要。一台服务器可以同时运行多个服务,端口用于区分访问哪个服务。
DNS:分布式地址簿
DNS 把人类可读的域名转换为机器可连接的 IP 地址。它不是一个单点服务器,而是分层系统。
简化流程:
浏览器缓存
-> 操作系统缓存
-> 本地 DNS 服务器
-> 根域名服务器
-> 顶级域名服务器
-> 权威域名服务器
DNS 结果通常会缓存,缓存时间由 TTL 控制。很多「我改了域名解析但还没生效」的问题,都和 DNS 缓存有关。
TCP:可靠连接
TCP 通过三次握手建立连接:
客户端 -> SYN -> 服务端
客户端 <- SYN/ACK <- 服务端
客户端 -> ACK -> 服务端
三次握手的目的不是形式感,而是双方确认:
- 对方能收到自己的消息。
- 自己也能收到对方的消息。
- 双方初始序列号已经同步。
TCP 还负责可靠传输、顺序控制、重传、流量控制和拥塞控制。
UDP 则更轻量,不保证可靠和有序,适合实时音视频、游戏、DNS 查询等对延迟更敏感或可自行处理丢包的场景。
HTTPS:HTTP 加 TLS
HTTPS 不是另一套业务协议,而是在 HTTP 下方增加 TLS 安全层。它解决三件事:
| 能力 | 作用 |
|---|---|
| 加密 | 防止中间人直接看到明文 |
| 身份认证 | 通过证书确认服务器身份 |
| 完整性 | 防止传输内容被篡改 |
所以证书过期、证书域名不匹配、TLS 版本不兼容,都可能导致 HTTPS 访问失败。
它是怎么工作的
访问一个网站时,大致流程是:
输入域名
-> DNS 解析 IP
-> 建立 TCP 连接
-> HTTPS 场景下进行 TLS 握手
-> 发送 HTTP 请求
-> 服务器处理并返回响应
-> 浏览器解析和渲染
这条链路上任何一环出错,用户看到的都可能只是「打不开」。
HTTP 请求与响应
HTTP 请求包含方法、路径、头部和可选请求体:
GET /search?q=ai HTTP/1.1
Host: example.com
Accept: text/html
Connection: keep-alive
常见方法:
| 方法 | 含义 |
|---|---|
| GET | 获取资源,通常可缓存 |
| POST | 提交数据,常用于创建或触发操作 |
| PUT | 全量更新资源 |
| PATCH | 部分更新资源 |
| DELETE | 删除资源 |
状态码可以快速判断问题层次:
| 状态码 | 含义 |
|---|---|
| 200 | 成功 |
| 301 / 302 | 重定向 |
| 304 | 缓存仍有效 |
| 400 | 请求格式错误 |
| 401 / 403 | 未认证或无权限 |
| 404 | 资源不存在 |
| 500 | 服务端错误 |
| 502 / 503 / 504 | 网关、服务不可用或超时 |
理解 HTTP 后,你会发现浏览器打开网页和前端调用 API,本质上都是发送 HTTP 请求,只是返回内容的类型不同。
缓存、跨域和连接复用
Web 开发里几个高频问题也属于网络和浏览器协作:
- HTTP 缓存:通过
Cache-Control、ETag、Last-Modified等机制减少重复请求。 - 跨域:浏览器同源策略保护用户安全,CORS 是服务器授权跨源访问的机制。
- Keep-Alive:多个 HTTP 请求复用同一个 TCP 连接,减少握手成本。
- HTTP/2:支持多路复用,缓解队头阻塞。
开发中的真实场景
网络知识能帮助你排查:
- DNS 配置错误导致域名无法访问。
- 后端服务启动了,但监听在
127.0.0.1,外部访问不到。 - 接口偶发超时,可能是网络抖动、服务慢或连接池耗尽。
- HTTPS 证书过期导致浏览器报不安全。
- 跨域错误不是网络断了,而是浏览器安全策略拦截。
AI Coding 时代怎么用
问 AI 网络问题时,提供这些信息会更有效:
- 请求 URL、方法、状态码。
- 浏览器 Network 面板截图或文本信息。
- 服务监听地址和端口。
- DNS、代理、网关、Nginx、负载均衡配置。
- curl 结果和后端日志。
让 AI 按「DNS -> 连接 -> TLS -> HTTP -> 应用日志」顺序排查,通常比直接猜原因更稳。
常见误区
误区一:把 HTTP 和 TCP 混为一谈。HTTP 是应用层协议,通常运行在 TCP 之上。
误区二:以为状态码 500 是网络问题。500 通常表示服务器应用处理失败。
误区三:认为 HTTPS 只是加密。HTTPS 还涉及身份验证和完整性保护。
误区四:以为跨域是后端接口坏了。跨域通常是浏览器安全策略拦截,服务端日志里未必能看到业务请求。
小结
网络是分层协作的系统。理解每一层解决的问题,能让你在面对「打不开、超时、跨域、证书错误」时有清晰的排查路线。