1. Ethernet基础回顾:OSI模型与TCP/IP模型、Ethernet帧结构、MAC地址与IP地址的关系
做网络调试这么多年,我见过不少工程师一上来就抓包、看计数器,结果折腾半天连问题在哪一层都没搞清楚。说白了,Ethernet链路调试的第一步,不是拿工具,而是先把脑子里那套模型理清楚。
这一节我们快速过一遍基础。别嫌啰嗦,后面所有优化手段都建立在这些概念之上。
1.1 OSI模型与TCP/IP模型:分层思维是调试的起点
OSI七层模型,教科书上讲得很详细。但实际工作中,我更习惯用TCP/IP四层模型来思考问题。为什么?因为TCP/IP更贴近真实网络设备的设计。
我个人习惯把这两套模型对照着记,尤其是调试时定位问题所在的层级。你想想看,如果链路不通,你第一反应是查物理层还是应用层?顺序错了,效率就低了。
| OSI模型 | TCP/IP模型 | 典型协议/设备 | 调试关注点 |
|---|---|---|---|
| 应用层 | 应用层 | HTTP, FTP, DNS | 请求是否到达、响应是否正常 |
| 表示层 | SSL/TLS, JPEG | 加密/编码问题 | |
| 会话层 | NetBIOS, RPC | 会话建立与维护 | |
| 传输层 | 传输层 | TCP, UDP | 端口号、序列号、重传 |
| 网络层 | 网络层 | IP, ICMP, ARP | 路由、地址解析 |
| 数据链路层 | 网络接口层 | Ethernet, MAC, VLAN | 帧结构、CRC、冲突 |
| 物理层 | 网线、光模块、信号 | 电平、时钟、误码 |
我记得有一次,现场反馈某台服务器间歇性丢包。我上去先查应用层日志,折腾了两小时没结果。后来静下心来看物理层——发现是光模块的接收光功率刚好在临界值。换了个模块,问题立刻消失。从那以后,我调试任何链路问题,都从物理层开始排查。
1.2 Ethernet帧结构:抓包时你看到的每一字节都有意义
Ethernet帧结构,说白了就是数据在链路上跑的「包装格式」。你打开Wireshark看到的那一串十六进制,就是按照这个结构排列的。
标准Ethernet II帧格式如下:
+----------------+----------------+----------------+----------------+----------------+----------------+
| 前导码 (7B) | 帧定界符 (1B) | 目标MAC (6B) | 源MAC (6B) | 类型/长度 (2B) | 数据 (46-1500B) |
+----------------+----------------+----------------+----------------+----------------+----------------+
| FCS (4B) |
+-----------------------------------------------------------------------------------------+
这里有几个关键点,我建议你记牢:
- 前导码和帧定界符: 物理层用的,抓包时通常不显示。作用是让接收端同步时钟。
- 目标MAC和源MAC: 链路层的核心地址。交换机靠这个转发帧。
- 类型/长度字段: 如果值大于1536(0x0600),表示上层协议类型,比如0x0800代表IPv4。如果小于等于1500,表示数据长度。这是区分Ethernet II和802.3帧的关键。
- 数据字段: 最少46字节,不够要填充。最大1500字节,这就是MTU的由来。
- FCS: 帧校验序列,CRC32算法。我曾经遇到过一个案例,某批网卡频繁丢包,抓包发现FCS错误率极高,最后定位是网卡硬件故障。
1.3 MAC地址与IP地址的关系:一个管本地,一个管全局
这个问题,我面试新人时经常问。很多人背得出定义,但一到实际排障就混淆。
简单来说:
- MAC地址: 48位,出厂烧录,理论上全球唯一。工作在数据链路层,负责同一网段内的设备通信。
- IP地址: 32位(IPv4),逻辑分配,可变更。工作在网络层,负责跨网段的路由寻址。
它们的关系,可以用一个场景说明白:
假设你要给隔壁工位的同事传文件。你的电脑知道他的IP地址(192.168.1.102),但不知道他的MAC地址。这时候,ARP协议就登场了——你的电脑会广播一个ARP请求:「谁有192.168.1.102?告诉我你的MAC地址。」目标设备收到后,回复自己的MAC。然后你的电脑把数据封装成Ethernet帧,目标MAC填上刚学到的地址,发出去。
跨网段通信时,情况稍有不同。数据会先发给网关(路由器),目标MAC填的是网关的MAC,目标IP填的是最终目的地的IP。路由器解封装后,再根据路由表转发。
下面这张图,把OSI模型、TCP/IP模型、Ethernet帧结构以及MAC/IP的关系串在了一起。我建议你把它存下来,调试时对照着看,思路会清晰很多。
嗯,到这里,Ethernet的基础回顾就差不多了。这些概念看起来简单,但每次调试时我都会在脑子里过一遍:当前问题出在哪一层?地址解析是否正确?帧结构是否完整?
把这些基础打牢,后面讲链路调试工具和优化策略时,你才能理解每一步操作背后的原理。