ARP地址解析协议
ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取数据链路层地址的一个TCP/IP协议。
ARP是IPv4中必不可少的一种协议,它的主要功能是:
将IP地址解析为MAC地址;
维护IP地址与MAC地址的映射关系的缓存,即ARP表项;
实现网段内重复IP地址的检测。
ARP的请求信息
ARP协议是封装在以太网2帧里面的,并且它的Type字段是0x0806,类型是我们的以太网类型,对应的协议字段使用的是IPv4,针对192.168.10.1去请求192.18.10.2的信息,目的MAC地址Target MAC address: Broadcast (ff:ff:ff:ff:ff:ff),你会发现源IP是192.168.10.1,目的IP地址是192.168.10.2,那这个Sender MAC address(源MAC):54:89:98:64:26:38,这个源MAC是192.168.10.1的MAC地址,也就是PC1的MAC地址,MAC地址是单播的地址,这个Target MAC address: Broadcast(ff:ff:ff:ff:ff:ff),这个目的MAC地址就把它记成全0的MAC地址,我们是以全0的MAC地址信息做填充的,来去表示我们目前的MAC地址信息是多少
如果是在eNSP这边,如果是从PC1开始发送出去arp的请求报文,它这边是会以全f的形式去代替的,如果记忆的话,还是以全0来做记忆,这个是我们从ARP请求里面看到的源IP地址和源MAC地址、目的IP地址和目的MAC地址信息
ARP的响应信息
ARP请求完之后会再给我们回一个响应
ARP的工作原理1
网络设备一般都有一个ARP缓存(ARP Cache)。ARP缓存用来存放IP地址和MAC地址的关联信息。
在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的ARP表项,则直接采用该表项中的MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送ARP Request报文来获得它。
学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内(缺省:180s),设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。
如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址。然后将数据发送给网关。最后网关再把数据转发给目的设备。
如果左边的PC不去ping右边的PC,ARP表是不会发生变化的
ARP的工作原理2
主机1的ARP缓存表中不存在主机2的MAC地址,所以主机1会发送ARP Request来获取目的MAC地址。
ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机1的MAC地址。此时,由于主机1不知道主机2的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。
ARP Request报文中包含发送端MAC地址、发送端IP地址、目的端MAC地址、目的端IP地址,其中目的端MAC地址的值为0。ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文。
ARP的工作原理3
所有的主机接收到该ARP Request报文后,都会检查它的目的端IP地址字段与自身的IP地址是否匹配。如果不匹配,则该主机将不会响应该ARP Request报文。如果匹配,则该主机会将ARP请求报文中的发送端MAC地址和发送端IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。
ARP的工作原理4
主机2会向主机1回应ARP Reply报文。
ARP Reply报文中的发送端IP地址是主机2自己的IP地址,目的端IP地址是主机1的IP地址,目的端MAC地址是主机1的MAC地址,发送端MAC地址是自己的MAC地址,同时操作类型被设置为Reply。
ARP Reply报文通过单播传送。
主机1的ARP缓存表中不存在主机2的MAC地址,所以主机1会发送ARP Request来获取目的MAC地址。
ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机1的MAC地址。此时,由于主机1不知道主机2的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。
ARP Request报文中包含发送端MAC地址、发送端IP地址、目的端MAC地址、目的端IP地址,其中目的端MAC地址的值为0。ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文。
在以太网二帧里面,源MAC是我们主机1的MAC地址信息,目的MAC是我们的广播的MAC地址信息
ARP请求所对应的是一个广播帧?
答:对,对于ARP请求来说,虽然它的目的MAC地址信息,ARP请求里面的MAC地址信息,它是以单播的MAC地址来做填充的,但是在我们以太网二的数据帧里面呢,它的MAC地址信息都是全F的,我们在ARP请求这边,它的MAC地址不会出现这种单播的MAC地址信息的,ARP的请求是以一个广播地址帧,它的目的地址是一个全F的,所以它是对的
ARP的响应是广播地址帧?
答:不对,ARP的响应就不是广播的地址帧了,因为在以太网二帧里面,这个目的MAC地址会填充主机一的MAC地址作为目的MAC地址来做填充,所以它一定是一个单播的地址帧
主机一想要去访问主机二的时候,它会封装上的一个信息,变成了广播的一个数据帧,它把数据帧发送给交换机之后,交换机它在收到我们对应的这种广播数据帧之后,它就会做一个泛洪的操作,此时你会发现,无论是我们当前的G0/0/2接口还是G0/0/3接口,它都会发送出去,此时对于我们的主机2来说,它也能收到这样的数据帧,它收到这个数据帧之后,它会去做一个记录,当前原本对应我们的数据帧是什么呢?
比如说,目的MAC地址是全F的,源MAC地址信息是3C-52-82-49-7E-9D,Type字段值是0x0806表示上层协议是ARP协议,它把这个数据帧给到主机2之后,主机2会发现目的MAC地址全F的,它能不能收到,是能收的,因为目的MAC,全F的是指我们所有的MAC地址,它是可以接收的,这么说,他会发现,目的MAC地址全F我能接收,那接下来能不能发现我们这个上层协议是0x0806的ARP协议,是可以发现的,接下来就会做一个解封装的操作,如果发现上层协议是ARP协议,它会继续往上发给ARP协议去处理,发现它里面对应的目的IP地址的字段和我本身自己的IP信息匹不匹配,而当前对于我们的主机2来说,它发现和他自己的IP地址是匹配的,A你当前给我发的ARP的请求,我就会针对这个ARP的请求去做一个响应,那么同时,它还会把你的刚刚发送的数据包,还有我们ARP报文里面有源IP和源MAC吗,这个Send IP和Send MAC地址,它会把这个信息记录到主机2它自己的ARP那个缓存表下面
当我们主机2把这些信息都做了一个记录之后,接下来就要去给我们做一个响应,做响应的时候,会发现在我们这个主机2这边,它其实又会再去做一个封装的操作,当前以太网数据的信息由我们主机2变成了我们的源MAC信息,而对于主机1就变成了目的MAC信息,同样的,在我们ARP的响应里面,它的操作类型就变成了ARP的响应,它的发送端的MAC和IP就变成了PC2的IP地址和MAC地址信息,对于目的端就变成了PC1的IP地址和MAC地址信息,这时,在我们回包的时候源目发生了改变,又由于当前我们的主机2它知不知道192.168.1.1对应的MAC地址是多少,知道的,因为刚从我们的设备上收到ARP的响应请求,所以我针对于它的这个ARP请求,我是有做一些信息的记录的,我是有这个ARP的缓存表项的,所以此时它就知道了,它知道了它就会正常的进行填充,在我们进行ARP响应的回包的时候,它会去做一个单播数据帧的封装然后给到交换机,此时交换机上也有一个MAC地址,刚刚从PC2发送到交换机的MAC地址里面的目的MAC地址还是我们交换机上它存在的记录到的一些信息,所以它就会对该帧进行转发的一个操作
ARP的工作原理5
主机1收到ARP Reply以后,会检查ARP报文中目的端IP地址字段与自身的IP地址是否匹配。如果匹配,ARP报文中的发送端MAC地址和发送端IP地址会被记录到主机1的ARP缓存表中。
ARP请求广播数据帧
ARP请求 广播数据帧
ARP请求报文:S.ip S.mac D.ip D.mac D.mac以全0代替
ARP响应 单播数据帧
ARP响应报文:S.ip S.mac D.ip D.mac
数据通信 是一个有来有回的过程,是有方向的
数据通信 是一个不断的封装和解封装的过程