前言

搞SOA、搞 AP & CP AUTOSAR、搞异构SoC、搞车载以太网、搞车载OS等就找搞一下汽车电子。

全系内容可在《搞一下汽车电子》后台回复 “系列”,或进入菜单栏 “分享平台” --> “系列分享”

本系列请点击:《搞一下 车载以太网实战》

所有系列请点击:《汽车电子系列分享》

身边的以太网

未来已来,汽车以太网势不可挡,Are you ready?

我们身边充满了以太网,不管是新势力还是传统的主机厂,都已经在准备或是在更上一层地去做以太网的一些升级,包括电子架构也会做车载以太网的一些规划。

当前,无论是我们的电脑,还是手机,还是我们访问的云端数据,还是看视频等,都是我们身边可以感知到的传统以太网。

未来,这些以太网技术都会逐渐运用在我们的汽车上,以太网在汽车上应用已势不可挡。汽车整个的一套以太网生态也在慢慢地构建,包括我们的车联网、V2X通信、5G车联网都已经慢慢加入进来。

但是现在我们整个汽车行业最多的可能还是在用4G的T-Box去做车联网,当然这一块也会随着汽车行业的一个生态、对一些带宽或是延时的一些需求,推动整个汽车供应链去做一些迭代更新。

其实在工业互联网上这一块已经慢慢的趋向于成熟了。

汽车为什么拥抱以太网

汽车为什么要拥抱以太网?因为以太网本来不属于汽车行业的,既然要选择那肯定有它的一些优势。

从总线技术来说,我们现在车上的总线包括CAN/FD、Flexray、MOST、LIN等,然后现在又加入了新的成员以太网。

并不是说因为以太网的加入会导致其他的总线就能够彻底的去取消掉,因为这个涉及到原有的电子架构跟新的电子架构的融合,不可能把原先的整套全部舍弃掉。

我们需要用最简单、最低的成本去把我们的架构一点一点的往上升级,所以就慢慢地引入了百兆、千兆,亦或是将来的万兆以太网。

以太网的相对优势如下图所示:

上图中,我们可以看到,以太网的优势在于:

带宽高、可扩展强
基于星型的拓扑结构
随着趋势的发展,成本会越来越低
当前主要应用于娱乐系统和ADAS,主要用于音视频传输

当前,以太网的应用已不仅限于百兆以太网,随着汽车行业的高速发展越来越依赖高带宽,低延时,高算力的通信,而以太网便是高带宽、低延时、高算力通信的基础。

当前在L3+自动驾驶域控制器中,会以太网为骨干网,AUTOSAR和激光雷达作为标配,其中以太网是基础;

目前架构会随着ECU数目增加而改变,这也会造成分布计算资源的浪费,为了避免分布式资源的浪费,我们可以使用以太网,将原先分布式上的计算资源进行域融合,进而减少ECU的数量,节省资源线束重量,这样可以减少80%的车内连接成本,30%的线束重量。

对于带宽要求高的各种传感器,特别是激光雷达和高分辨摄像头必须使用以太网传输数据,节省LVDS总线成本;

还有车云交互方面,4G/5G以及V2X生态的逐渐成熟,远程代驾/泊车,哨兵等功能可以更完美落地。

汽车以太网 VS 工业以太网

首先从最底层的一些物理介质来看的话,汽车上使用的以太网分为两种,一个是车内ECU之间的通信,还有一个是车外OBD对外的通信,其实这两个通信它本身是不一致。

车内ECU通信用的是一对双绞线进行通信,沿用原先CAN的这种单对双绞线传输数据。但是带宽使用的是百兆以太网的技术。

OBD对外通信是两对双绞线。在ISO13400-3中有一些描述,常规使用的是3、11、12、13 这四个引脚,当然还要外加一个8引脚的激活(Activation)线。这是一个通过OBD的对外的DoIP的诊断。

总的来看就是,一个是对内的一对双绞线的ECU之间的通信, 一个是OBD对外的两对双绞线的通信。

回过来看一下我们的生活中,例如我们的电脑网线。

我们了解到它是八芯的,相当于四对双绞线。但是,其实工业的百兆以太网,只用到四芯,分别是1、2、3、6这四个引脚,其余是做预留的。

工业千兆以太网会用四芯去做千兆的信息传输,用四芯去做POE(Power On Ethernet)供电,例如我们的摄像头、办公楼无线发射器。所以工业以太网四芯通信其实跟汽车OBD对外的通信的本质上是相同的,所以其实整个汽车上面就已经用到工业以太网了。

汽车的以太网分以下几种类型:

OBD是100BASE-TX,使用的是2对双绞线,速率是100M,总线类型是星型。

ECU之间的通信,一般通过 100BASE-T1 或 1000BASE-T1 两种技术,具体使用哪种看ECU对通信速率的需求。出于对EMC干扰的考虑,我们选择使用1000BASE-T1的时候,会选择使用一对屏蔽双绞线。

还有正在制定的 10BASE-T1S ,它是一种类似于CAN的总线型技术。主要是弥补百兆以下的车载以太网的空白,其目的是为了考虑未来是否可以统一车内的总线类型。当然,这是一个漫长的过程。

类似的还有CAN XL技术,它是在往上努力,最终10M技术花落谁家就看谁能从价格和落地上有更多的优势。

汽车以太网物理层以上的,例如它的拓布以及它的整个通信的原理,类似于下图的内部网络图:

以太网组网是一个星型的结构,是点对点的,不可能说一根线挂在那里,所有的节点挂上来就可以通信,必须是点对点的。

它必须得经过一个Switch进行二层的转发,或者经过一个Router进行三层的转发, 也就是说所有ECU的通信肯定是有一个汇聚点的,不可能一对一,这会导致车内网络变成“蜘蛛网”,这就需要一个车内设备进行汇聚和转发。

以下,我们会详细介绍Switch和Router的转发原理。

以太网OSI模型

OSI(OpenSystem Interconnect),即开放式系统互联,由ISO组织发布。

为了方便大家理解以及去做一些更深层次的分析,OSI参考模型分为七层模型,在工业以太网上其实它也叫TCP/IP五层模型,这两个其实本质上是没有区别的,无非是说把应用层更细分为三个层。

整个OSI模型每层各司其职。

第一层物理层
如之前我们提到的 100BASE-T1、1000BASE-T1、100BASE-Tx,这技术是由不同的物理层介质决定的。

第二层数据链路层
主要是提供一些链路建立以及一些转发策略。

第三层网络层
是指不在同一个局域网,或者对远端网络有访问需求的时候,都是通过IP寻址以及路由转发进行功能操作。

第四层传输层
我们车上会有很多协议例如DoIP、SOME/IP、UDPNM等一些协议,每个协议都会有它固定的一个Server端的端口号。

Server端跟客户端会有一个 Client 到 Server 对应关系,多个Client 要如何识别它要访问的是DoIP还是SOME/IP 服务,它都是通过传输层来确定的,传输层会有一个包含源端口、目的端口、再加上网络源IP、目的IP以及协议的组成一个通信五元组。

第五层会话层
当我们建立DoIP的会话,需要有会话管理,这个层次用来会话管理。

第六层表示层
表示层用于数据格式转换和数据加密,如TLS的加密方式,使通信双方进行协商,以防止数据的篡改,符合相关安全要求。

第七层应用层
就是我们所谓的Payload

OSI模型协议分布如下图:

以太网帧结构

下图是一张以太网帧的结构图。这个结构图很清晰地描述了整个以太网帧每个部分组成。

对我们来说能抓到的或者能看到的报文帧,基本上是在目标MAC地址到IP数据包。

上图中的前导码和帧开始符主要做一些底层的数据传输和编码流的二进制流,它们本身不会被网卡捕获,网卡一般抓包的时候就已经将前导码跟帧开始符解析掉了。

还有帧后面的校验码,其主要是通过CRC校验判断帧是否有效或者发生篡改或错误,当网卡能收到数据帧并通过抓包工具可以抓到的,就说明该帧没有问题,是有效的,当帧是有效的后,就说明CRC就已经解析掉了。

所以,在整个以太网帧中,能看到的就是目标MAC地址、源MAC地址、帧类型以及IP数据包,当然IP数据包中还会细分许多协议,每个帧之间也是跟CAN类似有,有一定的距离,不可能一帧挨着一帧传输的。

IP数据包里面,有46~1500 字节的长度约束。这不是由ECU决定的。在我们使用的设备中,会有一个最大传输单元(MTU)、MTU一般默认是1518个字节,这就导致IP数据包最多只有1500个字节。

以太网单个最大帧:6(目的MAC)+ 6(源MAC)+ 2(帧类型)+ 1500(IP数据包)+ 4(CRC校验)=1518字节,如果带VLAN就是1522字节(VLAN会多出四个字节的帧类型描述)

以太网最小帧:6(目的MAC)+6(源MAC)+2(帧类型)+46(IP数据包)+4(CRC校验)=64字节

常见的以太网帧类型:
0x0800:IPv4
0x0806:ARP
0x22F0:AVTP
0x8100:VLAN Tag(TPID)
0x86DD:IPv6
0x88F7:PTP / gPTP

下图是用工具抓的两个报文,以方便我们来理解以太网帧结构。上图报文以太网帧如果小于64字节,那么会填充00。

当以太网帧如果大于1518字节,那么会分片,如下图所示。1008字节ICMP报文分2帧传输。

接下来我们对以太网帧进行更详细的分析

从上图可以看到,当我们使用SOME/IP协议时,SOME/IP报文是封装在TCP、UDP报文里,然后把它加一个报头,扔到IP层的Payload中,IP层添加报头后,再分装到IP数据包中,一层一层分工。

当对方接收到后,相应的就是去除包头,解析SOME/IP中的Payload。

DoIP帧结构

接下来我们看一个DoIP的报文。下图为用工具抓的一个DoIP报文。

上图整个DoIP报文整个一个帧是69个字节,其实还要再增加4个字节的CRC,总共73个字节。只不过当网卡识别它是一个有效帧后,就把CRC 解析掉了。

当然,图中也描述了它的源MAC地址(6个字节)和目的MAC地址(6个字节),再加上2个字节的帧类型,共14个字节。

然后再往后就是传输层,IP层最小是20个字节。

然后再往后是TCP,DoIP报文是一个UDS的报文,而UDS报文都是通过TCP传输的,因此,会有个TCP的头部,包括 Src Port(源端口):13400(这是DoIP的一个端口号)以及 Dst Port(目的端口):50090。TCP的长度是20个字节;

DoIP协议头部是8个字节的长度;需要注意的是,DoIP的头部并不包括源DoIP地址和目标DoIP地址这4个字节;

再往后的话就是我们的Payload,3个字节,

将上述加起来一共69(14 + 20 + 20 + 8 + 4 + 3)个字节(一帧)。

SOME/IP 帧结构

接下来,我们看一下SOME/IP帧结构。

这就跟SOA有些关系,SOA本身是一个概念化的东西,它具体化的一个表现就是SOME/IP的报文,所有的以太网的SOA基本上都是标准化的一个SOME/IP的协议去做一个传输。

下图为SOME/IP报文的解析:

上图中,SOME/IP的报文总共62个字节,以太网帧头部就不做赘述了。这里我们说一下VLAN,我们有时会把一些业务进行一些区分,例如诊断、DoIP、SOME/IP、安全性更高的一般会通过VLAN区分,上面提到的DoIP协议报文是没有VLAN的,说明DoIP和SOME/IP 的通信传输是隔离开的。

再往后,IP层我们之前也说过了,这里就不做赘述了。

再往后,UDP说明这里的SOME/IP是通过UDP进行传输的,它的源端口是30602、目的端口是30602。

再往后,我们看一下SOME/IP报文,它的头部是16个字节,这16个字节是固定的,包含Service ID、Method ID、Length、Client ID、Session ID、Protocol Version、Interface Version、Message Type、Return Code。

当然这里是没有带Payload,后期我们会进行一个相关的详细分享。

以太网的通信交互案例

以太网通信交互案例-二层

下图所示为我们刚才提到的一个Switch的组网,Switch上有四个PHY的接口,每个PHY的接口分别连了一个ECU,每个ECU都有自己的MAC地址,如AA:BB:CC:DD:EE:01等。这四个ECU分成两个VLAN,左边两个ECU在VLAN1中,右边两个ECU是在VLAN2中。

Switch本身是一个二层转换的设备,它是严格按照要求进行交换的,也就是说,在同一个VLAN(虚拟局域网)里面是可以进行二层通信的,不在同一个VLAN的主机是不能二层通信(如EE:01 与 EE:02 是不能进行通信的),需要注意的是,二层通信本质上是跟IP地址没有关系的。

下图举例说明为什么二层通信跟IP地址没关系,因为二层的通信属于MAC寻址。无非是从一个ECU的MAC到另外一个ECU的MAC进行寻址。

如前面提到的Switch组网图中,EE:01 ECU想要和EE:03 进行通信,如果有寻到03的MAC地址或者配置了一些静态的MAC表项,那么他们可以直接通过EE:01 连接的PHY,再通过 EE:03 连接的PHY进行通信。

如果EE:01 想和 EE:02 通信,这个时候Switch会查看下帧结构,在帧结构中会有一个VLAN的标签编号,如果识别到 VLAN的编号不在VLAN1里面,报文就不会转发到EE:02的PHY上去。

当ECU的网卡、或者我们电脑的网卡,识别到目的MAC地址,不是自己的地址,或者不是组播,或者不是广播的时候,会直接将它丢弃,不会再往协议栈中发送。这也是为什么二层以太网无法跨VLAN进行通信。

以太网通信交互案例-三层

接下来,我们说一下以太网的三层通信。

三层通信是指跨网或者跨VLAN进行通信时,需要通过路由器或者带有路由功能的设备实现IP报文转发。如下图所示为以太网三层通信的示例。

上图中,我们可以看到,左边两个ECU的IP地址分别是,192.168.1.10 和 192.168.1.20 。右边的是 192.168.2.10 和 192.168.2.20。上图中,并没有标注子网掩码,所以默认子网掩码是 255.255.255.0。

上述中,192.168.1.x 是一个网段 Network A ,192.168.2.x 是一个网段 Network B。这两个网段之间通过一个路由器进行路由转换。

如下图所示,当192.168.1.10 与 192.168.1.20 进行通信时,是不需要经过路由器的,通过Switch就可以进行通信。他们本身就是在一个局域网里面的,不需要经过路由器进行三层转发,因为他们本身没有跨网段。

但是,当192.168.1.10 (Network A 中的)与 192.168.2.10 (Network B 中的)进行通信时, 192.168.1.10 会将报文发送给它的缺省网关 192.168.1.1,192.168.1.1 收到报文后,它会识别其有一个直连的路由 192.168.2.1,然后便会知道需将报文发送给Network B,这个时候这个报文就会送到192.168.2.10 。返回来类似。

需要注意的是:不同网段主机无法物理直连进行IP通信,必须借助Router。

以太网通信交互案例- 新浪上网

接下来,我们分享一下,我们的车内,或者电脑是如何上网的。

我们假定的环境是,我们的笔记本要访问新浪的网址。

具体的步骤如下:

第一步:连接WIFI/网口,获取IP地址,如下图所示。这是一个跨三层的远程通信。

上图中,我们可以读出以下信息:

网卡是Intel的AC 8260无线网卡。
MAC 地址是:34-F6-4B-CB-0E-E9。
这个地址是通过 DHCP获取的。
分配的IP地址是:192.168.20.60(这是我们电脑跟外界通信的唯一IP,所有的IP报文里面都是封装的这个IP地址。)
子网掩码:255.255.255.0
租约时间是指,这个地址可以用多久
默认网关是指缺省网关,比如说,我不知道是访问新浪,还是百度的时候,路由的时候都是默认扔给这个网关。
DHCP服务是指,IP地址(192.168.20.1)是谁分配的。
DNS服务器主要是做一些域名解析。114.114.114.114 是电信的DNS,8.8.8.8 是谷歌公用的一个DNS服务器。

以上就是上网的第一步获取IP地址,获取到IP地址就决定了上网的一些必备的信息。

第二步:我们上网的时候,会输入新浪的网址,这个网址是一个URL,这时,我们需要请求新浪网址DNS解析,将URL解析成IP地址。需要注意的是,一般大型服务器或者网址,都会对应多个IP地址。目的是为了缓冲服务器的压力,更好地为用户提供体验。

当我们在上述两个DNS服务器上查找新浪的网址时,都会给我们返回当前给我们分配到的新浪服务器的IP地址。

第三步:当拿到DNS解析后IP地址后,我们的电脑就会向这个IP地址发起http或者https的请求。进而访问到新浪网页,并获取相应的资讯内容。

以太网与汽车结合之美

当前,随着以太网在汽车上的应用,车载以太网除了上述提到的物理层的区别以外,主要还有上层应用的一些区别。

当前,车载以太网主要有以下几种应用。

思考

上述,我们分享了很多车载以太网相关的内容,这里也抛出几个问题供大家思考一下。

刚分析的DoIP和SOME/IP的报文就是网卡实际发的帧吗,少了点什么?
答:缺少CRC,如果CRC校验失败,网卡会直接丢弃,能抓到的报文都是校验过的,已经剥离CRC。

行业的TC8测试,主要测试哪些内容,意义何在?
答:主要验证OSI模型每个层次协议一致性,让各ECU的协议栈能够读懂对方的报文,给出正确响应。

100M的文件使用100M的以太网传输理论需要几秒?
A:1秒 B:8秒 C:10秒 D:依情况而定
答:正确答案D,理论时间还需要考虑每帧字节大小。

还有其他问题,如
1.笔记本为什么抓取不到VLANtag报文?
2.车上如何去抓取以太网报文排查问题?
3.如何规划整车的以太网架构?
答:后面几期会有专题一一解答。

本期分享就到这里,下期见。

跳转阅读

建议解锁2022 全45期内容,还可以语音Q & A,详情点击:
2022 年度 | AP、CP、Eth、SoC、SOA 实战系列 | 线上研讨会

跳转阅读:车载以太网帧结构详解

联系我们

微信:shactiontech
邮箱:support@shactiontech.com

搞一下 车载以太网实战 | 01 车载以太网帧结构详解相关推荐

  1. 微信小程序01【目录结构详解、视图与渲染、事件、input、scroll-view】

    学习地址:https://www.bilibili.com/video/BV1sx411z77P 笔记01:https://blog.csdn.net/weixin_44949135/article/ ...

  2. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  3. unity3d开发实战《啪啪三国》技术详解!

    unity3d开发实战<啪啪三国>技术详解!  去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品<啪啪三国>为例,着重讲解了unity3D手机网游开发的经验,其中涉及 ...

  4. docker 容器 exited_Docker实战006:docker容器使用详解

    Docker容器也是docker的核心成员,是docker镜像的一个运行实例.一个镜像可以创建多个容器,多个容器也可以在同一台机器上运行并与其他容器共享操作系统内核同时将应用程序与系统其它周围环境隔离 ...

  5. OpenCV-Python实战(17)——人脸识别详解

    OpenCV-Python实战(17)--人脸识别详解 0. 前言 1. 人脸识别简介 2. 使用 OpenCV 进行人脸识别 2.1 使用 OpenCV 进行人脸识别流程示例 3. 使用 dlib ...

  6. OpenCV-Python实战(16)——人脸追踪详解

    OpenCV-Python实战(16)--人脸追踪详解 0. 前言 1. 人脸追踪技术简介 2. 使用基于 dlib DCF 的跟踪器进行人脸跟踪 2.1 完整代码 3. 使用基于 dlib DCF ...

  7. OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)

    OpenCV-Python实战(14)--人脸检测详解(仅需6行代码学会4种人脸检测方法) 0. 前言 1. 人脸处理简介 2. 安装人脸处理相关库 2.1 安装 dlib 2.2 安装 face_r ...

  8. OpenCV-Python实战(12)——一文详解AR增强现实

    OpenCV-Python实战(12)--一文详解AR增强现实 0. 前言 1. 增强现实简介 2. 基于无标记的增强现实 2.1 特征检测 2.2 特征匹配 2.3 利用特征匹配和单应性计算以查找对 ...

  9. OpenCV实战(12)——图像滤波详解

    OpenCV实战(12)--图像滤波详解 0. 前言 1. 频域分析 2. 低通滤波器 3. 图像下采样 3.1 使用低通滤波器下采样图像 3.2 内插像素值 4. 中值滤波器 5. 完整代码 小结 ...

最新文章

  1. 全球第一所人工智能大学成立:培养硕博研究生,全员全额奖学金
  2. Android禁止ViewPager的左右滑动
  3. 教你创建高大上的多边形字体
  4. 网易云信自研大规模传输网核心系统架构剖析
  5. Chrome扩展应用Angular state inspector的使用方法
  6. python经典项目实战_2个Python入门级的实战项目
  7. 贴几张最新最精彩的电影海报
  8. 均值(信息学奥赛一本通-T1060)
  9. ListView实现多种item布局的方法和注意事项
  10. 如何阻止EditText专注于Android中的Activity启动
  11. cad对计算机专业的用处,CAD软件的特点和用途
  12. 今日份PS练习|油画棒效果
  13. 有关信息论和 error-control coding 的简单介绍
  14. 杰奇php手机登陆自动跳转,杰奇cms电脑与手机自动判断跳转代码
  15. 0~6岁儿童不同时期微量元素含量的结果分析
  16. Android11及以上 文件读写权限申请
  17. 虚拟机+Ubuntu18.04+ORB_SLAM3+ROS环境配置(配置环境的过程以及途中出现的错误,解决方法)
  18. 山东省历年高考人数(2005-2021)
  19. 一文教你快速理解什么是色环电阻识别方法
  20. bash有意思的记录

热门文章

  1. Python单利实现
  2. 北京市工作居住证的申请与办理
  3. IEduChina2019国际教育展在北京完美落幕
  4. 京沪高铁上火车位置的实时监视模拟网站的开发
  5. 用od、ce实现植物大战僵尸自动收集阳光
  6. 【报告分享】 2020年中国汽车用户消费洞察白皮-懂车帝巨量算数(附下载)
  7. 用鼠标模拟视线跟踪技术
  8. 我的世界服务器无限刷雪傀儡,《我的世界》四个刷怪技巧,雪傀儡的雪球用来对付烈焰人有奇效?...
  9. HTML实现两行两列单元表
  10. Android Studio远程连接模拟器调试