今天给大家说说arp吧!在学网络的时候,我们知道的是自顶向下交付数据包。但是我们在交付给数据链路层的时候,我们已经有了ip的报头,但是要注意的是,ip层可不会给我们传输数据包,他还要向下交付。我们学过ip协议就会知道的是,ip数据包在向下交付的时候,我们已经对查过路由表了,也就是说我知道这个数据包要去哪,但是我们数据包在网络上务必要经过路由器等节点,我们经过节点的时候会用到mac地址,但是对方的mac地址我们应该如何得知?此时我们就要用到的是arp协议。如下:
其实我们可以理解为arp协议是在以太网数据帧之上的。我们知道以太网数据帧的协议中有一个帧类型,如果是0800,那么此时就是要把这个数据包交付给网络层的ip协议的,如果是0806的话,那么就代表这个是交付给arp协议的,也就是说明这个数据包是arp请求或是应答。说完怎么交付那么就说说有什么用吧。
我们得知的是我们下一跳不知道在一个主机的mac地址,所以要用arp协议,下面先来看看arp协议的报头吧。
硬件类型代表的是次子网是什么网络,1代表是以太网。
协议类型就是0800,代表转换的地址,这里就是ip。
硬件长度是6。
协议地址长度是4。
op代表是应答还是请求,1是请求,2是应答
剩下就很简单了,就是源mac,ip,目的mac,ip地址。
看完此协议报,我们要知道该怎么填。我们知道,我们是不知道下一跳的主机的mac地址的,所以我们在发送请求的时候,我们要把目的mac地址写成广播地址。也就是全是F。目的ip地址我们是知道的。所以在局域网中,源主机想要知道下一跳的mac地址,所以我们要发送请求,这个局域网中的所有的主机都会处理这个请求,根据目的ip地址来对比这个请求是否是自己。不是就丢弃,是的话就构建arp应答,这样就知道了。
然后返回给源主机以后,我们就知道了下一跳的主机mac地址。
那么,此时问题来了,这样的话,局域网中是否是有大量的arp请求,其实不这样的,因为arp层会有一个缓存,它对应的是以前所应答的ip地址所对应的mac地址,可以理解为他是具有记忆的,但是这个记忆是有时间限制的。如果没有时间限制的话,就会出现问题。
还有就是,我们可以用ping命令在自己所在的局域网来获取自己这个局域网中其他主机的mac地址。
以上就是本篇文章的内容,大家如果感觉有所收获希望点一下赞!!谢谢。