DHCP2:为什么叫做动态主机配置,而不是动态网络配置
2016-02-25 14:10
651 查看
最近在回答知乎一个问题的时候,想了下标题所述的问题。即DHCP协议实际上是配置了一些网络的参数,比如IP地址,网关地址,域名,DNS服务器这些,都是与网络有关的,所以命名的时候直接叫做动态网络配置协议不是更好吗,为什么要叫做动态主机配置文件呢?
在知乎上原问题为“为什么 DHCP 不基于 RARP 协议,而要基于 UDP 协议?”,这个问题的前半个问题倒是能够引发一些思考,即DHCP为什么不是基于RARP协议的,因为从功能设计上而言,DHCP和RARP的确有很多相似的地方,最简单我们可以认为,都是用来进行IP地址和MAC地址的交互的协议,而且从目的上,都可以称之为获取IP地址。这个问题个人认为,实际上应该是由于DHCP基于BOOTP,而BOOTP是在RARP的思路或者基础上扩展很多的一个协议,只不过到当下,很多扩展都是用处不大的,仅仅回归到一些有关网络配置的部分,还是主要有价值的。
原回答如下,最近比较忙,所以先贴下,之后整理
“其实这个问题我更觉得是因为DHCP是基于BOOTP的,而且不止是思想,而是整个数据包格式就是基于BOOTP的,同时BOOTP是基于UDP的。若BOOTP是参考RARP的话(注:BOOTP的RFC951是晚于RARP的RFC903一年的,所以有可能是参考或者基于的关系,但是没有考证过),那么BOOTP不仅仅是简单扩展IP分配这个功能,相比DHCP,BOOTP能够完成的功能更多(不过也有缺陷),不过到后期,很多功能发现都是没有太大用处所以都删除了,简化了一些并且优化了一些就称为了DHCP协议。有关BOOTP的功能,貌似在《深入理解计算机网络》里面写的还算不错,在599页,其中叙述到“服务器反馈给客户端的found帧中包含的主要信息有客户端的IP地址,服务器的IP地址,硬件类型,网关IP地址,站点MAC地址和启动映像名。站点根据Found帧中的信息获得分配的IP地址信息,然后通过TFTP服务器下载启动映像文件,并将此文件在站点内存模拟成磁盘,从这个模拟磁盘启动”,实际上除了这个,在found帧中,应该还可以附加启动配置文件,实际上打开一个DHCP的帧,可以发现这个帧还是满长的,比如一个DHCP
discover帧有622字节(二层帧),其实里面很多东西在当下看来都没什么用处(即与分配IP地址无关),比如最后的一段Padding部分(若用wireshark查看就是padding,若用omnipeek查看则是data部分),这一块就是配置启动文件的,而现在看来貌似没感觉到用处。所以BOOTP若认为是RARP的扩展,那么也是扩展很多内容了,即分配IP仅仅是部分的内容,不过BOOTP也有一个很大的缺点就在于,其是需要人工先在BOOTP中设置对应客户端的MAC地址的,然后客户端的请求才会被服务器所处理(即没有实现匹配的结果,则不处理),之后在DHCP中则是相应引入了租约时间这个概念,从而不用手动输入。所以以上所述,主要是由于BOOTP是基于UDP协议的,其功能不仅仅是IP地址分配,故又因为DHCP是基于BOOTP进行设计的,所以DHCP也直接基于UDP协议了,只是为什么DHCP不考虑直接基于RARP,而是基于BOOTP可能是由于历史原因造成,因为从DHCP中其数据包格式都是基本和BOOTP差不多,从而初始设计也应该是基于BOOTP的应用场景的,所以DHCP才叫做动态主机配置,而不是IP配置或者网络配置,故DHCP初始包含的功能也和BOOTP一样,只不过到了现在而言,这些功能都是累赘了。”
在知乎上原问题为“为什么 DHCP 不基于 RARP 协议,而要基于 UDP 协议?”,这个问题的前半个问题倒是能够引发一些思考,即DHCP为什么不是基于RARP协议的,因为从功能设计上而言,DHCP和RARP的确有很多相似的地方,最简单我们可以认为,都是用来进行IP地址和MAC地址的交互的协议,而且从目的上,都可以称之为获取IP地址。这个问题个人认为,实际上应该是由于DHCP基于BOOTP,而BOOTP是在RARP的思路或者基础上扩展很多的一个协议,只不过到当下,很多扩展都是用处不大的,仅仅回归到一些有关网络配置的部分,还是主要有价值的。
原回答如下,最近比较忙,所以先贴下,之后整理
“其实这个问题我更觉得是因为DHCP是基于BOOTP的,而且不止是思想,而是整个数据包格式就是基于BOOTP的,同时BOOTP是基于UDP的。若BOOTP是参考RARP的话(注:BOOTP的RFC951是晚于RARP的RFC903一年的,所以有可能是参考或者基于的关系,但是没有考证过),那么BOOTP不仅仅是简单扩展IP分配这个功能,相比DHCP,BOOTP能够完成的功能更多(不过也有缺陷),不过到后期,很多功能发现都是没有太大用处所以都删除了,简化了一些并且优化了一些就称为了DHCP协议。有关BOOTP的功能,貌似在《深入理解计算机网络》里面写的还算不错,在599页,其中叙述到“服务器反馈给客户端的found帧中包含的主要信息有客户端的IP地址,服务器的IP地址,硬件类型,网关IP地址,站点MAC地址和启动映像名。站点根据Found帧中的信息获得分配的IP地址信息,然后通过TFTP服务器下载启动映像文件,并将此文件在站点内存模拟成磁盘,从这个模拟磁盘启动”,实际上除了这个,在found帧中,应该还可以附加启动配置文件,实际上打开一个DHCP的帧,可以发现这个帧还是满长的,比如一个DHCP
discover帧有622字节(二层帧),其实里面很多东西在当下看来都没什么用处(即与分配IP地址无关),比如最后的一段Padding部分(若用wireshark查看就是padding,若用omnipeek查看则是data部分),这一块就是配置启动文件的,而现在看来貌似没感觉到用处。所以BOOTP若认为是RARP的扩展,那么也是扩展很多内容了,即分配IP仅仅是部分的内容,不过BOOTP也有一个很大的缺点就在于,其是需要人工先在BOOTP中设置对应客户端的MAC地址的,然后客户端的请求才会被服务器所处理(即没有实现匹配的结果,则不处理),之后在DHCP中则是相应引入了租约时间这个概念,从而不用手动输入。所以以上所述,主要是由于BOOTP是基于UDP协议的,其功能不仅仅是IP地址分配,故又因为DHCP是基于BOOTP进行设计的,所以DHCP也直接基于UDP协议了,只是为什么DHCP不考虑直接基于RARP,而是基于BOOTP可能是由于历史原因造成,因为从DHCP中其数据包格式都是基本和BOOTP差不多,从而初始设计也应该是基于BOOTP的应用场景的,所以DHCP才叫做动态主机配置,而不是IP配置或者网络配置,故DHCP初始包含的功能也和BOOTP一样,只不过到了现在而言,这些功能都是累赘了。”
相关文章推荐
- tcpwatch1.3
- 利用AFNetworking 的AFHTTPSessionManager代码实现代理的方式访问任意指定IP地址,解决域名DNS上的问题
- register(cp:http://blog.sina.com.cn/s/blog_6a1837e90101128k.html)
- curl http_code 状态码 意义及信息
- Xcode7 使用NSURLSession发送HTTP请求报错
- 通过AFHTTPSessionManager+RACSupport 或 AFHTTPRequestOperationManager+RACSupport 解决同一信号源(RAC网络请求两次的问题
- httpUrlConnection的參数具体解释
- 人工智能AI-机器视觉CV-数据挖掘DM-机器学习ML-神经网络-[资料集合贴]
- 分布式系统中不可靠的TCP
- 深度神经网络算法的实现
- http://jackwang1.blog.163.com/blog/static/39534478201182651610201/
- httpClient中的get和post请求
- 鸟哥的Linux私房菜(服务器)- 第十二章、网络参数控管者: DHCP 服务器
- 鸟哥的Linux私房菜(服务器)- 第七章、网络安全与主机基本防护: 限制端口, 网络升级与 SELinux
- 鸟哥的Linux私房菜(服务器)- 第六章、 Linux 网络侦错
- 鸟哥的Linux私房菜(服务器)- 第五章、 Linux 常用网络指令
- 【转】TCP和UDP具体编程时的区别
- 鸟哥的Linux私房菜(服务器)- 第三章、局域网络架构简介
- 鸟哥的Linux私房菜(服务器)- 第二章、基础网络概念
- Java基于TCP/IP的Socket通信