搞网络怎么的也有一年了,今天说起了几个带有“arp”的协议依旧有些混淆,所以这里我来做个简单的区分。
首先说ARP(address resolution protocol):
这个不难理解,arp协议用于在电脑知道自己MAC地址和IP地址的情况下,用来获取对端IP地址所对应的MAC地址。当然,交换机的MAC表也是从这里获取的,这也就是为什么一般你装好网络,测试PING的时候第一个包总是MISS、并且在PT中配好网络总要先fire个全1地址。
它的工作过程是这样的:
- A首先发送广播消息请求其对应目的IP地址的硬件地址是多少,同时在该广播消息中还附带自己的IP地址和硬件地址。
- B接受到该广播包后,取出A的IP地址和硬件地址,将其添加到地址映射表中。同时返回单播响应,响应包中包含B的IP地址和硬件地址。
- A收到响应,取出B的IP地址和硬件地址,将其添加到地址映射表中。
- 之后设备A和B就可以正常进行数据传送了。
然后我们来说说Inverse ARP:
- A首先发送单播消息请求其对应目的硬件地址的IP地址是多少?同时在该广播消息中还附带自己的IP地址。
- B接受到该广播包后,修改该请求数据包,从帧中继帧头中提取硬件地址放入请求包的源硬件地址域中,即可形成A的地址映射。然后形成单播响应,响应包中包含B的IP地址以及A的IP地址和硬件地址。
- A收到响应,修改响应数据包,从帧头中取出硬件地址放入响应数据包的源硬件地址域中,然后将其添加到地址映射表中。之后设备A和B就可以正常进行数据传送了。
最后再来说说这个让人懊恼的RARP:
为什么说RARP让人懊恼呢?其实RARP在功能上有点类似于DHCP协议,确切的说DHCP是BOOTP协议的升级,而BOOTP在某种意义上又是RARP协议的升级。BOOTP和RARP的区别在于RARP是在数据链路层实现的,而BOOTP是在应用层实现的,作为BOOTP的升级版DHCP也是在应用层实现的。这种实现层面的差别也从RARP和BOOTP/DHCP的报文封装格式的差别上体现出来了,RARP直接封装在以太网帧中,协议类型置为0x0800以标识这个报文是ARP/RARP报文,BOOTP/DHCP报文是直接封装在UDP报文中,作为UDP的数据段出现的。
从功能上说,RARP只能实现简单的从MAC地址到IP地址的查询工作,RARP server上的MAC地址和IP地址是必须事先静态配置好的。但DHCP却可以实现除静态分配外的动态IP地址分配以及IP地址租期管理等等相对复杂的功能。(在前段时间的这篇文章中,我简单写了DHCP的运行原理,不妨参考之。)
RARP是早期提供的通过硬件地址获取ip的解决方案,但它有自己的局限性,比如RARP客户与RARP服务器不在同一网段,中间有路由器等设备连接,这时候利用RARP就显得无能为力,因为RARP请求报文不能通过路由器。所以,BOOTP/DHCP应运而生,提供了很好的解决方法。 所以,现在RARP基本已经被BOOTP和DHCP所取代,自然逐渐不为人所知。
RARP、BOOTP和DHCP的比较:
特性 | RARP | BOOTP | DHCP |
依赖于服务器来分配IP地址 | 是 | 是 | 是 |
消息封装在IP和UDP中,所以它们可以转发到远端服务器 | 否 | 是 | 是 |
客户端可发现自己的掩码、网关、DNS和下载服务器 | 否 | 是 | 是 |
由IP地址池动态分配地址,而不需要知道客户端的MAC地址 | 否 | 否 | 是 |
允许IP地址的临时租用 | 否 | 否 | 是 |
包含注册客户端主机的FQDN(用DNS)的扩展功能 | 否 | 否 | 是 |
本文由 落格博客 原创撰写:落格博客 » ARP RARP Inverse ARP以及DHCP之间的那点破事儿
转载请保留出处和原文链接:https://www.logcg.com/archives/247.html
Comments