ARP协议——将IP地址转换为MAC地址
ARP协议——将IP地址转换为MAC地址
ARP学习总结
我们知道计算机中会维护⼀个ARP缓存表,这个表记录着IP地址与MAC地址的映射关系,我们可以通过在电脑的控制台通过arp -a指令查看⼀下我们⾃⼰计算机的ARP缓存表:
那么什么是ARP协议呢?
1. ARP出现原因
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。其作⽤是在以太⽹环境中,数据的传输所依懒的是MAC地址⽽⾮IP地址,⽽将已知IP地址转换为MAC地址的⼯作是由ARP协议来完成的。
在局域⽹中,⽹络中实际传输的是“帧”,帧⾥⾯是有⽬标主机的MAC地址的。在以太⽹中,⼀个主机和另⼀个主机进⾏直接通信,必须要知道⽬标主机的MAC地址。但这个⽬标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将⽬标IP地址转换成⽬标MAC地址的过程。ARP协议的基本功能就是通过⽬标设备的IP地址,查询⽬标设备的MAC地址,以保证通信的顺利进⾏。
2. ARP映射⽅式
2.1. 静态映射
静态映射的意思是要⼿动创建⼀张ARP表,把逻辑(IP)地址和物理地址关联起来。这个ARP表储存在⽹络中的每⼀台机器上。例如,知道其机器的IP地址但不知道其物理地址的机器就可以通过查ARP表出对应的物理地址。这样做有⼀定的局限性,因为物理地址可能发⽣变化:
(1)机器可能更换NIC(⽹络适配器),结果变成⼀个新的物理地址。
(2)在某些局域⽹中,每当计算机加电时,他的物理地址都要改变⼀次。
(3)移动电脑可以从⼀个物理⽹络转移到另⼀个物理⽹络,这样会时物理地址改变。
要避免这些问题出现,必须定期维护更新ARP表,此类⽐较⿇烦⽽且会影响⽹络性能。
2.2. 动态映射
动态映射时,每次只要机器知道另⼀台机器的逻辑(IP)地址,就可以使⽤协议出相对应的物理地址。已经设计出的实现了动态映射协议的有ARP和RARP两种。ARP把逻辑(IP)地址映射为物理地址。RARP把物理地址映射为逻辑(IP)地址。
3. 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. ARP协议报⽂字段抓包解析
4.1. 报⽂格式
硬件类型:16位字段,⽤来定义运⾏ARP的⽹络类型。每个局域⽹基于其类型被指派⼀个整数。例如:以太⽹的类型为1。ARP可⽤在任何物理⽹络上。
协议类型:16位字段,⽤来定义使⽤的协议。例如:对IPv4协议这个字段是0800。ARP可⽤于任何⾼层协议
硬件长度:8位字段,⽤来定义物理地址的长度,以字节为单位。例如:对于以太⽹的值为6。
协议长度:8位字段,⽤来定义逻辑地址的长度,以字节为单位。例如:对于IPv4协议的值为4。
操作码:16位字段,⽤来定义报⽂的类型。已定义的分组类型有两种:ARP请求(1),ARP响应(2)。
源硬件地址:这是⼀个可变长度字段,⽤来定义发送⽅的物理地址。例如:对于以太⽹这个字段的长度是6字节。
源逻辑地址:这是⼀个可变长度字段,⽤来定义发送⽅的逻辑(IP)地址。例如:对于IP协议这个字段的长度是4字节。
⽬的硬件地址:这是⼀个可变长度字段,⽤来定义⽬标的物理地址,例如,对以太⽹来说这个字段位6字节。对于ARP请求报⽂,这个字段为全0,因为发送⽅并不知道⽬标的硬件地址。
如何查看ip地址⽬的逻辑地址:这是⼀个可变长度字段,⽤来定义⽬标的逻辑(IP)地址,对于IPv4协议这个字段的长度为4个字节。
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个字节
出处:blog.csdn/ever_peng/article/details/80008638

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。