第2章:以太网基础回顾:OSI七层模型与TCP/IP四层模型、MAC地址与IP地址、以太网帧结构、交换机工作原理
各位同学,咱们今天聊点基础,但基础往往最容易被忽视。我做车载网络这些年,发现很多问题其实都出在基础概念没吃透上。以太网这东西,看着简单,但真要把它玩明白,得从根上捋一遍。
2.1 OSI七层模型与TCP/IP四层模型
先说OSI七层模型。很多教材一上来就列七层,背得头大。我个人习惯,把它理解成「快递分拣系统」。你想想看:
- 物理层:就是快递车和马路。信号怎么传,电压多高,接口长啥样。
- 数据链路层:相当于快递分拣员。他只看包裹上的「下一站」标签(MAC地址),不管包裹里装啥。
- 网络层:这是总调度中心。它看的是「最终目的地」(IP地址),决定走哪条路。
- 传输层:相当于快递单号。保证包裹完整到达,丢了要重发。
- 会话层、表示层、应用层:这三层说白了就是「怎么拆包裹、怎么读说明书、怎么用里面的东西」。
但实际工程中,没人用七层模型干活。我们用的是TCP/IP四层模型。为什么?因为OSI太理想化了,分层太多,效率低。我在项目中遇到过,有人非要在车载系统里套OSI七层,结果延迟高得离谱,最后全改成TCP/IP了。
核心区别一句话:OSI是理论模型,TCP/IP是实战模型。车载以太网基本都走TCP/IP。
TCP/IP四层模型长这样:
| 层级 | 典型协议 | 我眼中的角色 |
|---|---|---|
| 应用层 | HTTP, SOME/IP, DoIP | 用户直接打交道的东西 |
| 传输层 | TCP, UDP | 保证数据可靠或快速 |
| 网络层 | IP, ICMP, ARP | 找路、寻址 |
| 网络接口层 | 以太网, WiFi | 物理传输和帧封装 |
我的小建议:做车载以太网开发,重点盯住网络接口层和网络层。应用层协议可以边做边学,但底层封装一旦出错,整个通信就崩了。
2.2 MAC地址与IP地址
这两个地址,很多人搞混。我面试时经常问:「MAC地址和IP地址,到底谁管谁?」
咱们打个比方。MAC地址就像你的身份证号,全球唯一,出厂就定死了。IP地址就像你的家庭住址,可以搬家,可以换。在车载网络里,每个ECU(电子控制单元)都有一个MAC地址,但IP地址是动态分配的,或者手动配置的。
我记得有一次调试ADAS(高级驾驶辅助系统)的摄像头数据流,发现两个摄像头MAC地址冲突了。查了半天,原来是供应商烧录时搞错了。嗯,这里要注意:MAC地址虽然理论上唯一,但实际生产中偶尔会有重复,采购时一定要让供应商提供MAC地址分配表。
避坑指南:我曾经在项目里遇到过,有人把MAC地址写死在代码里,结果换了硬件模块后,两个设备MAC地址一样,整个网络直接瘫痪。后来我规定:所有ECU的MAC地址必须从EEPROM读取,绝不允许硬编码。
IP地址这块,车载网络常用的是静态IP。为什么不用DHCP?因为车在行驶中,网络拓扑相对固定,DHCP反而增加延迟和不确定性。我一般这样分配:
- 网关:192.168.1.1
- 域控制器:192.168.1.10 - 192.168.1.20
- 传感器节点:192.168.1.100 - 192.168.1.200
当然,这只是个例子。实际项目中要根据网络规模来规划子网掩码,别搞成一个大广播域,否则性能会崩。
2.3 以太网帧结构
以太网帧,说白了就是数据在网线上跑的时候长啥样。咱们直接看结构:
| 前导码(7B) | 帧起始定界符(1B) | 目标MAC(6B) | 源MAC(6B) | 类型/长度(2B) | 数据(46-1500B) | FCS(4B) |
这里面有几个关键点:
- 前导码和帧起始定界符:这是物理层用的,告诉接收端「准备收数据了」。咱们做软件的一般不关心。
- 目标MAC和源MAC:这是交换机转发数据的依据。我调试时经常抓包看这两个字段,确认数据是不是发对了地方。
- 类型/长度字段:如果值大于1536,表示上层协议类型(比如0x0800是IPv4)。如果小于等于1500,表示数据长度。这个细节很多人不知道。
- 数据字段:最少46字节,最多1500字节。如果数据不够46字节,要填充。我曾经遇到过一个bug,发送端没做填充,接收端解析时直接报错。
- FCS:帧校验序列,用CRC32算出来的。如果校验失败,这帧直接丢弃。
重要提醒:车载以太网常用VLAN标签,会在源MAC和类型字段之间插入4字节的VLAN Tag。结构变成:目标MAC(6B) | 源MAC(6B) | VLAN Tag(4B) | 类型/长度(2B) | 数据 | FCS。这个在后续讲TSN(时间敏感网络)时会详细展开。
2.4 交换机工作原理
交换机,说白了就是个「智能分拣员」。它不像集线器那样无脑广播,而是根据MAC地址表来转发数据。
工作原理其实就三步:
- 学习:交换机收到一个帧,先看源MAC地址,把它和接收端口记录下来。这样它就知道了「哪个MAC在哪个端口」。
- 转发:再看目标MAC地址,查表。如果表里有,就从对应端口转发出去。如果表里没有,就广播到所有端口(除了接收端口)。
- 老化:MAC地址表不是永久有效的。如果一段时间没收到某个MAC的帧,交换机就会把它删掉。这个时间一般是300秒左右。
我在项目中遇到过一个问题:车载网络里有个ECU频繁掉线重连,导致交换机的MAC地址表不断更新,大量广播帧占满了带宽。后来我限制了MAC地址表的老化时间,并且给关键设备配置了静态MAC地址绑定,问题才解决。
实战技巧:在车载以太网交换机里,我建议给诊断设备、网关这些关键节点配置静态MAC地址。这样即使网络波动,也不会因为MAC地址表老化而丢帧。
另外,交换机还有一个重要概念:存储转发和直通转发。车载网络一般用存储转发,因为要检查FCS,确保数据完整性。直通转发虽然快,但可能转发坏帧,这在安全关键系统里是不能接受的。
好了,这一章的基础内容就这些。下一章咱们要进入实战了,聊聊车载以太网的物理层——100BASE-T1和1000BASE-T1,那才是真正有意思的东西。