您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



文章 咨询 工具 课程  
会员   
   
OCSMP认证课程:OCSMP-MU
4月9-10日 线上
基于模型的数据治理与数据中台
5月19-20日 北京+线上
网络安全原理与实践
5月21-22日 北京+线上
     
   
 订阅
详解车载以太网
 
作者:瘸腿的菲尔
  18   次浏览      5
 2026-4-9
 
编辑推荐:
本文主要以一个报文从V-box发出,到CPU的协议栈接收到这条报文为例,按报文传输步骤,我们将一步一步探索整个以太网的全景,希望对你的学习有帮助。
本文来自于知乎,由火龙果软件Alice编辑,推荐。

1. 车载以太网全景视图

图1 以太网整体视图

通过上面的全景视图,我们需要解析一下车载以太网到底包括哪些部分,又需要了解哪些知识。我们以一个报文从V-box发出,到CPU的协议栈接收到这条报文为例,看一下中间经历了哪些步骤:

图2 报文传输流程

就按照上图中的报文传输步骤,我们将一步一步探索整个以太网的全景。

2.车载以太网基础知识

2.1什么是100BASE-T1

在车载以太网中,我们经常会在物理层使用到100BASE-T1、1000BASE-T1的技术标准,那么,这些标准代表了什么,和我们经常使用到的快速以太网100BASE-TX又有什么区别了?
简单来说,"100BASE"代表的是这种协议所支持的最高速率,这里就表示其最高的带宽为100Mbps/s。而后缀"T1"代表的是其使用的传输介质为"twisted pair",也就是一对双绞线。而为了介绍100BASE-T1这样运用在物理层的协议,就不可避免地需要去了解负责物理层功能的PHY(Physical Layer)芯片。

2.2什么是PHY芯片

车载以太网在整个网络层次中覆盖的是物理层和数据链路层,其中负责集成物理层相关功能的就是PHY芯片,那么以100BASE-T1协议中会使用到的PHY的形态为例来进行说明。

图3 PHY的物理架构

PHY芯片分为两层,分别是PCS和PMA层,PCS子层实现与MII和PMA子层之间的数据转发,负责进行4B/3B、3B/2T编码,PMA子层将PCS生成的符号流转换为适合物理介质传输的模拟信号,并处理接收到的模拟信号。其中MII类接口是标准化接口,可以用于PHY和MAC芯片之间的连接,而MDI是PMA与外界物理介质比如双绞线之间连接的标准接口。接下来详细描述一下PCS子层和PMA子层的功能:

图4 PHY芯片中的数据传输

以数据的发送为例,当PCS层接收到来自MII接口传输而来的数据后,将原先数据位宽为4bit/s的数据转换成3bit的数据块,比如将(0000 0011 0010)转换成了(000 000 110 010),之后再经过3B/2T的转换,将(000 000 110 010)转换成(-1-1)(-1-1)(0-1)(-10)的三级符号向量,对应的转换关系如下:

3bit数据 符号向量
000 -1,-1
001 -1,0
010 -1,1
011 0,-1
100 0,1
101 1,-1
110 1,0
111 1,1

完成PCS层的编码转换后,再经过PMA层的转换,以模拟信号的形式传输出去。

2.3MII类接口

MII(Medium Independent Interface,介质独立接口)是IEEE 802.3标准定义的以太网接口,用于连接MAC层(媒体访问控制层)和PHY层(物理层)。

图5 MII接口示意图

MII接口共计有16根信号线,各个数据信号线的说明如下:

信号名称 功能描述
TX_CLK 发送端时钟信号
TX_ER 发送端数据错误
TXD[0:3] 发送端数据信号
RX_CLK 接收端时钟信号
RX_DV 接收数据有效信号
RX_ER 接受端数据错误
RXD[0:3] 发送端数据信号
CRS 载波监测
COL 冲突碰撞检测
MDIO 管理信号
MDC 管理数据时钟

为什么TX_CLK和RX_CLK都是PHY给到MAC的了?这是因为MII的设计初衷就是为了实现"介质独立",即MII接口可以不用考虑物理层的介质的种类,将识别传输介质、根据传输介质的特性进行时钟配置等责任交给了PHY芯片,这样MII接口和更上层的MAC芯片就可以不用考虑物理层的情况,形成了标准化的接口。

但是,MII接口的传输速率较低,并且MII接口有多达16根线,这对于硬件布局,硬件设计来言都提出了更高的要求,因此又从MII接口衍生出了我们常见的RGMII,SGMII等接口。

图6 RGMII接口示意图

为什么RGMII接口支持1000Mb/s的速率?RGMII接口虽然也是在每个传输方向上只有4根数据线,但是其时钟频率最高可以支持125Mhz,并且会同时在时钟的上升沿和下降沿进行采样,因此其速率可以达到MII的10倍。

那有没有办法在实现1000Mb/s速率的同时,进一步减少信号线的数量了?SGMII接口就实现了这样的预期:

图7 SGMII接口示意图

SGMII接口的收发分别只有一根数据线,其中TX_CLK由MAC提供,RX_CLK由PHY提供,那之前在MII接口提到过,为了实现介质独立可以让PHY同时提供TX_CLK和RX_CLK,那么为什么SGMII的TX_CLK又由MAC侧提供了?

MAC提供TX_CLK主要是为了满足自身数据发送的控制需求,PHY在接收端可以通过自身的电路设计和时钟恢复机制,从接收到的数据中提取出时钟信息,用于数据的采样和处理。简单而言,TX_CLK更多的是为了MAC发送数据的准确性,而PHY可以不依赖于这个时钟,而是从数据中解析出需要的时钟信号,来完成采样和处理。

2.4什么是VLAN和PVID

好了,已经介绍完了MII类接口,那么我们就可以解释报文是如何从V-BOX发出,通过PHY的PMA层和PCS层,再经过RGMII接口,抵达switc的端口。那么现在我们就需要将这条报文在switch内进行转发,使其到达与CPU连接的端口。那么,switch是怎么知道这条报文是要发往CPU,而不是发往MCU或其他端口的了?

这就要首先解释一下什么是VLAN了。VLAN的全称是 Virtual Local Area Network ,也就是虚拟局域网。顾名思义,VLAN的作用就是建立一个虚拟的局域网,使特定的报文能够在这个虚拟的局域网内进行传播,而不是在整个网络内传播。

我们知道switch的作用就是进行转发,在没有VLAN的情况下,switch的所有端口连接的设备都处于同一个转发域中,那么比如电脑D发出一条报文,其实它只想定向地发往电脑A,switch还是会将这条报文转发到电脑B和电脑C,这样不仅会浪费switch的转发性能,还有可能会导致网络风暴等一系列问题。为了解决类似的问题,我们就需要使用到VLAN。

图8 VLAN原理示意图

那么,我们可switch的转发添加上VLAN规则如下:

图9 VLAN原理示意图

我们需要给switch添加一条VLAN规则,switch的P0端口和P1端口被添加到VLAN ID为1的VLAN域中,也就是说,当P0或P1发出一条VLAN tag为1的报文时,只会定向地传输到P1口或者P0口,这是因为P2口和P3口都不在VLAN ID为1的VLAN域里。

我们已经定好了转发的规则了,VLAN tag为1的报文只会在P0和P1之间进行转发,那么报文是如何被带上VLAN tag的了?我们看一下下面这一条以太网帧的大致内容,可以看到其中VLAN tag中会有其VLAN ID是1,我们继续探究一下怎么去打上这个tag。

// 以太网帧(带VLAN Tag)
DMAC      : 00 11 22 33 44 55
SMAC      : AA BB CC DD EE FF
VLAN Tag  : 81 00 00 01          // TPID=0x8100, VLAN ID=1
Type      : 08 00                // IPv4协议
Payload   : 48 65 6C 6C 6F 20 56 4C 41 4E 31 ("Hello VLAN1")
FCS       : (由网卡自动计算,此处省略)

回到之前的图9,报文是由电脑D发出的,那么如果在电脑上存在一个VLAN网口,那么由这个网口发出的报文就是带有VLAN tag。

我们按照下面的命令在电脑D(假设这是一台linux电脑)上创建一个VLAN网口eth0.1(eth0是实际的物理网口):

sudo ip link add link eth0 name eth0.1 type vlan id 1
sudo ip link set dev eth0.1 up

完成了网口的创建后,我们使用命令查看一下创建后的网口情况,可以看到eth0.1网口已经成功创建,并且其VLAN ID为1,那么之后从这个网口发出的报文的VLAN ID为1。

ip -d link show eth0.1
4: eth0.1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff promiscuity 0 
    vlan protocol 802.1Q id 1 <REORDER_HDR> 
    # 关键字段:`vlan id 1` 表示VLAN ID配置成功

好了,现在我们了解到在电脑上如何发出VLAN tag为1的报文。但是实际情况下,电脑一般不会配置一个eth0.1的网口,发出来的报文都是不带VLAN tag的,那从实际情况出发,我们的这个VLAN tag该如何打上了,这就必须连接一下PVID了。

PVID的全称是 Port VLAN Identifier ,简单解释来说就是端口的默认VLAN ID,它的处理逻辑是这样的,如果switch的某一个端口设置了PVID为1,那么经过这个端口的所有报文,如果没有VLAN tag,则会被打上VLAN tag,VLAN tag中的VLAN ID与PVID保持一致为1;而报文如果本身就有VLAN tag,该tag不会受到影响。

图10 PVID示意图

那么,现在我们就可以理清VLAN是如何在switch的转发中发挥作用的:不带VLAN tag的报文由电脑D发出后,在经过P0口时,因为P0口的PVID为1,因此被打上了VLAN tag 1,由于switch内VLAN ID为1的VLAN域只包含P0口和P1口,所以报文会被定向地发送到P1口,完成了我们想要的定向传输。

但含有一个问题,图9中的VLAN表格中提到了P0口是untag port,而P1口时tag port,这有什么区别了?untag port和tag port的区别在于,一条VLAN tag为1的报文从一个untag port端口发出时,其VLAN tag会被剥离,而tag port则不会剥离VLAN tag:

图11 untag port & tag port

了解原理后,我们再回看图9,报文如果由电脑D发往电脑A,在P1端口会保留VLAN tag 1,送往CPU的协议栈进行处理,而由电脑A发往电脑D的报文,从P0口出来后,会被剥离VLAN tag 1。

2.5MAC地址表

之前我们已经了解了VLAN的作用,那么还存在一个疑问,我们使用VLAN将P0口和P1口放到了一个转发域中,但是怎么能确定P1口连接的电脑A就是我想要发送的目的地址了?如果我将电脑A和电脑B的位置换了一下,此时电脑B连接到了P1端口,那么switch还会将来自电脑D的报文发送到P1端口吗?

首先,我们需要了解一下MAC地址的概念。我们再看一下下面这条以太网报文,其中有DMAC和SMAC这两项,其代表的就是dest MAC address和source MAC address。MAC地址是每一个硬件设备所拥有的独一无二的6字节地址,如下图中SMAC就是发送这条报文的设备的MAC地址,而DMAC就是它希望发往的设备的MAC地址。那么MAC地址为AA BB CC DD EE FF的设备又是如何知道它想发往的设备的MAC地址是00 11 22 33 44 55的了?

// 以太网帧(带VLAN Tag)
DMAC      : 00 11 22 33 44 55
SMAC      : AA BB CC DD EE FF
VLAN Tag  : 81 00 00 01          // TPID=0x8100, VLAN ID=1
Type      : 08 00                // IPv4协议
Payload   : 48 65 6C 6C 6F 20 56 4C 41 4E 31 ("Hello VLAN1")
FCS       : (由网卡自动计算,此处省略)

这里,我们需要再引入一下IP(IPv4)地址的概念。每一个设备,我们都会为它分配一个32位的地址(一个设备会同时拥有IP地址和MAC地址),如"192.168.1.1",当我们想要和这个设备通信时,我们必须要知道这个地址,才能实现通信的目的。参考图12,我们将IP地址写成二进制,对应的看到图中还会有子网掩码这么一个东西。子网掩码是为了用来进一步划分网络的转发域的,比如一个IP地址对应的子网掩码为"255.255.255.0"的话,那么IP地址的前24位就是代表网段划分,后8位代表的就是主机号,只有前24位和"192.168.1"一致的IP地址才能和"192.168.1.1"通信。

图12 IP地址和子网掩码

现在假设电脑A、电脑B和电脑D的地址配置如下图所示。

图13 MAC地址表的使用

现在,我们有如图13所示的网络拓扑,现在我们想要将一个报文从电脑D发送到电脑A,而拓扑中有两个端口P1和P2都被包含在VLAN1的作用域里,因此理论上仅仅从VLAN作用域来看,报文会被发送到电脑A和电脑B,但我们仅仅希望这个报文被传递到电脑A,那么这时候就需要用到IP地址和MAC地址了。

我们首先得知道电脑A的MAC地址为192.168.1.2,但作为电脑D来说,我其实并不知道这个电脑A在哪里,反映在报文中就是我不知道以太网帧中的DMAC(目的MAC地址)是多少。因此,我们会发出一条ARP报文如下:

字段 值(十六进制) 说明 目标MAC ff:ff:ff:ff:ff:ff 广播地址 源MAC aa:bb:cc:dd:ee:ff 示例MAC(可替换) 操作类型 00 01 ARP请求 发送方IP c0 a8 01 01 192.168.1.1 目标IP c0 a8 01 02 192.168.1.2

这条arp报文的作用是为了通过已知的IP地址192.168.1.2来获取设备对应的MAC地址。可以看到其目标MAC设置为了ff:ff:ff:ff:ff:ff,说明这是一条广播报文,它会被发送到所有它能够到达的端口,而在图13的拓扑中,它就会被发送到P1端口和P2端口,那么电脑A和电脑B都会接收到这条arp报文,之后他们分别对比自己的IP地址是否为192.168.1.2,从而决定是否进行回应,因此只有电脑A会对这条报文进行响应,返回一条报文告知其MAC地址:

字段 值 说明 操作类型 00 02 ARP响应(区别于请求的01) 发送方MAC 00:11:22:33:44:55 192.168.1.2的实际MAC 发送方IP c0 a8 01 02 192.168.1.2(小端序) 目标MAC aa:bb:cc:dd:ee:ff 原请求方的MAC 目标IP c0 a8 01 01 192.168.1.1

交换机在这两条报文的交互过程中,已经学到了电脑A和电脑D的MAC地址,并将其MAC地址与对应的端口联系在了一起,生成了如图13中所示的MAC地址表,因此,当电脑D发送了一条报文出来,在经过交换机时,交换机根据这条报文的目的MAC地址,就会将这条报文发送到端口1,最后送到电脑A。

 

   
18 次浏览       5
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
认证课:OCSMP-MU 4-9[在线]
需求分析与管理 4-21[北京]
基于大模型Agent应用开发 4-18[北京]
AI Spec Coding工程化实践 4-24[北京]
基于模型的数据治理 5-19[北京]
企业网络安全 5-21[北京]
具身智能技能与实践 6-11[厦门]
 
 
最新文章
ASPICE中配置管理是个什么东西?
了解软件安全分析与组件鉴定
掌握Autosar ComStack的精髓!
基于整车功能的正向诊断需求开发
搞定Autosar SWC开发秘籍,码住!
汽车OTA更新的系统性威胁评估
最新课程
基于SOA的汽车电子架构设计与开发
Auto SAR原理与实践
AUTOSAR架构与实践(从CP到 AP )
AUTOSAR架构建模方法与工具(EA)
ASPICE4.0核心开发过程指南
MBSE(基于模型的系统工程)
更多...   
成功案例
某知名车企 AUTOSAR应用设计与开发
吉利汽车 MBSE工程体系汽车建模及评估
某整车企业 《功能需求分析与设计》
富奥汽车零部件 建模工具EA
零跑汽车 建模工具EA及服务
北汽福田 建模工具EA
小鹏汽车 建模工具EA
更多...