华为网络学习笔记(二) ARP协议

为什么需要ARP协议?

当网络设备有数据要发送给另一台网络设备是,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路层进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP协议来实现的。
2、在发送一个报文的时候,例如A和B之间进行通信,数据要发送出去先要进行数据包的封装,从应用层向下层层封装,到了网络层会加上一个网络层的报文头,这个报文头中包含了源IP和目的IP,继续向下封装到了数据链路层,在二层又封装了一个数据帧的头部,其中包括源MAC地址和目的MAC地址,A和B想要通信,A就要知道目的IP地址和目的MAC地址(就是B的IP地址和MAC地址),但我们一般只知道对方的IP地址,不知道对方的MAC地址,怎么获取对方的MAC地址,这里就需要用到ARP协议来实现数据链路层的可达性。

一、ARP协议

华为网络学习笔记(二) ARP协议_第1张图片
在发送一个报文的时候,例如A和B之间进行通信,数据要发送出去先要进行数据包的封装,从应用层向下层层封装,到了网络层会加上一个网络层的报文头,这个报文头中包含了源IP和目的IP,继续向下封装到了数据链路层,在二层又封装了一个数据帧的头部,其中包括源MAC地址和目的MAC地址,A和B想要通信,A就要知道目的IP地址和目的MAC地址(就是B的IP地址和MAC地址),但我们一般只知道对方的IP地址,不知道对方的MAC地址,怎么获取对方的MAC地址,这里就需要用到ARP协议来实现数据链路层的可达性。
定义:地址解析协议即ARP协议,是根据IP地址获取物理地址的一个TCP/IP协议

二、ARP数据包格式

华为网络学习笔记(二) ARP协议_第2张图片
网络设备通过ARP报文来发现目的MAC地址。ARP报文中包含以下字段:
Hardware Type表示硬件地址类型,一般为以太网;
Protocol Type表示三层协议地址类型,一般为IP;
Hardware LengthProtocol Length为MAC地址和IP地址的长度,单位是字节;
Operation Code指定了ARP报文的类型,包括ARP Request(请求报文)和ARP Reply(回复报文);
Source Hardware Address指的是发送ARP报文的设备MAC地址;
Source Protocol Address指的是发送ARP报文的设备IP地址;
Destination Hardware Address指的是接收者MAC地址,在ARP Request报文中,该字段值为0;
Destination Protocol Address指的是接收者的IP地址。

三、ARP工作过程

通过ARP协议,网络设备可以建立目标IP地址和MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后,还要判断目的MAC地址是否已知。
ARP协议工作过程:
华为网络学习笔记(二) ARP协议_第3张图片
主机10.1.1.1在局域网内发送ARP广播请求IP为10.1.1.2的主机的MAC地址。
华为网络学习笔记(二) ARP协议_第4张图片
所有局域网内的主机都收到10.1.1.1的ARP广播并比对自己的IP地址,只有10.1.1.2比对成功并单播回复,并在本机ARP表上缓存一个10.1.1.1的MAC地址。
华为网络学习笔记(二) ARP协议_第5张图片
主机10.1.1.1将10.1.1.2的MAC地址保存到缓存中,之后两个主机就可以进行正常通信了。

四、ARP缓存

华为网络学习笔记(二) ARP协议_第6张图片
网络设备一般都有一个ARP缓存表(ARP Cache),ARP缓存表用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送ARP Request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据风中,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。
如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。
在Windows操作系统中在命令提示符界面输入arp -a查询arp表中的所有项目。
华为网络学习笔记(二) ARP协议_第7张图片

五、ARP请求、响应、缓存

华为网络学习笔记(二) ARP协议_第8张图片
本例中,主机A的ARP缓存表中不存在主机C的MAC地址,所以主机A会发送ARP Request来获取目的MAC地址。ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机A的MAC地址。此时,由于主机A不知道主机C的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。ARP Request报文中包含源IP地址、目的IP地址、源MAC地址、目的MAC地址,其中目的MAC地址的值为0。ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文。网关将会阻止该报文发送到其他网络上。主机A的信息会缓存在主机B和主机C的ARP缓存表中。
主机B:
在这里插入图片描述
主机C:
在这里插入图片描述
华为网络学习笔记(二) ARP协议_第9张图片
所有的主机接收到该ARP Request报文后,都会检查它的目的协议地址字段与自身的IP地址是否匹配。如果不匹配,则该主机将不会响应该ARP Request报文。如果匹配,则该主机会将ARP报文中的源MAC地址和源IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。
主机C会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为Reply。ARP Reply报文通过单播传送。
主机A收到ARP Reply以后,会检查ARP报文中目的MAC地址是否与自己的MAC匹配。如果匹配,ARP报文中的源MAC地址和源IP地址会被记录到主机A的ARP缓存表中。
主机A:
在这里插入图片描述

六、ARP代理

华为网络学习笔记(二) ARP协议_第10张图片
主机A需要与主机B通信时,目的IP地址与本机的IP地址在同一个网段,所以A将会以广播形式发送ARP Request报文,请求主机B的MAC地址。但是,广播报文无法被路由器转发,所以主机B无法收到主机A的ARP请求报文,当然也就无法应答。
在路由器上启用代理ARP功能,就可以解决这个问题。启用代理ARP后,路由器收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP Request。主机A收到ARP Reply后,将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。

七、免费ARP

华为网络学习笔记(二) ARP协议_第11张图片
主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。
主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

你可能感兴趣的:(网络基础)