概述
ARP简介
IP地址只是一个逻辑地址,要想在链路层上传播数据,需要知道MAC物理地址。而IP数据包中只有IP地址,所以就需要一个协议来通过IP地址来获取对应的MAC地址,这个协议就是ARP协议。
ARP原理
ARP报文解析
1、 ARP是工作在链路层的,ARP请求发送一个帧。
帧分为两部分:帧头部、ARP请求数据。
上图是帧的结构:
1、 帧的头部的目的MAC地址为FFFFFFFFFFFF,表示这是一个广播帧,会转发给网络中的所有主机。
2、 帧的头部的帧类型有以下选择:
1、 0800:运载的是IP数据包
2、 0806:运载的是ARP请求包或者应答包
3、 0835:运载的是RARP请求包或者应答包
3、 ARP请求数据中的关键字段
3.1、 OP(操作类型):1表示请求,2表示应答。
3.2、 发送端MAC: 发送端的MAC地址
3.3、 发送端IP:发送端的IP地址
3.4、 目标IP:想要获取MAC对应的IP地址
3.5、 目标MAC:想要获得的MAC,如果是请求报文,就为空,如果是应答报文,是ARP发送方的MAC地址。
ARP过程解析
两个主机 处在同一网络
通过目标ip地址和当前网络掩码相与&,如果和网络地址相同,说明两个主机处在同一个网络。
假设主机A,MAC地址为mac1,IP地址为ip1,想要请求主机B的MAC地址mac2,主机B的IP地址为ip2。
1、主机A首先查看本地ARP缓存表中是否存在ip2的MAC缓存,如果存在缓存直接返回缓存中的MAC地址。
2、如果不存在mac缓存,主机A就会发送ARP请求,ARP请求就是一个特殊的帧。
ARP对应的帧头部中的源MAC地址为mac1,目标MAC地址为FFFFFFFFFFFF,帧类型为0806。
帧中的ARP信息中的OP为1表示请求,发送端MAC为mac1,发送端IP为ip1,目标IP为ip2,目标mac为空。
将帧发送到交换机,交换机会将帧广播到局域网中的所有主机,当主机收到帧的时候,发现是ARP请求,就会拿出其中的ARP信息,查看目标IP是否和自己一致,如果不一致,就不做处理。
如果一致,将ARP信息中的发送端IP和发送端MAC加入主机B的ARP缓存中。
然后新建一个帧,就将自己的mac地址mac2和mac1分别填入到帧头部中的源MAC和目标MAC中,然后构造ARP信息,将自己的IP地址ip2和mac地址mac2填入到发送端IP和发送端MAC,将发送ARP请求的主机的ip1和mac1填入到接收IP和接收MAC中。
然后将帧发送,因为在同一个局域网,交换机会直接将帧发送到主机A中,主机A发现是一个ARP帧,并且是应答,会将对应的ip1和mac1加入到缓存中。
两个主机不在同一网络
ARP请求不会跨网段。
当ARP请求不同网段的IP地址的MAC地址的时候。
如果网关路由器开启了ARP代理的话,就会将自己的MAC地址返回。
如果网关路由器没有开启ARP代理的话,就不做任何操作,主机不会得到任何的回应。
ARP请求不同网段的MAC地址没有实际用处,属于废物操作。 因为数据包的传播是靠下一跳的MAC地址来传递的,主机只需要获取下一跳的MAC地址,也就是网关的MAC地址就可以了。网关和主机处在同一网段,是一个局域网,通过交换机二层设备就可以获取到对应的MAC地址。
总结
ARP协议是一个运行在二层设备,也就是数据链路层上的协议,不会牵扯到路由转发。
ARP分为两种情况:
1、同一网段中
同一网段,主机直接通过广播帧发送ARP请求就可以了,对应的主机收到后发送对应的ARP应答到源主机,就这样就获得了对应的MAC地址。
2、不同网段中
ARP不会跨网段,当ARP请求不同网段的IP地址的MAC地址的时候。如果网关路由器开启了ARP代理的话,就会将自己的MAC地址返回。如果网关路由器没有开启ARP代理的话,就不做任何操作,主机不会得到任何的回应。
最后
以上就是无聊指甲油为你收集整理的ARP详解的全部内容,希望文章能够帮你解决ARP详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复