目录
1.车载以太网概述
其中与车载以太网强相关的模块有:
-
SOME/IP(Scalable Service-Oriented MiddlewarE over IP):是一种用于传输服务(Service)信息的基于IP的可伸缩中间件,能够适应基于不同操作系统的不同大小的设备,小到摄像头,大到车机或自动驾驶模块;相比于传统的CAN总线的面向信号的通信方式,SOME/IP是一种面向服务的通信方式。
-
DoIP:基于以太网的诊断传输协议,能够将UDS进行封装并基于IP网络进行传输;应用于车辆检查和维修、车辆或ECU软件的重编程、车辆或ECU的下线检查和维修等,其主要工作原理类似于Diagnostic over CAN(或称为DoCAN)。
-
XCP:XCP on Ethernet能够基于以太网进行车载控制器的标定,主要用于标定、测量、少量的编程和刷新(大部分刷新会利用诊断协议)、ECU旁路功能等。
-
UDPNM:是AUTOSAR组织制定的基于汽车以太网的网络管理协议,能够有效的实现车载以太网节点的协同睡眠和唤醒,其主要工作原理类似于AUTOSAR的CAN NM
其中与传统以太网最核心区别是物理层车载以太网要用 100BASE-T1,而非100BASE-TX,下面依次介绍与车载相关的各层。
2. 物理层 PHY
2.1 总体说明
物理层PHY:数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口;
数据链路层MAC:提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。
100BASE-T1在物理连接上使用了一对双绞线实现全双工的信息传输,而100BASE-TX则使用了两对双绞线实现全双工,一对用于收,另一对用于发。
100BASE-T1利用所谓的回音消除技术(echo cancellation)实现了在一对双绞线上的全双工通信。
回音消除技术的主要过程:作为发送方的节点将自己要发送的差分电压加载到双绞线上,而作为接收者的节点则将双绞线上的总电压减去自己发出去的电压,做减法得到的结果就是发送节点发送的电压。
车载以太网固定为全双工通信方式,出于对汽车启动时间的考虑而没有引入自动协商机制,此外车载以太网是通过单对非屏蔽或屏蔽电缆连接。
2.2 物理层架构
物理层主要作用:
1)定义硬件接口;
2)定义信号与编码;
3)定义数据与信号之间的转换收发;
物理层基本架构
主要包括PMD,PMA和PCS。
PMD,介质依赖层,主要职责是转换PMA的数据与实际网络上的信号。发送时,它从PMA读取数据并执行实现该功能所需的必需的低级行编码功能设计的媒介。接收时,它会读取并解释这些内容编码信号,然后将它们转换回位以发送到PMA。
PMA,介质连接层,结余PMA和PCS之间,其中PMD是按照bit串行处理方式,而PCS则是按照数据块处理方式,因此PMA则是起到中间转换的作用,此外还起到数据冲突检测的功能。
PCS,编码子层,主要进行初始编码 ,实现特定于以太网速度和传输介质要求的子层中的一部分。
2.3 物理层控制器的架构
其中,MDI , Medium Dependent Interface。MII Medium Independent Interface,MIIM主要用于寄存器的配置管理。
我们这里需要注意的是RXD 和TXD都是4个数据。
2.4 物理层编码原理
首先总线上的电平信号有,-1 0 和 1如图:
数据和电平的编码转换关系有如下表关系:
如数据 000 对应两根线上的电平为 -1 01 ,
主要数据到电平转换过程为以下四步:
1.首先从MII接收到数据(4bit 4bit...)
2.接下来分割成(3bit 3bit...)进行处理;
3.根据上表,电平与数据编码的关系,转换为电平信号;
4.将电平信号发到总线。
一个案例说明以上的转换过程:
100Mbps 速度的由来:
在微控制器的每个时钟周期中,MII接口到来的数据是4个bit,PHY从MII接口收到数据后,会首先进行一个4B3B的转换,为了匹配25MHz * 4bit = 100Mbit/s的速率,PHY的MII接口时钟周期应该是33.3333M,每次接收3bit,也实现了33.3333M * 3bit = 100Mbit/s的速率。之后PHY要再进行3B2T的操作,将每次接收到的3个bit转化为2个电平值(取值范围是-1,0,1),具体的对应关系如上图中的表所示。3个bit有8种组合(即2的三次方),两个电平值有9种组成(即3的平方),所以后者可以覆盖前者。此时时钟周期仍然是33.333M,但是每个时钟周期中的两个电平就能够表示3个 bit了,所以此时的数据速率仍然是100Mbit/s,每个电平实际上包含了1.5bit信息。最后一步是PAM3,将逻辑的-1,0,1转化为在双绞线上的电压,所以,最终在总线上信号的波特率是66.666MHz,但是它实现了100Mbit/s的通信速率。
3. 链路层 MAC
MAC层主要内容,
1) 寻址
2) 传输方式
3) 帧格式
3.1 MAC控制器架构
其中比较关键的是MII 和 MIIM 与PHY接口连接。
数据发送,MAC协议会判断当前是否适合发送数据,若能,它会在将要发送的数据上附加一些控制信息,最终使数据以规定的格式到达物理层;
数据接收,它会判断数据是否有错误,如果没有错误的话,它会去掉附加的控制信息发送至LCC(逻辑链路控制)子层。
SMI接口包括MDIO(控制和管理PHY以获取PHY的状态)和MDC(为MDIO提供时钟)。
MDC由MAC提供,MDIO是一根双向的数据线。用来传送MAC层的控制信息和物理层的状态信息。
MDIO数据与MDC时钟同步,在MDC上升沿有效。
3.2 MAC地址
在我们给别人联系时,我们往往需要知道对方的邮件地址或电话或住址,而以太网通信也是类似。因此需要通信的两个设备,必须具有唯一标识的MAC地址。
MAC地址长度为48bit、6byte,前三个字节是组织标识ID,后三个字节是本地管理ID。
全局或本地地址U/L:第一个字节的第二位MAC地址的OUI字段(从右数第二低位开始计数)被称为U / L(通用/本地)标志。 设为0时,将MAC地址标记为被普遍管理; 当它是1时,MAC地址是本地管理的。
单播与组播MAC地址I/G:OUI的第一个字节的第一个(最低有效)位MAC地址的字段,称为I / G(个人/组)标志。当这个位设置为0,MAC地址是单个设备,并且消息是单播。设置为1时,表示组地址(多播)。
广播MAC地址:FF-FF-FF-FF-FF-FF
3.3 数据传输
主要介绍一下CSMA/CD 冲突检测方法。
在以太网中,网络不断监控(或感知)传输线,侦听确定线路是否繁忙。任何设备听到正在进行的传输则禁止尝试发送自己的消息,直到线路空闲为止。
它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两个碰巧同时送出了数据,那样必将造成冲突。这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突
3.4 MAC帧格式
Preamble:7byte 帧前缀,主要用于帧设备之间的事件同步;
Start of frame delimiter:1byte,标识帧开始
MAC destination :目标MAC地址
MAC source : 源MAC地址
802.1Q Tag:是一个可选项,主要用于VLAN,如在这个字段中定义VLAN的ID或优先级等,未定义的则会自动把该帧丢弃。
length:数据长度/payload长度
Payload:有效负载、数据
frame check :CRC
interframe gap :帧之间的间隔
4.网络层
4.1 IP地址
主要作用为,寻址,数据封装,路由。仅以IPV4说明
长度为4byte 32bit,每个字节用dot隔开,用十进制表示。
192.168.0.1 ,其中加粗的前三个字节192.168.0 表示网络ID,最后一个字节 1表示主机ID
网络ID(网络ID):一定位数,从头开始从最左边的位开始,用于标识主机或位于其他网络接口。 有时也称为网络前缀,甚至只是前缀。
主机ID(主机ID):其余位用于标识 网络上的主机。
IP地址类别:
类别 | 默认子网掩码 |
---|---|
A类 | 255.0.0.0 |
B类 | 255.255.0.0 |
C类 | 255.255.255.0 |
A类地址第一字节为网络ID,后三个字节为主机ID,范围是1.0.0.1—126.155.255.254;
B类地址第一二字节为网络ID,后两个字节为主机ID,范围是128.0.0.1—191.255.255.254;
C类地址前三个字节为网络ID,最后一个字节为主机ID,范围是192.0.0.1—223.255.255.254
D类地址:为组播地址
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;
224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet;
224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
D类地址的MAC有特殊转换关系:
MAC地址前三位为:01 00 5E
MAC地址后三位为:0x7FFFFF & 组播IP地址
举例来说 组播IP地址 242.147.109.235 对应的MAC地址为:01.00.5E.13.6D.EB
4.2 IP协议
Version:版本 如4表示IPV4 IPV4:4,IPV6:6
IHL:Internet Header length,Header 长度 没有选项,则一般为5(5x32bit=20B)
DSCP:Differentiated Service 一般没有使用,详细参考RFC
ECN:Explicit Congestion Notification 用于扩展检测丢包
Total length :总长度,header+数据 总长度
Identification :占16位,它是一个计数器,用来产生数据报的标识
Flags:标明是否分片 bit 0: Reserved; must be zerobit 1: Don't Fragment (DF) bit 2: More Fragments (MF)
Fragment Offset :占12位,指较长的分组在分片后某片在原分组中的相对位置.片偏移以 8 个字节为偏移单位
Time to Live :生存时间,占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255
Protocol:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为 UDP 协议
Header checksum:数据头CRC
Source IP address:源IP地址
Destination IP Address:目标IP地址
4.3 ICMP协议
ICMP:Internet Control Message Protocol 网际控制报文协议
作用:提高 IP 数据报交付成功的机会 用于ping,跟踪路由
这里的Type如下图所示:
这里主要说明 Code,用于表示网络相关的错误。
4.4 ARP协议
ARP:Address Resolution Protocol 地址解析协议
由于上层用的是IP地址,下层用的是MAC地址,ARP协议就是用于解决协议转换的问题。
主要用两种映射方式,一种为直接mapping,一种为动态mapping
以下说明ARP过程:
1)首先查询表中是否有目标地址,若没有则下一步;
2)产生ARP请求帧;
3) 广播ARP请求帧;
4)目标方接收ARP请求帧,并处理
5)目标方产生ARP响应帧
6)目标方更新ARP表
7)目标方发送ARP响应帧
8)请求方接收响应帧并处理
9)请求方更新ARP表。
5.传输层
传输层的目的在于,控制分段传输大块数据。
5.1 端口与Socket
前面我们提到了IP地址,IP地址一般表示一个ECU级别;
而为了进一步表示一个ECU上的不同软件进程,功能或模块,我们引入端口的概念(port)。
在TCP和UDP中,都包含了16bit的 源地址端口和目标地址端口。
而 IP地址+port = socket。
5.2 UDP
UDP:User Datagram Protocol 用户数据报协议
主要特点:传输协议比TCP轻,不保证发包的传输以及数据包的顺序,主要用于对时间敏感的传输;
5.3 TCP
TCP:Transmission Control Protocol 传输控制协议
主要特点,主要是用于可靠的面向连接的传输,在传输数据之前,必须先建立连接,同时确保所有数据按顺序到达客户端,客户端收到数据包后需要给出确认应答,若未确认,则该数据包会进行重传。
握手过程:
协议格式:
Source Port : 源端口
Destination Port:目标端口
Sequence Number:序列号,用于确保传输顺序;
Acknowledgment Number:应答号 比如当前接收端接收到一个净荷为12byte的数据包,SN为8,则会回复一个确认收到的数据包,如果这个数据包之前的数据也都已经收到了,这个数据包中的ACK Number则设置为12+8=20,表示之前的数据都已经收到了,准备接受SN=20的数据包
data offset:4位包括TCP头大小,指示TCP头的长度,即数据从何处开始。
CWR(Congestion Window Reduce):拥塞窗口减少标志set by sender,用来表明它接收到了设置ECE标志的TCP包;
ECE(ECN Echo):ECN响应标志被用来在TCP3次握手时表明一个TCP端是具备ECN功能的。在数据传输过程中也用来表明接收到的TCP包的IP头部的ECN被设置为11;
URG(Urgent):该标志位置位表示紧急(The urgent pointer) 标志有效。
ACK:取值1代表Acknowledgment Number字段有效,这是一个确认的TCP包,取值0则不是确认包。
PSH(Push):该标志置位时,一般是表示发送端缓存中已经没有待发送的数据,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。
RST(Reset):用于reset相应的TCP连接。通常在发生异常或者错误的时候会触发复位TCP连接。
SYN:同步序列编号(Synchronize Sequence Numbers)有效。该标志仅在三次握手建立TCP连接时有效。
FIN(Finish):No more data from sender。当FIN标志有效的时候我们称呼这个包为FIN包。
Window Size:从Ack Number开始还愿意接收多少byte的数据量,用于TCP的流量控制。
Urgent Pointer:优先指针 指向后面是优先数据的字节,在URG标志设置了时才有效。
6.应用层
6.1 DoIP
参考:关于DoIP 协议的理解_AgingMoon的博客-CSDN博客_doip
6.2 SOME/IP
参考:关于SOME/IP的理解_AgingMoon的博客-CSDN博客_some ip
6.3 DHCP协议
DHCP的全称是Dynamic Host Configuration Protocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置IP地址。
DHCP是一个局域网应用层协议,使用UDP协议工作,用于在局域网内自动分配IP地址。
该协议基于Client / Server模式工作(Server一般由路由器担任),
•DHCP Server端,使用UDP端口:67 (0x43)
•DHCP Client端,使用UDP端口:68 (0x44)
DHCP的三种机制分配IP地址:
1)自动分配方式(Automatic Allocation),DHCP服务器为客户端指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
2)动态分配方式(Dynamic Allocation),DHCP服务器给客户端指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3)手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
其中我们最常使用的是第二种,即动态分配方式。
UDP 数据包
OP:
若是 client 送给 server 的封包,设为 1 ,反向为 2。
HTYPE:
硬件类别,Ethernet 为 1。
HLEN:
硬件地址长度,ethernet为6。
HOPS:
若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0。
SECONDS:
Client 端启动时间(秒)。
Transaction ID:
一个随机数,用于客户和服务器之间匹配请求和相应消息。
Flags:
从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用。
ciaddr:
要是 client 端想继续使用之前取得之 IP 地址,则列于这里。
yiaddr:
在 server 送回 client 的 DHCP OFFER 与 DHCPACK封包中,此栏填写分配给 client 的 IP 地址。
siaddr:
若 client 需要通过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。
giaddr:
若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。
chaddr:
Client 之硬件地址。(包括6字节MAC和10字节padding)
sname:
Server 之名称字符串,以 0x00 结尾。
file:
若 client 需要通过过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。
options:
允许厂商定议选项。每个option项由Type(1字节)、Length(1字节)、Value(长度由Length决定)三部分组成。
第一步:
DHCP客户端主动发送DHCP Discover包,用来寻找DHCP服务器,其中:
源MAC是自己的MAC地址,目的MAC是FF:FF:FF:FF:FF:FF的广播;
源IP是0.0.0.0(现在还没有IP,就用全0地址),目的IP是255.255.255.255的三层广播地址。
因为此时客户端还不知道DHCP服务器在哪里,所以使用广播来寻找,请求会被广播到整个网段中。
第二步:
DHCP服务器收到客户端发的DHCP Discover之后,会在自己的地址池中拿出一个没有分配的地址以及配套的参数(如:掩码、DNS、网关、域名、租期……),然后以一个DHCP Offer包发送出去。这个DHCP Offer数据包的地址如下:
源MAC是DHCP服务器的MAC,目的MAC是DHCP客户端的MAC地址;
源IP是DHCP服务器的IP,目的IP是即将分配给客户端使用的IP地址。
因为客户端目前还没有IP地址,所以在这个单播IP发送之前,服务器会使用客户端的MAC地址与之通信,如果MAC地址通信失败,那么服务器会使用广播的方式提供(Offer)数据包 。
第三步:
客户端收到这个DHCP Offer后,会再发出一个DHCP Request给服务器来申请这个Offer中包含的地址。此时客户端还没有正式拿到地址,所以还需要向DHCP服务器申请。
这个DHCP Request数据包的地址如下:
这时客户端的源IP还是0.0.0.0,目的IP还是255.255.255.255
源MAC是客户端的MAC,目的MAC是FFFF.FFFF.FFFF广播包
第四步:
服务器收到客户端的请求后,会发出一个DHCP ACK用来确认这个IP地址可以分配给这个客户端。
客户端收到这个DHCP ACK数据包才算正式拿到了这个IP。
在租约内续租的时候,发现( Discovery )和提供(Offer)数据包就变得没有必要了,只需要完成请求和确认两个步骤就可以
7. Autosar中的以太网协议栈
以下简要说明与以太网相关的Autosar协议栈。
其中LDCOM可以认为类似于COM模块,只是LD表示large data,此外SOAD表示 socket adapter,用于以太网中的socket适配。
当然与DCM相关的底层采用的是DOIP协议。