这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 计算机网络的目标说起来很简单:让两台机器可靠地交换数据。但为了这个目标,系统需要解决寻址、路由、握手、可靠性、拥塞控制、安全、命名、负载均衡、移动性、延迟和海量并发等问题。
本章先建立网络全景图,后续章节再逐层拆解 DNS、TCP、TLS、HTTP、负载均衡和生产排障。
1.1 从一次请求开始
当你在浏览器访问:
https://www.example.com/order/10001
系统大致经历:
flowchart TB
A[输入 URL] --> B[DNS 解析]
B --> C[TCP 三次握手]
C --> D[TLS 握手]
D --> E[发送 HTTP 请求]
E --> F[负载均衡]
F --> G[应用服务]
G --> H[数据库/缓存/中间件]
H --> G
G --> F
F --> E
E --> I[渲染响应]
每一步都可能出现问题:
| 步骤 | 常见故障 |
|---|---|
| DNS | 解析失败、缓存过期、地域调度错误 |
| TCP | 握手超时、连接数耗尽、网络丢包 |
| TLS | 证书过期、协议不兼容、SNI 配置错误 |
| HTTP | 语义错误、超时、重试风暴 |
| 负载均衡 | 后端不健康、会话粘滞、流量倾斜 |
| 应用 | 线程池满、下游依赖慢、内存溢出 |
| 数据层 | 慢查询、锁等待、连接池耗尽 |
网络排障不是只看 ping,而是沿着请求路径定位失败层。
1.2 分层思想
网络采用分层设计,每层只解决自己的问题,并向上层提供服务。
常见模型:
| OSI 七层 | TCP/IP 常见分层 | 作用 |
|---|---|---|
| 应用层 | 应用层 | HTTP、DNS、TLS、RPC |
| 表示层 | 应用层 | 编码、加密、压缩 |
| 会话层 | 应用层 | 会话管理 |
| 传输层 | 传输层 | TCP、UDP、端口 |
| 网络层 | 网络层 | IP、路由、ICMP |
| 数据链路层 | 链路层 | 以太网、ARP、交换机 |
| 物理层 | 链路层 | 光纤、网线、无线信号 |
工程视角可以简化成:
Application
Transport
Network
Link
Physical
分层的好处:
- 模块化;
- 便于排障;
- 协议可以独立演进;
- 不同网络技术可以互通;
- 问题可以逐层定位。
1.3 数据是如何封装的
应用发送一段数据时,网络协议栈会逐层加头。
Data
-> TCP Segment = TCP Header + Data
-> IP Packet = IP Header + TCP Segment
-> Frame = Ethernet Header + IP Packet + FCS
接收方反向解封装:
Frame
-> IP Packet
-> TCP Segment
-> Application Data
几个关键概念:
| 概念 | 说明 |
|---|---|
| MTU | 链路层单帧最大载荷,常见 1500 字节 |
| MSS | TCP 单段最大数据量,常见 1460 字节 |
| 分片 | IP 层拆包 |
| 分段 | TCP 按 MSS 拆数据 |
| PMTUD | 路径 MTU 发现 |
| Nagle | 小包合并算法 |
| Delayed ACK | 延迟确认 |
如果链路上 MTU 配置错误,可能出现 TCP 握手成功但大包传输失败的现象。
1.4 寻址与路由
每台联网设备需要地址。
IP 地址
IPv4:
192.168.1.10/24
IPv6:
2408:8207:1234:abcd::1/64
/24、/64 表示网络前缀长度。地址由网络部分和主机部分组成。
路由
路由器根据路由表决定下一跳:
Destination / Mask Next Hop
0.0.0.0/0 Gateway
10.0.0.0/8 Core Router
192.168.1.0/24 Local Interface
查看本机路由:
ip route
查看路径:
traceroute www.example.com
1.5 域名解析
人使用域名,网络使用 IP,DNS 负责转换。
www.example.com
-> Local DNS
-> Root DNS
-> TLD DNS
-> Authoritative DNS
-> IP Address
常见记录:
| 类型 | 说明 |
|---|---|
| A | IPv4 |
| AAAA | IPv6 |
| CNAME | 别名 |
| MX | 邮件 |
| TXT | 文本验证、SPF |
| NS | 授权 DNS |
| SRV | 服务发现 |
排查:
nslookup www.example.com
dig www.example.com +trace
DNS 缓存会带来解析延迟,也会在切换流量时造成旧地址继续被访问。
1.6 传输层:TCP 与 UDP
| 维度 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠 | 尽力而为 |
| 顺序 | 有序 | 无序 |
| 流控 | 滑动窗口 | 无 |
| 拥塞控制 | 有 | 应用自定义 |
| 传输单位 | Segment | Datagram |
| 适用 | HTTP、数据库、RPC | 视频、游戏、DNS、QUIC |
TCP 提供可靠字节流,但可靠性不等于业务成功:
- 请求可能到达但对端处理失败;
- 连接可能建立但服务超时;
- 超时重传可能造成延迟毛刺;
- 半打开连接需要心跳检测;
- 应用层仍需要幂等和重试策略。
1.7 应用协议
HTTP
HTTP 是无状态请求响应协议。
GET /api/orders/10001 HTTP/1.1
Host: api.example.com
Accept: application/json
HTTPS
HTTPS = HTTP + TLS。
TLS 提供:
- 身份认证;
- 加密;
- 完整性保护;
- 会话恢复;
- 现代传输安全特性。
RPC
微服务内部常用 RPC:
Client Stub
-> Network
-> Server Stub
-> Business Method
相比 HTTP,RPC 通常更关注:
- 高性能序列化;
- 服务发现;
- 负载均衡;
- 超时重试;
- 熔断限流;
- 链路追踪。
1.8 延迟与带宽
| 指标 | 含义 |
|---|---|
| Bandwidth | 单位时间可传输数据量 |
| Latency | 一个包从 A 到 B 的时间 |
| RTT | 往返时间 |
| Jitter | 延迟抖动 |
| Packet Loss | 丢包率 |
| Throughput | 实际吞吐 |
一个近似关系:
throughput <= bandwidth
transfer time = transfer_size / throughput
response time = network RTT + queueing + processing
跨城网络 RTT 通常明显高于同城。设计系统时要考虑:
- 减少请求次数;
- 批量读取;
- 缓存热点;
- 就近部署;
- 控制响应体大小;
- 使用长连接;
- 异步化非关键链路。
1.9 生产网络观测
常用命令:
ping www.example.com
traceroute www.example.com
mtr www.example.com
curl -v https://www.example.com
ss -s
ss -ntp
netstat -i
抓包:
tcpdump -i any host www.example.com and port 443 -w debug.pcap
分析:
wireshark debug.pcap
生产排障要看:
- 客户端本地网络;
- DNS 解析;
- TCP 连接;
- TLS 握手;
- 负载均衡;
- 服务端日志;
- 链路追踪;
- 依赖服务状态。
本章小结
计算机网络由分层协议组成,数据经过逐层封装、路由和传输,再由接收方解封装。DNS 负责命名,IP 负责寻址,TCP/UDP 提供传输语义,HTTP/TLS 支撑现代应用。生产排障的关键是把请求拆成路径,逐层确认延迟、失败和安全边界。
思考题
- 一次 HTTPS 请求包含哪些关键阶段?
- 分层模型对故障排查有什么帮助?
- MTU、MSS、IP 分片和 TCP 分段有什么区别?
- TCP 可靠是否代表业务请求可靠?
- 如何定位“请求偶发超时”这类网络问题?