“交换机”,智驾域的“红娘”
来源 | 十一号组织
一直以来最大的遗憾是没有入“码农”的坑,这决定了职业生涯中可能要干除了写代码以外的任何工作。前脚刚完成对潜在客户的自动驾驶启蒙任务,后脚就要梳理自动驾驶冗余架构下针对“交换机”的选型需求。
“交换机”串联起智驾域内的传感器,域控制器和黑匣子等零件,提供网络数据转发、虚拟网络划分、链路聚合等功能。“交换机”在各家自动驾驶公司存在的形态不尽相同,有用一个单独的零件实现这些功能,也有将其集成在域管理器或域控制器之中。本文后续统一用加了双引号的“交换机”指代具有这类功能的零件。自动驾驶圈黑话第十三期,笔者就将吐血梳理出来的智驾域冗余架构下“交换机”所需支持的典型功能分享给各位老友。
冗余架构为什么需要“交换机”
下图展示了一种智驾域典型的冗余架构逻辑框图,冗余架构要支持感知冗余,计算冗余、数据备份。感知冗余可以通过激光雷达、感知相机、毫米波雷达、GNSS等多传感器深度融合实现多层冗余感知,计算冗余通过备份的智驾域控制器来实现冗余计算、数据备份通过黑匣子同步完成关键感知数据和故障数据的存储。
传感器的感知数据如何同步、同等的传输给两个智驾域控制器和一个黑匣子?多个传感器与两个智驾域控制器之间如何进行精确时间同步?整个智驾域如何保证带宽资源的合理利用、整个网络的数据安全?“交换机”便在这样的需求背景下应运而生,成为替智驾域青年男女牵线的“红娘”。
网络分层模型
“交换机”虽是本文的主角,但作为一种网络通信设备,如果不介绍它赖以生存的“母亲河”-网络分层模型,总感觉有越级汇报的嫌疑。OSI(Open System Interconnection,开放系统互联)参考模型是ISO(International Organization for Standardization,国际标准化组织)在1978年提出的一种概念模型,用于指导复杂通信系统设计、解决网络之间的兼容性问题。
OSI参考模型将通信系统分为 七层,每一层边界清晰,实现特定的功能,同时提供标准化接口与上下层进行通信。OSI七层模型从下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。下面四层完成数据传输服务,上面三层面向用户。
物理层:确保原始的比特流数据可转换为适合在物理媒介上传输的电子信号;
数据链路层:数据转换为比特流;
网络层:好比一个十字路口,前方有一路向西的取经之路,有一路向东的落草为寇之路,而网络层主要就是决定数据包要走哪条路;
传输层:负责决定报文是通过复杂的流程可靠的传输给对方,还是通过简单的流程在不保证可靠的尽快的传输给对方;
会话层:负责决定网络设备间何时建立连接、保持多久、何时断开连接等的通信建立、管理和终止工作;
表示层:负责数据格式的转换、如编解码、加解密等;
应用层:负责应用程序间通信的细节。
OSI参考模型的过于完美、完善,宛如高冷女神不可一世,吓退了无数寒门子弟。而此时另外一种分层模型在广大寒门子弟间已经小范围流行,比OSI参考模型更加简洁、更加高效,更加开放,也得到了越来越多达官显贵的认可,这便是小家碧玉型美女TCP/IP(Transfer Control Protocol/Internet Protocol,传输控制协议/网际协议)模型。
TCP/IP模型将网络划分为四个层次或五个层次,和OSI参考模型各层的对照关系如下图所示,每一层实现的功能和OSI参考模型中对应一层或几层的功能相似。每层分别定义不同的协议用于实现特定的功能,而这一组协议的集合被称为TCP/IP协议栈。名字中的TCP取自传输层举足轻重的协议TCP,IP取自网络层位高权重的协议IP。TCP/IP协议栈已经成为网络通信的核心协议。
而本文介绍的“交换机”,就是一种工作在数据链路层,也就是常说的二层交换机。目前也出现了三层交换机,通过在二层交换机之上引入三层转发技术,解决了局域网中虚拟网络划分之后,网段中子网必须依赖路由器进行管理的局面。但本文重点介绍二层交换机的典型功能,涉及到的三层转发技术仅就一笔带过。
“交换机”的工作原理
交换机是一种用于电(光)信号转发的二层网络设备,可为接入交换机的任意两个网络节点提供独享的电(光)信号通路。交换机基于MAC(Media Access Control,介质访问识别)地址识别,完成以太网数据帧的转发。MAC地址是写入到网络硬件内部的地址,具有唯一性和不可重复性。
交换机首先学习每一端口相连设备的MAC地址,并将端口和MAC地址的映射关系存放到交换机缓存的MAC地址表中。下次收到要转发的数据帧,首先检查该数据帧发往的目的MAC地址是否在MAC地址表中,若在,则将数据帧发往相应的端口,若不在,则向所有端口转发。
交换机的数据转发主要分为两种方式:存储转发和直通式。在存储转发中,交换机首先接收整个数据帧,并进行错误检验,如果没有错误才会将数据帧发往目的MAC地址对应的端口。在这种方式中,数据帧转发时延随长度的不同而变化。在直通式中,交换机不进行错误校验,只要识别出目的MAC地址对应的端口,即开始转发该帧。在这种方式中,数据帧转发时延是一定的。
“交换机”典型功能简介
一、组播
网络中信息传输主要包含三种方式:单播、广播和组播。单播是一个网络节点对另一个网络节点的一对一的数据传输方式,广播是一个网络节点对其它所有网络节点的一对所有(不管其它网络节点是否需要这个数据)的数据传输方式,而组播是一个网络节点对多个网络节点的一对部分(有网络数据需求的节点)的数据传输方式。
自动驾驶冗余架构下,两个智驾域控制器需要同时获得同一传感器的感知数据来做计算冗余,一个黑匣子也需要同时获得关键场景感知数据和故障数据来做数据备份。如果采用单播的方式,同一传感器数据就没法同时发送给两个智驾域控制器和一个黑匣子,计算冗余无从谈起,关键场景数据提取也无从谈起。如果采用广播的模式,交换机会将同一传感器数据复制到交换机所有的网络端口,这不仅对交换机CPU的处理能力提出了极大挑战,还将浪费不需要这些数据网络链路的带宽资源,严重情况还可能发生数据泄露导致的自动驾驶网络安全问题。
将同一传感器数据有选择的发送给一组接收方,便是组播的用武之地。组播网络里包含组播源、路由器、组播组、组播组成员。组播源为网络信息的发送者;路由器负责三层组播功能;组播组为通过组播地址标识的一组网络信息接收设备;组播组成员为组播组内最终的网络信息接收设备。
通常,路由器工作在网络层,相应的组播被称为“三层组播”,常用的三层组播协议有IGMP、PIM、MSDP、MBGP等。
二、IGMP Snooping
在智驾域冗余架构内,智驾域控制器、传感器、黑匣子是通过二层交换机相连,二层交换机无法处理三层信息,没有特定协议加持下,无法知道收到的数据帧的目的MAC地址是一个组播地址。在查询内部映射表没有找到目的MAC地址对应的端口时,二层交换机将这条数据帧通过广播方式发送出去,不仅浪费网络带宽,还会影响网络信息的安全性。IGMP Snooping协议的诞生,解决的就是如何在二层交换机中管理和控制组播组。
IGMP Snooping(InternetGroup Management Protocol Snooping,互联网组管理协议窥探),一种运行在二层的组播协议。当二层交换机收到上游三层设备传递的IGMP报文后,IGMP Snooping分析IGMP报文所带的信息(报文类型、组播组地址、接收报文的接口等),并根据这些信息在二层建立和维护组播表,同时根据这个组播表转发组播报文,不仅可以降低带宽消耗,避免二层网络组播泛滥,还能提高网络信息安全性,是搭建安全网络的理想解决方案。
三、VLAN
理想情况下,智驾域“交换机”只通过整车域“交换机”与其它域通信,但在现实架构设计中,从延迟、安全等角度,智驾域“交换机”可能还会直连座舱域“交换机”、底盘域“交换机”等。此时,任何一域的广播帧将被所有域交换机收到。
同时基于TCP/IP协议栈通信时,本身就存在一类管理类广播帧。包括建立IP地址与MAC地址映射关系的ARP协议;用于自动设定IP地址的DHCP协议;RIP路由协议等。
本来某一域的广播帧,现在被全域收到。一方面广播帧消耗了网络整体的带宽;另一方面广播帧消耗了“交换机”中CPU的计算资源;更为危险的是,关键的数据被广播到全域,增加了数据被非法获取的可能性,网络攻击的安全性。因此,如何合理地划分广播域,便显得尤为重要。
VLAN(VirtualLocal Area Network,虚拟局域网),便是一种将物理LAN在逻辑上划分为多个广播域的通讯技术。每个VLAN内的主机间可以直接通信,不同VLAN间主机不能直接互通,这样广播报文就被限制在一个VLAN内。
目前常用的二层“交换机”VLAN划分方式有三种,基于端口划分,基于MAC地址划分和基于组播VLAN划分。
在基于端口划分方法中,通过明确指定交换机每个端口属于哪个VLAN,操作比较简单。但是当主机较多时,指定工作将会变得繁琐无味。且在主机变更所连交换机端口的时候,都需要同时改变交换机端口所属的VLAN,这显然不咋适合需要频繁改变拓扑结构的网络。
在基于MAC地址划分方法中,通过检查并记录交换机端口所连接的主机的MAC地址来决定端口所属的 VALN。这样无论主机接在交换机的哪个端口,交换机都可以正确将其识别为指定的VLAN,不需要重新配置。此方法在交换机初始化时需要对所有主机进行配置,当主机数量庞大时,会影响交换机的执行效率。
在传统的组播点播方式下,当属于不同VLAN的主机同时点播同一组播组时,三层设备需要把组播数据在每个主机VLAN内都复制一份发送给交换机。这样既造成了带宽的浪费,也给三层设备增加了额外的负担。在二层设备上配置了组播VLAN后,三层设备只需把组播数据在组播VLAN内复制一份发送给二层设备,而不必在每个用户VLAN内都复制一份,从而节省了网络带宽,也减轻了三层设备的负担。
四、链路聚合
在交换机和智驾域控制器相连的主干以太网中,所有感知数据都将汇聚于此。如何提供足够的带宽,同时还能提供备份机制?除了土豪万家粗暴的加钱升级硬件(千兆不够万兆上)的方法,还有普通万家更常用的链路聚合技术。
链路聚合是指将多条以太网物理链路捆绑在一起定义为一条逻辑链路。在发送数据帧时,交换机会根据内部的端口负荷分担策略决定数据帧从哪条物理链路发送,实现增加链路带宽的目的。同时在交换机检测到其中一条物理链路发生故障时,就会停止数据帧在此物理链路发送,并将数据帧从剩下的物理链路中重新发送,实现动态备份的目的。
链路聚合主要分为静态聚合和动态聚合两种。在静态聚合中,聚合链路的建立,新的物理链路的加入等均由手工配置,没有链路聚合控制协议的参与。同时静态模式中所有捆绑的链路一般都是活动链路,参与数据转发。如果某条活动链路故障,链路聚合组自动在剩余的活动链路中分担流量。
动态链路聚合主要是指使用LACP(Link AggregationControl Protocol,链路聚合控制协议)实现链路动态聚合与解聚合的协议。LACP负责确定双方承担业务流量的链路。此外,当聚合条件发生变化时,如某个链路发生故障,LACP模式会自动调整聚合组中的链路,组内其他可用成员链路接替故障链路维持负载平衡。
对应到智驾域,交换机和智驾域控制器通过两条千兆以太网相连。交换机将这两条物理链路配置为链路聚合。一来可以合理分配感知数据的发送链路,实现一千兆变二千兆的效果。同时在某一条物理链路出现故障时,由另外一条承担全部数据传输工作,从而有效提高链路的可靠性。
五、风暴抑制
当某一条网络物理链路上充斥着大量数据帧时,并占用大量网络带宽,造成网络拥塞,降低网络性能直至瘫痪的现象称为网络风暴。而网络硬件设备无需增加、网络硬件出现问题、网络病毒攻击、发生网络环路等,均会导致网络风暴。广播、组播、单播过程均会出现网络风暴现象
风暴抑制技术便是解决当网络中存在大量的广播、多播、组播、单播(包含未知名单播)数据帧时导致的网络变慢、数据传输超时和数据传输拥塞大量丢包等问题。
风暴抑制多采用基于端口速率百分比的方式,当端口收到数据帧累计到预定门限值时,端口将自动丢弃收到的数据帧。当未启用该功能或数据帧累计到门限时,数据帧将被正常广播到交换机的其他端口。
六、时间同步
交换机作为智驾域重要的边界时钟节点,不仅担负智驾域精确的时间同步功能,还须承担在主时钟丢失,系统时间可以统领域内小弟的重任。根据整个智驾域对时间同步精度的要求可选用PTP或gPTP,这两种同步方式原理,前面分享中均有介绍,感兴趣可点链接前往《时间同步,自动驾驶里的花好月圆 》和《gPTP,自动驾驶时间同步里的“有趣灵魂” 》。
小结
好的“红娘”,可以成就一段美好的姻缘,在自动驾驶从算法优化逐步过渡到系统优化的阶段,“交换机”一类的辅助技能将会变得越来越重要。