地址解析协议ARP概念
我们经常会遇到一个问题,知道一个主机或路由器的IP地址怎样找到它的硬件地址呢?ARP协议就是用来从IP地址解析出在数据链路层使用的硬件地址。
ARP协议要点
那么存在一个问题,ip地址只有32位,而硬件地址是48位,二者格式不同因而并不存在简单的映射关系。能够映射是在主机ARP高速缓存中存在一个映射表—这个映射表存在从ip到硬件地址的映射。
那么我们可以根据自己的ip地址去映射表里面查找相应的硬件地址。但是存在一个问题,如果这个映射表里面刚好没有这个ip地址,那么也就不存在相应的映射。
此时,ARP会按照下面步骤来找到相应ip的硬件地址
1). ARP进程在本局域网广播发送一个请求,内容为“我的ip是127.0.0.1,我的硬件地址是 00-00-C0-15-AD-18,我想知道ip地址为127.0.0.2的硬件地址”。
2).在本地局域网广播这个请求。
3).D发现自己的ip就是A要找的,就相应A的请求,并且以单播的形式告诉A自己的硬件地址。(同时D也保存着A的ip和硬件地址,以备后用)
4).A收到D发来的硬件地址就存入自己的映射表中。
存在问题
1.在ARP保存的映射地址都设置有一个生存时间,但凡超过这个时间,就会被删除,之后要用的话还是得重新去查找。
2.如果不在局域网呢?那么此时需要通过路由器来转发。
总结
ARP典型情况如下:
1.发送方是主机,要把ip数据报发送个同一网络上另外一个主机,这时通过ARP转发分组找到另一个主机的硬件地址。
2.发送方是主机要把ip数据报发送给另一个网络的主机上,要通过路由器,找到路由器硬件地址,接下来任务交给路由器就行了。
3.发送方是路由器,要把ip数据报发送给同一网络上的主机,这时路由器通过转发分组找到主机的硬件地址就可以了。
4.发送方是路由器要把ip数据报发送到另一个网络上的主机上。这时再找另外一个路由器请求分组得到硬件地址,此时吧任务交给这个路由器就行了。
为什么不直接使用硬件地址
抽象的ip地址本来就是为了隐蔽各种底层网络复杂性而便于分析研究问题,而设计出来的。只有主机拥有统一ip地址,他们之间的通信才能像连接在同一个网络上那样简单方便。这样不可避免的要付出些代价,牺牲点什么。
个人觉得ip层做的统一格式,屏蔽所有异构型网络就犹如:书同文,车同轨,意义长远。