本节我们学习从IP地址到MAC地址的转换过程,这个过程是由ARP(地址解析协议)自动帮助用户主机完成的,用户在发送信息的时候根本感觉不到这个步骤的存在,但这个步骤是通信过程中非常重要的一步,因此我们必须要清楚它的原理。
ARP映射
假设主机A和主机B处在同一个物理网络中,主机A要和主机B通信,经过前面的学习,我们知道主机A除了要知道主机B的IP地址,从根本上还要知道主机B的MAC地址才能最终实现通信,因为IP数据包要经过数据链路层封装成帧嘛,此时ARP协议就可以帮我们获取到主机B的MAC地址。
学习具体过程之前,先要了解一个前提概念,叫做 ARP高速缓存,这个缓存是每台主机都具有的,这里面存放着一张“本地网络上各个主机的IP地址与MAC地址的映射表”,简称“ARP缓存表”。
自己查看自己电脑上的ARP缓存表,是在CMD命令窗口,输入“arp -a”或者“arp -g”,就可以查看自己电脑上的ARP缓存。在这里为了安全问题,我就不能放上我自己电脑上的ARP缓存截图了,只能从网上找到一张截图,可以作为例子:
接上面的例子,主机A要向主机B发送IP数据包的时候,首先查看自己的ARP缓存表中是否存在主机B的从IP到MAC的映射,如果存在,那么就能通过这个映射知道主机B的MAC地址,然后把主机B的MAC地址填入即将发送出去的MAC帧,这样就能被主机B接收;但是如果主机A的ARP表中不存在主机B的映射,就要启动ARP协议去获取主机B的MAC地址。
当然,有些小伙伴可能不知道为什么主机A的缓存表里面没有主机B的映射记录,这种情况是怎么发生的,一般有两点原因:第一是因为主机A可能刚刚开机,一般刚刚开机的主机里面的ARP表都是空的(除非是做了静态绑定),第二个原因是主机B可能刚刚加入到这个网络中来,主机A还不认识它,必须要通过一次ARP过程才能双方认识。
地址解析过程
现在,我们来看具体的ARP解析的过程:
当同一局域网内的主机A想要给主机B发送数据,已经知道了主机B的IP地址,封装好了IP数据包,然后要向下经过数据链路层封装成帧,但是在这一步,由于主机A没有在自己的ARP缓存表中查询到主机B的IP与MAC的映射关系,也就是并不知道主机B的MAC地址,所以主机A就无法在封装成帧的时候填入正确的目标MAC地址。
假设主机A:IP地址是192.168.1.2,MAC地址是11-22-33-44-55-66。主机B:IP地址是192.168.1.3,MAC地址是AA-BB-CC-DD-EE-FF。
这时候,主机A的ARP进程就会自动在本局域网上广播一个ARP请求的数据包,此数据包里面包括这样的主要内容:我是192.168.1.2,我的MAC地址是11-22-33-44-55-66,现在我想知道192.168.1.3的MAC地址是什么。
主机A发出去的这个ARP请求包,将会被本局域网上其它所有主机上运行的ARP进程接收到。
当主机B收到这个ARP请求之后,发现这个ARP请求包正是发给自己的,就向主机A回复一个ARP响应,在这个响应的数据包里面写上:我是192.168.1.3,我的的MAC地址是AA-BB-CC-DD-EE-FF。
主机A收到响应数据包后,就把主机B的IP地址与MAC地址的映射记录在自己的ARP缓存表中,以备以后再次需要使用。
需要注意:
①主机A广播出去的ARP请求,虽然其它所有主机的ARP进程都会收到,但是这其中只有主机B会向主机A回复响应,因为除了B的其他主机一看此请求不是发给自己的,就根本不会理睬这个请求。
②主机A发送ARP请求是广播方式,而主机B在回复响应的时候,用的是单播方式。因为主机A发来的ARP请求包中已经写明了主机A的MAC地址,所以主机B就不用再广播询问A的MAC地址了。
③关于ARP缓存表:这张表的一个突出特点就是可以限制广播通信量,试想如果没有这张表的存在,主机A和主机B之间完成了一次ARP“请求—响应”的过程后通信成功,但很用可能在不久之后双方还要进行通信,这时候主机A就又忘了主机B的MAC地址是什么,就又要广播一次,那么这种情况如果放在一个比较大的局域网的环境下,比如局域网内有100台主机,那么各主机之间的广播流量将会消耗很大的带宽资源,这是非常可怕的事情。
另外,ARP缓存表的另一个特点是动态性,动态性指的是:一般的每条映射记录都会有一个生存时间(除非是静态绑定的),超过了这个时间的期限,这条记录将会被删除。比如我们把生存时间设置为10分钟,如果主机A与B通信一次之后,在10分钟之内没有第二次通信,那么主机A的ARP缓存表中就会删除主机B的映射,等到再一次想通信的时候,再去广播询问。我们通常把这种情况称之为“ARP超时”。
ARP超时的好处是:如果主机B的网卡损坏,更换了一块新的网卡,那么主机B的MAC地址就是新的MAC地址了,如果主机A的ARP缓存表中没有超时删除的机制,那就会一直保存着主机B那条原来的MAC地址与IP地址的映射,这样主机A通过查询自己的缓存表得到的永远是主机B之前的那个MAC地址,而主机B已经换了新的MAC地址,那么主机A发出的ARP请求将不会被任何主机接收。
本节的内容就先到此为止,下一节我们继续深入学习ARP,分析ARP请求包和响应包的结构,用抓包软件进行演示。
参考资料:谢希仁《计算机网络》第七版