车辆内部的以太网网络是一个相对封闭的环境,没有因特网那么复杂。由于车辆内部的通信参与者都是固定不变的,所以IP地址和Port都是可以提前的,这样就免去了使用DHCP协议去动态分配地址的开销。同时,整车网络内的虚拟子网也是预先划分好的。
车载以太网网络内部的几种角色:
1.Switch(交换机)
在某个VLAN中利用层2地址(MAC地址)转发以太网帧
2.Router(路由器)
利用层3地址(IP地址)在VLAN之间转发以太网帧
3.ECU 节点(不具备转发功能的ECU)
ECU节点需要检查自己收到的以太网帧是否合法,主要从两个角度进行检查,分别是通信矩阵的定义和预先定义的通信协议。
为了避免大量不相关信息在车载以太网网络内到处转发,通常我们可以使用VLAN将整个网络根据功能域划分为各个虚拟子网,比如娱乐系统、驾驶辅助系统、舒适系统等。如果遇到需要跨VLAN传播的情况,就要利用上面提到的Router这个角色。关于VLAN的信息可以参考IEEE 802.1Q。
接下来将以一张通信协议栈的图阐述设计车载以太网防火墙时要考虑哪些方面。这张图展示了车载以太网通信协议栈用到的各层协议。本文以IPv6为例说明。
车载以太网通信协议栈用到的各层协议(以IPv6为例)
Ethernet(层2):由于VLAN是预先划分好并写在通信矩阵里的,所以每个ECU只应该接收属于本VLAN的层2帧。另外ECU还要检查收到的以太网帧的MAC地址自己是否已经学习过,还要检查层2报头中的Ethernet Type字段,比如如果车辆预先定义要求使用VLAN,那么Ethernet Type就必须是0x86DD(代表上层是IPv6).
IPv6(层3):由于在车载网络内以太网帧的源IP和目的IP通常也是预先写在通信矩阵里,所以每个ECU只应该接收在通信矩阵中定义的属于自己的数据包。在这一层次检查的对象就是源IP和目的IP。另外还要检查目标IP地址与层2目标MAC地址之间的关系是否正确。
PTP(层3):PTP协议是用来在各个ECU之间进行时间同步的。对于它来说,要检查层2的Ethernet Type是否为0x88F7。
ICMPv6(IPv6的控制协议):ICMPv6报文中没有用户自定义的内容,所以需要检查的只是ICMPv6协议中定义的这几个字段,通常这些工作都由集成在系统中的TCP/IP自动完成了。
TCP和UDP(层4):由于在车载网络内以太网帧的源port和目的Port通常也是预先写在通信矩阵里,所以每个ECU只接收属于自己的数据包。
DoIP(应用层):由于每个OEM可能定义ISO13400规定之外的自己的Payload Type的,所以这个字段要进行检查。另外还要检查Protocol Version。
PDU(应用层):根据Autosar的规定,会有多个PDU复用一个以太网帧中,为了区别PDU,每个PDU都要有自己的PDU-ID,而这些内容也是在通信矩阵中预先定义的。ECU只能接收定义的PDU-ID。
防火墙的实现手段:
1.将各种配置信息直接写死在软件中。
2.将配置信息做成一个配置文件或者参数文件,写到ECU中。
另外,为了更好地检查和监测以太网防火墙的工作情况,还可以为防火墙设计一些诊断的测量值,比如在层2、3、4因各种原因过滤掉的、成功接收的、成功发送的数据包。
相关文章