第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地址表来转发数据。

工作原理其实就三步:

  1. 学习:交换机收到一个帧,先看源MAC地址,把它和接收端口记录下来。这样它就知道了「哪个MAC在哪个端口」。
  2. 转发:再看目标MAC地址,查表。如果表里有,就从对应端口转发出去。如果表里没有,就广播到所有端口(除了接收端口)。
  3. 老化:MAC地址表不是永久有效的。如果一段时间没收到某个MAC的帧,交换机就会把它删掉。这个时间一般是300秒左右。

我在项目中遇到过一个问题:车载网络里有个ECU频繁掉线重连,导致交换机的MAC地址表不断更新,大量广播帧占满了带宽。后来我限制了MAC地址表的老化时间,并且给关键设备配置了静态MAC地址绑定,问题才解决。

实战技巧:在车载以太网交换机里,我建议给诊断设备、网关这些关键节点配置静态MAC地址。这样即使网络波动,也不会因为MAC地址表老化而丢帧。

另外,交换机还有一个重要概念:存储转发直通转发。车载网络一般用存储转发,因为要检查FCS,确保数据完整性。直通转发虽然快,但可能转发坏帧,这在安全关键系统里是不能接受的。

好了,这一章的基础内容就这些。下一章咱们要进入实战了,聊聊车载以太网的物理层——100BASE-T1和1000BASE-T1,那才是真正有意思的东西。