Skip to content

网络专栏导览 ​

标签
基本功/网络
字数
2364 字
阅读时间
10 分钟

本专栏收录数据在网络里怎么被搬运、怎么被保障:单个协议的报文长什么样,地址怎么划、路由怎么匹配,一条连接从建立到关闭经历什么,丢包和拥塞了怎么办。

它与相邻专栏的边界是层次而不是技术栈:

不收去哪看本专栏只关心
进程与线程怎么被调度、内存怎么被管理07-多线程与并发、04-进程、线程与调度内核网络栈与用户态进程的交接点
数据怎么在磁盘与内存之间搬08-文件系统与 IO 栈数据在内核里怎么走到网卡
多个节点怎么达成一致(Paxos、Raft、PBFT)一致性共识算法承载这些协议报文的传输层本身

换个说法:上述专栏回答“用网络能造出什么系统”,本专栏回答“一个字节从 A 到 B 要经过哪些约定”。

目录 ​

  • 01 · 网络分层模型 —— 全栏的骨架:四层各管什么、每层 PDU 叫什么、与 OSI 七层如何对应,一次请求从键入网址到页面显示依次经过哪些层,以及按层定位故障的排查顺序
  • 02 · HTTP 协议 —— 应用层的主篇:报文格式与语义的分离、方法与状态码、连接管理与队头阻塞、缓存与条件请求、Range 与分块传输,以及 HTTP/2 多路复用与 HTTP/3 换用 QUIC 的动机
  • 03 · TLS 与 HTTPS —— 记录层与握手层的分工、密码套件与协商、RSA 与 ECDHE 两代密钥交换各自怎么防中间人、TLS 1.3 砍掉的那一次往返、证书链验证与会话复用、性能损耗落在哪几段
  • 04 · RPC 与 WebSocket 的边界 —— 字节流没有消息边界的后果与三种分帧编码、RPC 的构成与 gRPC 的分层关系、WebSocket 的握手算法与帧头位布局、掩码规则,以及六维选型判据
  • 05 · 05-TCP 协议 —— 传输层母篇,面向连接的可靠字节流:首部格式、连接生命周期与状态机、确认与重传、流量控制、拥塞控制,以及 MSS 与路径 MTU 的关系
  • 06 · TCP 的边界与失败模式 —— 按连接生命周期组织的失败模式:ISN 与序列号空间、对端消失、TIME-WAIT 与四元组复用、建连期的丢弃、传输期的意外报文,规范与 Linux 实现分开写
  • 07 · QUIC 与 UDP 上的可靠传输 —— 为什么在 UDP 之上重建可靠传输、包与帧的分层、序号与重传、两级流控、无队头阻塞及其代价、连接迁移,以及与 TCP 的逐项对照
  • 08 · 08-IP 协议与路由 —— 网络层:首部字段、地址与子网划分、分类地址与 NAT、路由表的最长前缀匹配与 Linux FIB、转发与分片、组播与 IGMP、IPv6 的差异
  • 09 · ICMP 与 ping —— ICMP 的定位与报文格式、查询与差错报文、五类不得回报差错的规则、traceroute 的三种探测方式与 PMTU 黑洞,以及 127.0.0.1 / localhost / 0.0.0.0 的区别
  • 10 · 10-以太网与 ARP —— 链路层:以太网帧格式与 EtherType 的两种语义、VLAN 标签、MAC 地址、ARP 解析与免费 ARP
  • 11 · 11-主机接入网络:DHCP 与地址配置 —— 从插上网线到能通外网:DHCP 的 DORA 四步与状态机、租约生命周期、配置落地、IPv6 的 SLAAC
  • 12 · 12-交换机与路由器:两种转发机制 —— 从设备看这套机制:MAC 表与路由表怎么建、改不改包的根本差异、广播域与冲突域、三层交换机与容器网络的映射
  • 13 · 13-STP、RSTP 与 MSTP —— 三代防环协议全解:选举与定时器、RSTP 的提议-同意握手、MSTP 的 Region 与 IST/CST、三代对比与排查
  • 14 · Linux 内核收发网络包 —— 把前面几篇的分层落到内核实现:收包的硬中断与 NAPI 轮询、sk_buff 生命周期、协议栈入口、发包路径上的 qdisc 与 TSQ,以及软中断 / ksoftirqd / RPS 的分工

阅读顺序 ​

01 → 02 → … → 14,编号就是阅读顺序,整体从应用层往链路层走:01 立起骨架,02–04 是应用层,05–07 是传输层,08–09 是网络层,10–13 是网络接口层与主机接入,14 收尾落到内核实现。

01 是入口,只立起「应用层 / 传输层 / 网络层 / 网络接口层」这个骨架,后面各篇都在展开其中某一层。02 → 03 → 04 是应用层:01 举例用的那条「键入网址到页面显示」的路径就是 HTTP,所以 02 紧跟它;03 补上 HTTP 底下的 TLS,04 回答「已经有 HTTP 了,为什么还要 RPC 与 WebSocket」。05 → 06 → 07 是传输层:05 是母篇,把首部、状态机、确认与重传、流量与拥塞控制写到 wire level;06 讲它没讲的那另一半——会坏在哪里,规范与 Linux 实现分开说;07 是另一条路线,在 UDP 之上重建可靠传输。08 → 09 是网络层:08 讲首部、地址、路由与转发,09 补同层的 ICMP 与 ping,顺带把回环地址、localhost 与 0.0.0.0 分开。10 → 13 是网络接口层与接入:10 是帧与地址解析,11 是主机接入,12 从设备看这套机制(MAC 表与路由表),13 是 12 里 STP 那一段的完整展开。14 不引入新协议,只把前面几篇的分层落到 Linux 内核真实的调用链上,读完再回头看 05/08/10 的队列、重传与 NAPI 才有落点。

TCP 架在 IP 之上,IP 又架在以太网之上,顺着读下来每篇都在用前一篇的结论:TCP 的 MSS 协商受 IP 的路径 MTU 约束(05-TCP 协议 §3.6 与 08-IP 协议与路由 §5.3),而 IP 入网时的 1500 字节上限直接来自以太网的载荷上限(10-以太网与 ARP §1.3)。PMTU 黑洞的排查要同时用到 IP 的 DF 位与 TCP 的分段。

三篇内部各有一条线:

  • TCP 按「先报文、再连接、再控制」走 —— 首部决定后面所有机制的表达方式,连接管理是状态机入口,可靠传输 / 流量控制 / 拥塞控制是三条并行回路;
  • IP 按「先报文、再地址、再匹配、再转发」走 —— 首部字段是后面所有讨论的基础,地址决定前缀怎么算,最长前缀匹配是路由的核心,转发与分片把前几节串起来;
  • 以太网按「先帧、再类型、再地址、再解析」走 —— 帧结构是载体,EtherType 决定载荷怎么解释,MAC 地址是转发依据,ARP 把 IP 地址接到这套地址上。

相关 ​

  • 08-文件系统与 IO 栈 —— sendfile 省掉的拷贝发生在 TCP 的发送路径上
  • 01-容器的本质 —— 网络命名空间与 veth 对是连接的承载环境,容器路由表建在 IP 的多表机制上
  • P2P 与路由 —— 另一套「路由」:覆盖网上的 DHT 查找,与 IP 的单跳转发是不同层次的问题

参考 ​

贡献者 ​

文件历史 ​