网络专栏导览
本专栏收录数据在网络里怎么被搬运、怎么被保障:单个协议的报文长什么样,地址怎么划、路由怎么匹配,一条连接从建立到关闭经历什么,丢包和拥塞了怎么办。
它与相邻专栏的边界是层次而不是技术栈:
| 不收 | 去哪看 | 本专栏只关心 |
|---|---|---|
| 进程与线程怎么被调度、内存怎么被管理 | 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 的单跳转发是不同层次的问题
参考
- J. Postel, ed. Internet Protocol. RFC 791, September 1981. https://www.rfc-editor.org/rfc/rfc791
- D. Plummer. An Ethernet Address Resolution Protocol. RFC 826, November 1982. https://www.rfc-editor.org/rfc/rfc826
- C. Hornig. A Standard for the Transmission of IP Datagrams over Ethernet Networks. RFC 894, April 1984. https://www.rfc-editor.org/rfc/rfc894
- J. Postel, J. Reynolds. A Standard for the Transmission of IP Datagrams over IEEE 802 Networks. RFC 1042, February 1988. https://www.rfc-editor.org/rfc/rfc1042
- R. Braden, ed. Requirements for Internet Hosts — Communication Layers. RFC 1122, October 1989. https://www.rfc-editor.org/rfc/rfc1122
- F. Baker, ed. Requirements for IP Version 4 Routers. RFC 1812, June 1995. https://www.rfc-editor.org/rfc/rfc1812
- R. Droms. Dynamic Host Configuration Protocol. RFC 2131, March 1997. https://www.rfc-editor.org/rfc/rfc2131
- S. Alexander, R. Droms. DHCP Options and BOOTP Vendor Extensions. RFC 2132, March 1997. https://www.rfc-editor.org/rfc/rfc2132
- T. Narten, E. Nordmark, W. Simpson, H. Soliman. Neighbor Discovery for IP version 6 (IPv6). RFC 4861, September 2007. https://www.rfc-editor.org/rfc/rfc4861
- M. Allman, V. Paxson, E. Blanton. TCP Congestion Control. RFC 5681, September 2009. https://www.rfc-editor.org/rfc/rfc5681
- V. Paxson, M. Allman, J. Chu, M. Sargent. Computing TCP's Retransmission Timer. RFC 6298, June 2011. https://www.rfc-editor.org/rfc/rfc6298
- W. Eddy. Transmission Control Protocol (TCP) Extensions for Window Scaling. RFC 7323, September 2014. https://www.rfc-editor.org/rfc/rfc7323
- S. Deering, R. Hinden. Internet Protocol, Version 6 (IPv6) Specification. RFC 8200, July 2017. https://www.rfc-editor.org/rfc/rfc8200
- M. Duke, R. Braden, W. Eddy, E. Blanton, A. Zimmermann. Transmission Control Protocol (TCP). RFC 9293, August 2022. https://www.rfc-editor.org/rfc/rfc9293
- IEEE 802.1D — MAC Bridges (Spanning Tree Protocol). IEEE. https://standards.ieee.org/ieee/802.1D/998/
- IEEE 802.1Q — Bridges and Bridged Networks. IEEE. https://standards.ieee.org/ieee/802.1Q/6844/
- Understand Rapid Spanning Tree Protocol (802.1w). Cisco Systems. https://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/24062-146.html
- Configuring MST (802.1s) / RSTP (802.1w) on Catalyst Series Switches. Cisco Systems. https://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/19080-123.html
YJ