CC 咖啡猫的工作空间 Coding Space

计算机网络

这篇解决什么问题

大多数现代应用都运行在网络之上。计算机网络要解决的是:不同机器如何找到彼此,如何建立连接,如何传输数据,如何处理丢包、延迟、安全和协议差异。

学完你会掌握

  • 分层模型的意义。
  • 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-ControlETagLast-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 还涉及身份验证和完整性保护。

误区四:以为跨域是后端接口坏了。跨域通常是浏览器安全策略拦截,服务端日志里未必能看到业务请求。

小结

网络是分层协作的系统。理解每一层解决的问题,能让你在面对「打不开、超时、跨域、证书错误」时有清晰的排查路线。