计算机网络:从 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 专题保留为补充阅读:
- 旧专题:路由与地址本质
- 旧专题:DHCP 深度解析
- 旧专题:NAT 与端口映射
- 旧专题:双层 NAT 封包
- 旧专题:桥接与物理端口
三种事实不要混淆
| 类型 | 回答的问题 | 例子 |
|---|---|---|
| 标准/规范 | 互操作时线上格式和行为应是什么 | 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学习方法
每个概念依次做四件事:
- 画出当前处理的是比特、帧、IP 包、TCP 段还是应用字节。
- 写出“本机最终目标”和“当前链路下一跳”,二者经常不是同一设备。
- 用
ip/ss查看控制状态,用tcpdump查看数据面事实。 - 改一个变量、预测结果、实验验证,再解释差异。
不要从 NAT 开始理解整个网络。NAT 是边缘网关上的地址改写机制;即使没有 NAT,Ethernet、IP、路由、TCP 和 socket 仍然完整成立。