ARP学习总结
- ARP出现原因
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。其作用是在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
- ARP映射方式
2.1. 静态映射
静态映射的意思是要手动创建一张ARP表,把逻辑(IP)地址和物理地址关联起来。这个ARP表储存在网络中的每一台机器上。例如,知道其机器的IP地址但不知道其物理地址的机器就可以通过查ARP表找出对应的物理地址。这样做有一定的局限性,因为物理地址可能发生变化:
(1)机器可能更换NIC(网络适配器),结果变成一个新的物理地址。
(2)在某些局域网中,每当计算机加电时,他的物理地址都要改变一次。
(3)移动电脑可以从一个物理网络转移到另一个物理网络,这样会时物理地址改变。
要避免这些问题出现,必须定期维护更新ARP表,此类比较麻烦而且会影响网络性能。
2.2. 动态映射
动态映射时,每次只要机器知道另一台机器的逻辑(IP)地址,就可以使用协议找出相对应的物理地址。已经设计出的实现了动态映射协议的有ARP和RARP两种。ARP把逻辑(IP)地址映射为物理地址。RARP把物理地址映射为逻辑(IP)地址。
- ARP原理及流程
在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。
3.1.ARP请求
任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。(见图1)
3.2.ARP响应
局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。(见图2)
4.2. ARP报文总长度
ARP报文的总长度为64字节。
首先要知道帧的概念 帧是在数据链路层传输的数据格式,比如以太网v2,以太网IEEE802.3和PPP等。
所以Wireshark抓到的帧是包含帧头的,即包含以太网v2的帧头,长14 bytes;
而ARP数据包的长度固定为28 bytes;
帧总长度 = 帧头 + 网络层包头 + 传输层报文头 + 应用数据;
而ARP请求中ARP包已经是最高层,之上没有传输层和应用层,所以总长度为:
帧总长度 = 帧头 + ARP包头 = 14 + 28 = 42 bytes;
而真正 发包的时为了保证以太网帧的最小帧长为64 bytes,会在报文里添加一个padding字段,用来填充数据包大小。
使用wireshark抓包时,抓到的包为60 bytes。比以太网帧的最小帧长扫了4 bytes,原因是因为wireshark抓包时不能抓到数据包最后的CRC字段。
CRC字段是为了校验以太网帧的正确性。在数据包填充完成后,回去通过算法计算一个值放到数据包的CRC字段中。当接受端收到数据包后,会同样使用算法计算一个值,然后和CRC字段的值进行对比,查看是否相同。如果不同则证明数据包被更改,如果相同则证明数据包并未被更改。
4.3. 报文封装
ARP报文直接封装在数据链路帧中,例如,图4中,ARP分组被封装在以太网的帧中。注意,帧中的类型字段指出此帧所携带的数据是ARP报文。
4.4. 报文抓包解析
既然了解了ARP的详细格式,就尝试获取ARP报文
如图5所示,pc1给pc2发送ARP请求,此时使用Wireshark获取ARP抓包数据
当PC1发送的ARP请求报文,以广播报的形式发送到局域网后,当pc2检测到IP地址与自己的IP相同,就会发送给PC1响应报文。
对于ARP响应包来说,源IP,目地IP,源MAC,目地MAC都是知道的
PS:报文中的padding字段是填充数据,为了保证帧最少有64个字节
**
帧格式
**
以太网目的地址:目的主机的硬件地址。目的地址全为1的特殊地址是广播地址。
以太网源地址:源主机的硬件地址。
帧类型:对于ARP协议,该字段为0x0806。对于RARP协议,该字段为0x8035。
硬件类型:表示硬件地址的类型。值为1时表示以太网地址。也就是说ARP协议不仅仅应用于以太网协议,还可以支持别的链路层协议。
协议类型:表示要映射的协议地址类型。值为0x0800时表示IP协议。
硬件地址长度:与硬件类型对应的硬件地址的长度,以字节为单位。如果是以太网,则是6字节(MAC长度)。
协议地址长度:与协议类型对应的协议地址长度,以字节为单位。如果是IP协议,则是4字节(IP地址长度)。
操作类型(op):四中操作类型。ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。
发送端硬件地址:如果是以太网,则是源主机以太网地址,此处和以太网头中的源地址对应。
发送端协议地址:如果是IP协议,则表示源主机的IP地址。
目的端硬件地址:如果是以太网,则是目的以太网地址,和以太网头中的目的地址对应。
目的端协议地址:如果是IP协议,则表示源主机要请求硬件地址的IP地址。
对应ARP请求包来说,目的端的硬件地址字段无须填充,其他字段都需要填充。对于ARP回复包来说,所有字段都需要填充。
APR请求包是广播的,但是ARP应答帧是单播的。
以太网数据报最小长度是60字节(14字节的以太网头,不包含4字节的FCS),ARP数据包长度为42字节(14字节的以太网头和28字节的ARP数据),需要加入填充字符到以太网最小长度要求:60字节。