网络基础与协议栈
现代系统几乎都运行在网络之上。操作系统负责把网卡、中断、协议栈、Socket API 连接起来,让应用可以通过连接、端口和域名通信。
# 1. 学习目标
- 理解 IP、TCP、UDP、DNS、端口和 Socket 的基础关系。
- 能解释连接建立、数据传输、拥塞、超时和重传。
- 能用系统工具定位 DNS、路由、防火墙、端口占用和连接状态问题。
# 2. 知识框架
网络基础与协议栈
├─ 入门:建立术语、对象和日常操作的直觉
├─ 进阶:理解机制、边界和跨平台差异
└─ 专家:能排障、能设计、能阅读实现和研究材料
网络排障要沿着“域名 -> 地址 -> 路由 -> 连接 -> 协议 -> 应用”逐层收敛,避免看到超时就直接猜服务挂了。
# 3. 核心概念
| 主题 | 说明 | 工程关注 |
|---|---|---|
| IP | 负责主机寻址和跨网络转发 | 路由、网段、NAT、防火墙 |
| TCP | 面向连接、可靠、有序的传输协议 | 握手、重传、拥塞控制、TIME_WAIT |
| UDP | 无连接、低开销的数据报协议 | DNS、QUIC、实时通信 |
| Socket | 应用访问网络协议栈的编程接口 | 端口监听、连接状态、文件描述符 |
# 4. 机制与实践
- 先用 ping、traceroute、nslookup 或 dig 区分地址、路由和 DNS 问题。
- 用 ss、netstat、lsof 观察监听端口和连接状态。
- 服务超时要同时检查客户端超时、服务端负载、中间网络设备和重试风暴。
# 5. 常用命令与工具
| 命令或工具 | 作用 | 使用建议 |
|---|---|---|
ping host | 测试基本连通性和延迟 | 被禁 ICMP 时不能单独作为结论 |
dig example.com | 查询 DNS 解析结果 | 排查域名解析和 TTL |
ss -antp | 查看 TCP 连接和监听端口 | Linux 网络排障常用 |
# 6. 常见误区
- 把 ping 不通等同于服务不可用:ICMP 可能被禁,应用端口仍可能正常。
- 忽略 DNS 缓存和 TTL:解析变化可能因为缓存导致新旧地址并存。
- 无节制重试:网络抖动时重试可能放大流量并压垮下游。
# 7. 进阶研究方向
- 阅读 TCP 三次握手、四次挥手、拥塞控制和 TIME_WAIT 的机制。
- 用 tcpdump 或 Wireshark 抓包观察真实请求。
- 研究 Kubernetes、Service Mesh、负载均衡对网络路径的影响。
# 8. Tips 快问快答
Q:端口是什么?
A:端口是传输层用来区分同一主机上不同应用通信端点的编号。
Q:TCP 为什么需要握手?
A:握手用于确认双方可达、协商初始序列号,并建立连接状态。
Q:DNS 正常但访问失败怎么办?
A:继续检查路由、防火墙、端口监听、TLS、应用日志和中间代理。
# 9. 总结
网络问题通常不是单点问题,而是域名、路由、协议栈、中间设备和应用共同作用的结果。掌握协议栈后,排障会从猜测变成逐层验证。
上次更新: 2026/06/25, 10:02:19