点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
开发以太网的小伙伴,对ARP(Address Resolution Protocol,地址解析协议)已经见怪不怪。在控制器刚启动阶段,总线上会看到一些A R P报文。那么,问题来了,为什么在控制器启动阶段,会有ARP报文呢?ARP报文到底扮演着什么样的角色呢?本文,聊一聊ARP。
我们知道,以太网是点对点(Point-to-Point) 的通信方式。如果两个以太网节点建立通信,发送节点首先需要知道和谁通信。发送节点如何知道和谁通信呢?答: MAC地址(Media Access Control Address)。MAC地址也称为网卡,每一个网卡分配唯一MAC地址 (长度为6 Bytes)。所以,知道目标节点MAC地址,才能知道信息要发给谁。而在整车的网络拓扑中,节点之间的数据交互由交换机(Switch)进行二层转发,示意如下:
(一)ARP帧格式
不管何种总线,为了确保信息有效交互,会根据软、硬件层级,设计不同的通信协议。本文关注链路层的以太网帧和网络层的ARP协议,ARP报文封装在以太网帧的数据段传输,如下所示:
硬件类型(2 Byte):表示 硬件地址 类型,eg:以太网为1
协议类型(2 Byte) :表示 上层协议 类型,eg:IPv4为0x0800
硬件地址长度(1 Byte) :表示 硬件地址长度 ,eg:以太网为6
协议地址长度(1 Byte) :表示 协议地址长度 ,eg:IPv4为4
操作码(Option,2 Byte ) : 表示ARP请求或响应的操作类型,eg:请求(Request)为1,响应(Replay)为2 源MAC地址(6 Byte ) :发送ARP请求的主机的MAC地址 源IP地址(4 Byte ) : 发送ARP请求的主机的IP地址 目标MAC地 址(6 Byte ) : 目标主机的MAC地址(在ARP请求中通常为空,即:全0x00) 通过ARP报文格式可以看出,ARP记录着IP与MAC的对应关系 ,即:通过IP关联的MAC地址,最终找到通信的目标节点。而在TCP/IP的分层结构中,ARP属于网络层,因此,网络层的源节点实体、目标节点实体之间通过IP地址识别彼此。但是,ARP报文封装在以太网帧中,依赖以太网链路层传输 ,而以太网链路层的寻址方式为MAC地址 ,因此,需要把IP地址转换成MAC地址才能将上层待发送的信息发送给目标节点,所以,这就是ARP出现的意义。 首先 ,同一局域网内的每个以太网节点,网络层会分配一个或者多个IP,数据链路层固化一个唯一MAC地址,由<MAC,IP>标识发送节点,如下所示:
其次 ,通过ARP报文获取目标节点的MAC,形成目标节点的<MAC,IP>对,进而,每个以太网节点形成一个ARP Table。有了ARP Table以后,发送方在发送数据之前,就可以通过目标节点的IP地址,查找目标节点的MAC地址,进而发送数据。每个节点的ARP Table示意如下:
ARP Table形成以后,解决了发送节点知道发送给谁的问题,但是,还有一个问题需要解决:交换机(Switch)如何知道信息转发给谁呢?答 :路由表(Route Table),示意如下:
当交换机某个端口(Port #n)收到以太网帧以后,会通过目标节点的MAC地址查找Route Table,如果找到目标节点端口号,则将信息转发出去,实现路由的目的。同时,也会检查发送节点的MAC地址是否已经缓存,如果Route Table中没有缓存发送节点的MAC,则将发送节点的MAC地址和入口Port缓存到Route Table。 (一)
控制器初始启动阶段,ARP缓存表为空,即:ARP Table没有目标节点的<MAC,IP>信息。此时,发送节点发送ARP报文,请求目标节点的MAC地址。注意:目标节点的IP地址已知。请求示意如下:
发送节点(MCU2)发送的ARP报文信息如下所示:
解析:
发送节点发送ARP报文时,会包含发送节点的IP(192.168.0.2)、发送节点MAC(02:00:00:00:00:02)、目标节点的IP(192.168.0.1);
由于不知道目标节点的MAC,所以,在ARP报文中,目标节点的MAC地址(上图中的Target Protocol Address)用全0x00表示;
由于发送节点不知道目标节点在哪个位置,所以,发送节点发送ARP请求时,使用广播 的方式发送,即:Destination为全0xFF。
(二)
当交换机收到MCU2的ARP请求报文以后,发现:路由表中找不到目标节点的Port(初始阶段为空),于是,交换机向所有端口广播ARP报文(不包含接收端口),同时,缓存MCU2的MAC2和Port2,如下所示:
(三)
当目标节点(MCU1)收到ARP请求报文以后,发现MAC地址与自身匹配,则接收该ARP报文,同时将发送节点的MAC2缓存下来。MCU1之后给出ARP响应,由于知道了发送节点的MAC地址,所以,MCU1响应ARP报文时,单播 发送ARP报文。当交换机收到MCU1的ARP响应以后,发现目标节点是MCU2,而且MCU2的MAC2已经关联Port2,则直接将ARP报文发送给MCU2,同时,交换机缓存<MAC1,Port1>。当MCU1接收到MCU2的ARP响应以后,也会缓存<MAC 1,IP 1 >。之后,MCU1和MCU2即可正常通信,示意如下:
提示 :非目标节点收到ARP报文以后,直接丢弃。
响应节点(MCU1 ) 发送的ARP报文信息如下所示:
谈思实验室AutoSec智能汽车安全攻防实训课程,11月,上海
文章来源: http://mp.weixin.qq.com/s?__biz=MzIzOTc2OTAxMg==&mid=2247529092&idx=2&sn=69373cac0f866c2543b45b3542be8012&chksm=e927365fde50bf49ecbbd967a75a26e79e620db52fe7c0fea09106b1f3f19d90a60c57b540da&scene=0&xtrack=1#rd 如有侵权请联系:admin#unsafe.sh