目录
一、概述
ARP(Address Resolution Protocol)地址解析协议是工作在网络层与数据链路层之间也就是三层与二层之间所以通常我们也会称呼ARP为2.5层的协议。
那什么时候需要使用到这个协议呢?
我们在网络中需要将某一个数据发送给对方也就是对端设备时,必须先要知道对方的网络地址也就是IP地址。
但是只知道IP地址的话我们的数据还无法封装成帧进行发送,ARP的数据帧类型为以太2帧(这个帧结构可以看上期交换机的工作原理中有提及到),我们知道以太2帧中有源目MAC所以发送的数据帧中就必须得携带目的MAC才能够从源发往目的。
所以我们在发送数据时需要先知道对方的MAC地址,这时我们就需要使用ARP通过目的IP来获取目的MAC。
二、ARP的报文格式
Hardware Type(硬件地址类型) | 表示硬件地址类型,一般都为MAC地址,常见值为1,表示以太网。 |
Protocol Type(协议类型) | 表示所使用的三层协议类型,IP的值为0x0800 |
Hardware Address Length(硬件地址长度) | 表示MAC地址的长度,单位是字节 |
Protocol Address Length(协议地址长度) | 标识IP地址的长度,单位是字节 |
Operation Code(操作码) | 指定了ARP报文类型,例如:ARP Request请求报文为1,ARP Reply应答报文为2。 |
Sender Hardware Address(发送方的源MAC地址) | 指发送方的源MAC地址 |
Sender Protocol Address(发送方的协议地址) | 指发送方的源IP地址 |
Target Hardware Address(接收方的目的MAC地址) | 指目的MAC的地址,ARP请求报文时有些设备为空,有些设备为全F |
Target Protocol Address(接收方的协议地址) | 指目的的协议地址(IP地址) |
三、ARP的报文类型
ARP请求报文ARP request
当我们需要去访问某些节点或者某些服务器时,但只有目的IP没有目的MAC无法封装二层数据帧时,ARP会发送一个request请求报文去请求该IP的MAC,该报文是一个广播报文。
ARP响应报文ARP reply
当我们收到一个ARP请求报文拆包发现里面需要请求的目的MAC的IP是自己时,接收设备会回一个ARP reply响应报文该报文是一个单播报文。
接下来我们用一个小实验来抓一下这两个报文,加深我们对这两个报文的理解。
拓扑
接下来我们使用PC1发送ping报文去访问我们的PC2然后我们使用抓包软件来看看ARP报文是如何来获取对端的MAC地址的
连接PC1的1号端口
连接PC2的2号端口
我们通过抓包软件发现PC1发出的ARP的reques中的字段为
Sender MAC address(请求方的MAC) | 54:89:98:17:43:24 |
Sender IP address(请求方的IP) | 192.168.1.1 |
Target MAC address(接收方的MAC) | FF:FF:FF:FF:FF:FF |
Target IP address(请求方的IP) | 192.168.1.2 |
因为这是一个广播报文所以交换机会做泛洪处理,从其他端口转发出去,当PC2收到这个广播报文时拆包发现里面ARP请求的IP是自己,它就会回ARP的响应报文。
我们通过抓包软件发现PC2发出的ARP reply中的字段为
Sender Mac address(响应方的MAC) | 54:89:98:3d:26:4b |
Sender IP address(响应方的IP) | 192.168.1.2 |
Target MAC address(接收方的MAC) | 54:89:98:17:43:24 |
Target IP address | 192.168.1.1 |
我们看到PC2把自己的MAC地址填进了源MAC,目的IP为请求方的IP,交换机收到这个单播报文后会从相应的报文转发出去,当PC1收到这个报文后他会把里面的源MAC和源IP的映射关系记录到自己的ARP表中。
那我们接下来就来讲讲什么是ARP表
四、ARP表
无论主机还是交换机都会有一个用来缓存一个网段的IP和MAC的ARP映射表用于数据帧的转发,设备通过ARP获取到目的MAC之后,将会在自己的ARP映射表中增加IP地址与MAC地址的映射关系。
我们主机设备在发送数据前会先查找ARP缓存表,如果有对应的MAC则不需要发送ARP可以直接封装转发,如果没有则需要发送ARP的request请求报文去请求对方的MAC。
注:如果查找ARP缓存表时发现目标IP在其他的网络,主机则会去找网关的MAC先将数据转发给网关设备,由网关设备去转发数据。
动态ARP表
动态的ARP表由ARP协议通过ARP报文来自动获取和维护,有相应的老化时间,可以被新的ARP报文更新,也可以被静态的ARP表给覆盖,当到达老化时间或接口down时会删除响应的ARP表。
静态ARP表
静态ARP表通过人手工配置,不会老化,不会被动态ARP表覆盖,。
接下来我们继续上面的实验来给大家看一下ARP表长什么样子以及相关的命令
拓扑
这里我们使用到了路由器,路由器的一个接口就是一个广播域,所以我们的广播报文是不能直接穿过路由器的。
现在我们使用PC1去访问PC2然后查看他们之间的ARP表项
PC1
PC2
通过ARP的请求报文和响应报文中的内容他们把对方响应的IP和MAC加入到了自己的ARP表项中,如果后面再去访问对方的话将不会发送ARP报文则是直接封装转发。
我们在让PC1去访问PC3,由于他们并不在同一网段所以PC1会先去解析网关MAC然后把数据丢给网关设备,由网关替他转发。
我们先把PC1的网关设置成路由器的IP地址要不然PC找不到网关数据无法正常传输。
接下来我们应该还是ping不通PC3的原因我们接下来说明,我们先试着去ping对方然后用抓包软件来看看数据是怎么转发的。
PC1
路由器0号端口
路由器1号端口
连接PC3的接口
我们发现PC1是ping不通PC3的,那是哪里出了问题呢我们可以先从PC1发包开始说
1.PC1发现需要访问的目的IP与自己并不是同一网段的,所以PC1就会去解析网关的MAC,我们通过抓包软件也看到了PC1解析到了网关的MAC地址
2.然后将数据交给了网关,由于网关是一个三层设备,网关查表转发(注意这里的表是路由器不是我们的ARP表),网关发现目的IP与自己是直连网络
3.然后他会先去解析目的IP的MAC,PC3收到路由器发来的ARP的request请求报文,PC3会把自己的MAC和IP地址告诉路由器
4.路由器在有了PC3的MAC之后,就可以封装数据帧转发给PC3,但数据到达PC3时,PC3并不会去做响应,因为它发现目的IP与自己不是同一网段的,所以应该去找网关,但是我们并没有将PC3的网关设置成路由器的地址所以PC3找不到出口就没办法将数据回复过去。
我们现在把PC3的网关也设置成路由器的IP地址
这个时候我们再让PC1去访问PC3
我们发现现在PC1可以访问PC3了
到这里本章内容就到此结束了如果有疑问可以+博主私聊,如果哪里有问题欢迎私聊博主及时更改谢谢大家的观看学习!!!