前
在学习DHCP的时候,了解到DHCP租约四部曲的过程使用的是UDP协议。这就让我有了几个小小的疑问。
1、
DHCP租约四部曲Discover阶段的广播阶段,客户机本身并没有IP地址,它是如何通过UDP协议进行广播的呢? 毕竟UDP协议工作在网络层之上的传输层,网络通信可以有下层没有上层,但是不能有上层而没有下层。且IP报的头部中是包含源地址的,没有IP地址的客户端是如何发出UDP的广播包呢?
答:那就是0.0.0.0了,当DHCP客户机新加入局域网之后,会自动将自己的IP地址配置成为0.0.0.0,因为客户机也不知道DHCP服务器的IP地址,所以客户机就会使用自己的67端口发送UDP广播包来请求一个IP地址。( 因为源地址为0.0.0.0,目的地址为255.255.255.255,这样网络层IP数据报的源地址、目的地址都有了,自然可以使用UDP协议了)
2、
那弄清了DHCP阶段是可以使用UDP协议进行广播数据包之后:既然是在局域网中,为什么DHCP要使用UDP协议而不使用数据链路层的ARP、RARP协议呢?
答:( 翻阅了好一会cai找到像样的解释 )
首先数据链路层有自己的广播地址ff:ff:ff:ff:ff:ff,网络层的广播地址是255.255.255.255。最开始客户端需要通过发送广播包来请求IP地址,个人认为通过数据链路层来发送广播包在理论上是可行的。
以下是我参考的可靠回答:
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地址租期管理等等相对复杂的功能。
① RARP可以满足主机IP地址配置的部分要求,但是不能完全满足包括但不限于以下配置:
网络掩码,网关地址,静态路由,DNS服务器,以及私有的,公有的option功能。
② RARP是二层协议,无法穿透子网,DHCP可以穿透子网。好吧,那你会说有ARP代理,也可以辅助穿透子网,但是还是不好用。
因为:
ARP/RARP只能对地址进行识别,无法进行地址的统一规划和分配。如果在一个子网内,需要对地址进行统一规划,分配和管理,以及租约,续租的管理。必须要有一个服务器来集中管理。因此有了bootp,有了DHCP。
我就知道还会有人说,为何不像DR,BDR路由器选举那样在用户计算机中产生一个集中管理的服务器,那是因为ARP/RARP是一个非常轻量级的协议,它设计的本意就不是这个。另外,最重要的,用户计算机会宕机,选举出来的服务器不稳定。
③ 为何不修改ARP/RARP支持DHCP的特性?DHCP的协议的工作本质,是动态主机配置协议,不仅仅包含IP地址配置。TCP/IP网络的优点就是“分层”,协议各司其职。ARP/RARP负责IP-MAC地址间的互相解析,DHCP负责管理IP层的配置。因为,修改ARP/RARP支持DHCP,违反网络设计分层的理念。应该去增强ARP/RARP,而不是去合并DHCP。所以有了后来IPv6的ND。
④ 既然如此为何IPv6会回归到ND(邻居发现协议),DHCPv6协同分配?因为搞协议的人,逐渐发现,网络中有很多轻量级客户端,不需要进行统一管理,因此发明了ND,也就是增强版的ARP/RARP,它充分满足了没有DHCP服务器的情况下,在IPv6网络分配IP地址,路由前缀自动生成,快速上网的需求。

DHCP为什么使用UDP进行广播,而不使用数据链路层的ARP、RARP?
Scroll Down© 本文著作权归作者所有,转载前请务必署名