首页 > 代码库 > ARP协议

ARP协议

物理链路中数据是如何传输的?

在网络层中,数据包是通过IP等协议进行传输的,在链路层中数据是已帧的形式进行传输的,同样帧也有自己的帧格式,帧是通过物理接口的地址来进行传输的。物理接口的地址是已一个6位组的16进制数表示的。

 

IP数据包最终也会被封装成帧在链路层网络中传输,但是网络层上的主机只知道我要到达对端的IP地址是多少,但是IP数据包又会以帧的形式在链路层中被传输,所以只有对端IP地址是无法和对方通讯的,我们还需要知道对端的物理层地址才能真正和对方进行通讯。

 

于是就有了ARP协议,设计ARP的目的就是产生一种IP地址与物理地址(MAC)对应的关系,方便数据在链路层上进行传输,我们可以将这种行为称为地址解析协议?

 

ARP是如何实现这个功能的呢?

第一个需求,问谁?

实现的功能就是问或者叫请求,该问谁呢?

 

例如AB两个人需要通讯,A知道自己的IP地址,MAC地址和BIP地址,因为BMAC地址A不知道,A不可能直接去问B你的地址是多少能告诉我嘛?如果A直接知道B的地址,那也就不需要ARP协议去问了,所以A应该去问谁呢?而且这个谁还必须同时认识AB,他可以把A的消息告诉B,在链路层中的确存在这样一个谁,所有人都会收到发往这个地址的数据帧,那就是物理层广播地址(FF:FF:FF)。

 

第二个需求,请求消息内容?(request)

现在问谁的问题解决了,现在需要解决A要通过广播地址转达给B主机什么消息能让B主机很快的知道是A在找B要他的MAC地址呢?

所以消息里面的内容就一定需要有AIP地址,MAC地址(用于让B能够直接发消息A,不需要再通过广播地址去传话了),然后就是BIP地址、已经空白的BMAC地址(让B知道A是找他,因为B看到了自己的地址,知道这个请求是找他的,而且A还在MAC地址处留空,那样B就知道A需要知道我的MAC地址)了;

 

第三个需求,回复消息的内容?(reply)

B收到了A的消息后,就需要发一个回复消息给A告诉A我的MAC地址是什么样的呢,假设B这个人很懒,他不想写很多字,于是B就直接回复了A一个空信封,上面寄件人是BIP地址,发件地址是BMAC地址,收件人是AIP地址,收件地址是AMAC地址。

 

A收到了B的信以后,就从信中知道了BMAC地址。A还很把B的信息记录到了自己的通讯录中。A还指定了一个时间,如果B多少时间没有在和我一起通讯,我就删除B的联系方式,我们称这个时间为(老化时间)。

 

现在A可以和B通讯了,但是B没有记录A的通讯地址,所以同样的操作又在B这里进行了一遍。

 

Note(以上过程只在AB属于同一个局域网内发生,当AB属于两个地区的时候,A就会去解析自己的网关的物理地址,让网关帮助A将信息传送给B)

 

ARP数据包格式

wKiom1R2myzAlASfAACayKNn5U4425.jpg

硬件类型:让ARP协议知道底层的物理类型是以太网、帧中继、还是其他链路

协议类型:让ARP协议知道对端的上层协议是IP还是其他协议,IP是(0x0800)

硬件地址长度:指定了数据链路层地址长度,MAC6

协议地址长度:指定了协议地址长度,IP4

操作:定义了操作的类型,request1reply2

 

代理ARP

代理ARP的作用是让一台中间设备充当中间人的角色,让处在不同网段的两个主机在没有设置网关的前提下,可以通过这个中间人进行互相访问,起前提是中间人要知道如何去往目的网络,原理是中间人收到ARP请求后,将自己的物理地址告诉需要通信的主机,让主机认为通过中间人可以到达目标网络,通信人并不知道中间人的存在。

 

免费ARP

免费ARP是指主机以自己的IP地址发送ARP请求,作用有3种:

一是为了检测网络上有没有其他主机在和自己用一个IP地址,地址冲突检测

二是为了让其他设备刷新自己的ARP维护表,刷新其他接受主机的ARP维护表

三是在一个配置了网关冗余协议的网络环境中,如果Master路由器失效了,从路由器成为主路由器让网段内主机更新虚拟IP到物理的映射为自己。

 

反向ARP:通过MAC去找自己的IP。例如无盘工作站,系统不再本地,需要通过MAC地址去DHCP服务器请求自己的IP地址。

 

 

 

 

 

 


本文出自 “八块排骨加油站” 博客,谢绝转载!

ARP协议