前面几篇都是"往上跳"——VLAN 讲二层怎么切广播域,OSPF 讲路由器怎么互相认识。这篇往回退一步,把地基补上:一个数据包从你的键盘出发,到对面主机收到,中间到底经过了什么。
分层不是为了好看,是为了"改一层不动其他层"。你换光纤不用重写 HTTP,换 WiFi 不用重写 TCP——这才是分层真正的价值。
为什么非得分层
网络要解决的问题本质上是三个:找到对方(寻址)、把数据送过去(传输)、保证送对(可靠性)。这三个问题的粒度完全不同——寻址是端到端的,传输是点到点的,可靠性是端到端的。硬塞进一个协议里,改一处就得全改。
所以拆开:每一层只解决自己的问题,只对上层提供接口,不关心上层的语义。
| OSI 七层 | TCP/IP 五层 | PDU 名称 | 这一层认什么地址 | 典型协议 / 设备 |
|---|---|---|---|---|
| 应用层 / 表示层 / 会话层 | 应用层 | 报文 Message | — | HTTP、DNS、DHCP、FTP |
| 传输层 | 传输层 | 段 Segment(TCP)/ 数据报(UDP) | 端口号 | TCP、UDP;防火墙 |
| 网络层 | 网络层 | 包 Packet | IP 地址 | IP、ICMP、OSPF;路由器 |
| 数据链路层 | 数据链路层 | 帧 Frame | MAC 地址 | 以太网、PPP、ARP;交换机 |
| 物理层 | 物理层 | 比特 Bit | — | 双绞线、光纤、无线电;集线器 |
OSI 七层是"教科书模型",TCP/IP 四层是"工程模型",我们平时说的五层就是把 OSI 的上三层合并、下四层照搬。记住一句话:下三层负责把数据送到对面,上两层负责让程序用起来。
物理层:把 0 和 1 变成信号
物理层不认地址,也不认帧。它只干一件事:把比特流变成能在介质上传播的信号,以及反过来。
- 介质:双绞线(UTP/STP,5e/6/6a 类)、同轴电缆、光纤(单模 / 多模)、无线电;
- 编码:把 0/1 映射成电平跳变,常见的有曼彻斯特编码、4B/5B、8B/10B、64B/66B。编码的作用是自带时钟信息——接收端靠跳变来同步,否则一串 0 会让时钟跑飞;
- 关键指标:带宽(Hz / bps)、时延、误码率、衰减。
物理层的问题很好认:灯不亮、CRC 错包多、链路频繁 up/down,基本就是这一层的事——线缆、光模块、接口。
数据链路层:一跳一跳地送
链路层管的是同一段链路上的两台设备。它给数据加上帧头帧尾,用 MAC 地址寻址,用 FCS 做校验。
┌──────────┬──────────┬────────┬─────────────────────┬────────┐
│ 目的 MAC │ 源 MAC │ 类型 │ 数据 │ FCS │
│ 6 字节 │ 6 字节 │ 2 字节 │ 46 ~ 1500 字节 │ 4 字节 │
└──────────┴──────────┴────────┴─────────────────────┴────────┘
↑ 类型 0x0800 = IPv4
类型 0x0806 = ARP
类型 0x86DD = IPv6
几个容易记混的点:
- MAC 地址 48 位,前 24 位是 OUI(厂商编号),后 24 位厂商自分配;全 F(FF:FF:FF:FF:FF:FF)是广播;
- MTU 1500 字节是数据字段的上限。IP 包超过 MTU 就要分片——这也是 OSPF 卡在 ExStart 的经典原因;
- 交换机是这一层的设备:它学 MAC、查 MAC 表、按表转发。表里没有就泛洪(flooding),有就单播。
ARP:把 IP 翻译成 MAC
同网段通信时,只知道对方 IP 是发不出帧的——帧头要填 MAC。于是有了 ARP:
- 查本机 ARP 缓存,有就直接用;
- 没有就发 ARP Request(广播,目的 MAC 全 F),"谁是 192.168.1.2?";
- 目标主机回 ARP Reply(单播),"我是,我的 MAC 是 xx";
- 双方都写进 ARP 缓存(华为默认老化 20 分钟)。
跨网段时,ARP 问的不是目的主机,而是网关的 MAC——因为帧只需要送到下一跳。
网络层:端到端找路
网络层负责从源主机到目的主机的寻址和路由。核心是 IP 协议。
┌──────┬──────┬──────────┬──────────────────────────────┐
│ 版本 │ 首部 │ 服务类型 │ 总长度 │
│ (4) │ 长度 │ │ │
├──────┴──────┴───────────┼────────┬─────────────────────┤
│ 标识 │ 标志 │ 片偏移 │
├─────────────────────────┼────────┴─────────────────────┤
│ TTL │ 协议 │ 首部校验和 │
├─────────┴───────────────┼──────────────────────────────┤
│ 源 IP 地址(32 位) │
├─────────────────────────┼──────────────────────────────┤
│ 目的 IP 地址(32 位) │
└─────────────────────────┴──────────────────────────────┘
| 字段 | 要点 |
|---|---|
| TTL | 每经过一台路由器减 1,减到 0 就丢弃并回 ICMP 超时。traceroute 就是靠它工作的 |
| 协议号 | 1 = ICMP,6 = TCP,17 = UDP,89 = OSPF |
| 标识 / 标志 / 片偏移 | 分片与重组用。DF=1 表示禁止分片,MF=1 表示后面还有片 |
| 首部校验和 | 只校验首部,不含数据(数据靠上层校验) |
IP 地址与掩码
一个 IPv4 地址分两部分:网络位 + 主机位,分界线由掩码决定。掩码里 1 的个数就是前缀长度。
192.168.1.130 / 25 255.255.255.128
11000000.10101000.00000001.1 | 0000010
└──────── 网络位 25 位 ────────┘└ 主机位 7 位 ┘
网络地址 192.168.1.128 (主机位全 0)
广播地址 192.168.1.255 (主机位全 1)
可用范围 192.168.1.129 ~ 192.168.1.254 (共 126 个)
- 私网地址:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。出公网要 NAT;
- 特殊地址:127.0.0.0/8 环回、169.254.0.0/16 链路本地(DHCP 失败时自动配的)、0.0.0.0/0 默认路由、255.255.255.255 受限广播;
- VLSM / CIDR:变长子网掩码让不同网段可以用不同长度;CIDR 允许把多条连续网段合并成一条(路由汇总的基础)。
传输层:端到端的可靠性
网络层把包送到主机,但主机上跑着几十个程序——到底给谁?靠端口号。IP + 端口 = 一个连接的唯一标识,叫 Socket。
| TCP | UDP | |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 序号 + 确认 + 重传 | 不保证 |
| 顺序 | 保证按序 | 不保证 |
| 流量控制 | 滑动窗口 | 无 |
| 开销 | 首部 20 字节起 | 首部 8 字节 |
| 典型应用 | HTTP、SSH、BGP(179) | DNS、DHCP、SNMP、VXLAN(4789) |
客户端 服务器
│ ── SYN seq=x ──────────────────▶ │
│ ◀── SYN+ACK seq=y, ack=x+1 ──── │
│ ── ACK ack=y+1 ───────────────▶ │
│ 连接建立,开始传数据 │
端口范围要记住三段:0–1023 知名端口(80 HTTP、443 HTTPS、22 SSH、53 DNS、179 BGP)、1024–49151 注册端口、49152–65535 动态端口(客户端随机用)。
数据转发过程:两条路
这是整篇最该背下来的一段。转发分两种情况:
源 192.168.1.10/24 → 目的 192.168.1.20/24
1. 用掩码算出:目的 IP 与本机同网段(都是 192.168.1.0/24)
2. 查 ARP:目的 IP 的 MAC 是多少?没有就广播问
3. 封装二层帧:源 MAC = 自己,目的 MAC = 对方的
4. 二层帧交给交换机,交换机查 MAC 表转发
5. 全程不经过网关,路由器完全不参与
源 192.168.1.10/24 → 目的 10.1.1.20/24
1. 用掩码算出:不同网段 → 交给网关(192.168.1.1)
2. ARP 问的是【网关】的 MAC,不是目的主机的
3. 封装二层帧:源 MAC = 自己,目的 MAC = 网关的
4. 网关(路由器)收帧、解封装、看目的 IP
5. 查路由表 → 命中 10.1.1.0/24 → 出接口
6. 重新封装新的二层帧(新源 MAC / 新目的 MAC),TTL 减 1
7. 重复 4~6,一跳一跳直到目的主机
★ 关键:IP 地址端到端不变,MAC 地址每一跳都换
记住这句话,很多问题就通了:IP 是"最终寄给谁",MAC 是"这一站交给谁"。所以路由表里查的是 IP,ARP 表里查的是 MAC,两张表各管一段。
路由的三个来源
路由器凭什么知道往哪走?路由表里的条目有三个来源,优先级从高到低:
| 来源 | 说明 | 华为默认优先级 |
|---|---|---|
| 直连路由 Direct | 接口配上 IP 且物理 UP,自动生成。掩码是接口掩码 | 0 |
| 静态路由 Static | 手工配置。适合小网络和兜底(默认路由) | 60 |
| 动态路由 Dynamic | 协议自己学:OSPF(10)、IS-IS(15)、RIP(100)、BGP(255) | 按协议 |
选路有两条铁律,顺序不能反:
- 先比掩码长度,最长匹配优先——192.168.1.0/24 和 0.0.0.0/0 同时命中,选 /24;
- 掩码相同时比优先级(Preference),数字小者优;
- 优先级也相同时比度量值(Cost / Metric),小者优;
- 全都一样就负载分担(ECMP)。
目的地址 192.168.1.99,路由表里有:
192.168.1.0/24 → 下一跳 A ← 命中,掩码最长(24)
192.168.0.0/16 → 下一跳 B 也命中,但被 /24 打败
0.0.0.0/0 → 下一跳 C 也命中,最早出局
结论:走 A。
RIB 和 FIB:控制平面与转发平面
这是很多人卡住的一个概念:路由表(RIB)不等于转发表(FIB)。
| RIB · 路由表 | FIB · 转发表 | |
|---|---|---|
| 干什么的 | 存所有学到的路由,包括没选上的 | 只存最终选出来的最优路由 |
| 谁生成 | 路由协议 + 静态配置 | 由 RIB 下刷 |
| 谁用 | 控制平面(算路) | 转发平面(查表转发) |
| 数据来源 | 协议本身 | 可能来自 RIB、也可能是 MPLS 标签 / ACL 引流 |
一个路由要进 FIB,得满足两个条件:① 被选为最优(Active),② 下一跳可达。只有 RIB 没有 FIB,说明这条路由的下一跳不可达——路由表里能看到,但数据包就是发不出去。这是现场排障最常见的"幽灵路由"。
环回口:一台路由器的"身份证"
Loopback 是一个逻辑接口,没有物理形态,但好处一堆:
- 永远 UP:只要设备活着,它就不 down(除非手工 shutdown);
- 做 Router ID:OSPF / BGP 用它最稳,不会因为某个物理口抖动就重选;
- 做 BGP 更新源:多物理链路时用 loopback 建邻居,链路切换不影响会话;
- 做管理地址:远程登录、SNMP、Telemetry 都指向它;
- 掩码用 /32:只表示"这一台设备",方便被汇总进 IGP。
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
# OSPF 里通告出去
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 1.1.1.1 0.0.0.0
# BGP 用它建邻居(指定更新源)
bgp 100
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
排错:一层层往下问
分层的最大好处就是排错可以二分:先定位在哪一层,再往细里查。
display interface brief # 物理层:接口 up/down、错包
display mac-address # 二层:MAC 表
display arp all # 二层半:ARP 有没有学到
display ip routing-table # 三层:路由表(RIB)
display fib 10.1.1.20 # 三层:转发表(FIB)—— 最准
display ip interface brief # 接口 IP 和状态
ping / tracert # 连通性 + 路径
# 抓包确认报文有没有到
terminal monitor
terminal debugging
debugging ip icmp
顺序就是:接口 UP 吗 → MAC 学到吗 → ARP 通吗 → 路由有吗 → FIB 里有吗 → 对面回得来吗。任何一步断了,后面的都不用查。
一句话总结:物理层送比特,链路层管一跳,网络层找路,传输层找程序,应用层办事。转发时 IP 不变、MAC 每跳换;路由先比掩码长短,再比优先级。看懂这条链,后面所有协议都只是"在某一层上加东西"。
📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)
原始笔记是一个 700MB+ 的 OneNote 分区,内容以华为培训胶片截图与实验记录为主,图片经 OCR 后文字有损耗。
本文把其中「物理层 / 数据链路层 / 网络层 / 传输层 / 应用层 / 层次模型 / 数据转发过程 / IP 地址 / RIB 和 FIB / 路由的三个来源 / 环回口」几页重新编排成一条主线:分层 → 封装 → 转发 → 查表。
配置命令保留华为 VRP 原样。