小明的学习笔记

计算机网络:从 PCB 信号到 Linux socket

4 分钟阅读

计算机网络:从 PCB 信号到 Linux socket

目标不是背 OSI 七层,而是能回答:一个进程调用 send() 后,字节如何经过内核、网卡、线缆、交换机、路由器,最后进入另一台机器的 recv()

先建立一条主线

应用字节
  ↓  send()/recv()、文件描述符
socket(TCP 字节流 / UDP 报文)
  ↓  TCP/UDP 头、端口、校验和
IP(寻址、路由、分片/PMTU)
  ↓  路由表决定下一跳;邻居表解析下一跳链路地址
Ethernet / Wi-Fi MAC(帧、MAC、VLAN、介质访问)
  ↓  网卡 MAC、DMA 描述符、队列
PHY(编码、调制、时钟恢复、自动协商)
  ↓  磁性器件/射频前端、PCB 走线、双绞线/光纤/电磁波
物理信号

反向接收时不是简单“剥掉七层包装”:网卡可能校验 FCS、DMA 到内存,驱动/NAPI 批量收包,Linux 在多个协议处理点查路由、Netfilter 和 socket,最终唤醒进程。

学习顺序

文档 学完能回答
01 硬件、PCB、NIC 与 PHY RJ45 后面有哪些器件?MAC、PHY、DMA 各做什么?
02 以太网帧与交换 比特如何成为帧?交换机究竟转发什么?
03 Wi-Fi 空口与 802.11 Wi-Fi 为什么不能直接等同于无线网线?
04 IP、子网、ARP 与邻居发现 目标 IP 不在本地时,为何 ARP 的是网关而不是目标?
05 路由器、接口与默认网关 “多网卡 Linux”类比哪里对、哪里不对?
06 Linux 网络栈与收发路径 包怎样经过 DMA、NAPI、sk_buff、qdisc、Netfilter?
07 socket、UDP、TCP 与应用 socket 是什么?监听 socket 和已连接 socket 有何不同?
08 DHCP、DNS 与联网启动 一台没有 IP 的主机如何获得配置并找到域名?
09 NAT、conntrack 与防火墙 NAT 为何不是安全边界?端口到底何时被改?
10 桥、VLAN、三层交换与家用路由器 LAN 口为何同网段?三层交换机与路由器如何比较?
11 RFC、IEEE 标准与阅读地图 哪份规范定义哪一层?如何正确读 RFC?
12 仿真、模拟与可复现实验 namespace、Mininet、ns-3、电路仿真分别能证明什么?
13 端到端封包演练与排障 从 URL 到服务器完整走一遍,故障时按层定位。
14 二层交换到路由器 MAC、VLAN、SVI、三层交换怎样形成一条连续数据路径?
15 虚拟机网络、桥接与共享网络 vNIC、TAP、bridge、NAT/共享、host-only 分别把虚机接到哪里?
16 Docker 网络 namespace、veth、docker bridge、端口发布与多种驱动如何工作?
17 Kubernetes 网络 Pod、CNI、Service、跨节点、入口与策略如何组成完整数据面?

原有 NAT/DHCP 专题保留为补充阅读:

三种事实不要混淆

类型 回答的问题 例子
标准/规范 互操作时线上格式和行为应是什么 IEEE 802.3、RFC 9293
操作系统实现 某系统内部怎样实现规范 Linux NAPI、sk_buff、Netfilter
设备实现 厂商怎样用硬件加速 交换 ASIC、NAT offload、TSO/RSS

标准通常不规定 PCB 必须选哪颗 PHY,也不规定 Linux 必须使用 sk_buff。同样,抓包看到的现象可能受 offload 影响,不能未经验证就当成线上真实帧。

贯穿全书的拓扑

Client process
  192.168.10.20/24
        │ Wi-Fi / Ethernet

AP + L2 switch ── VLAN 10 ── Router LAN 192.168.10.1/24
                                      │ route + optional NAT/firewall

                              Router WAN 100.64.1.5
                                      │ ISP / CGNAT

                               Internet server:443

学习方法

每个概念依次做四件事:

  1. 画出当前处理的是比特、帧、IP 包、TCP 段还是应用字节。
  2. 写出“本机最终目标”和“当前链路下一跳”,二者经常不是同一设备。
  3. ip/ss 查看控制状态,用 tcpdump 查看数据面事实。
  4. 改一个变量、预测结果、实验验证,再解释差异。

不要从 NAT 开始理解整个网络。NAT 是边缘网关上的地址改写机制;即使没有 NAT,Ethernet、IP、路由、TCP 和 socket 仍然完整成立。