文章出处:http://blog.pfan.cn/sovf/17111.html

什么是DHCP?

DHCP是Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是BOOTP。BOOTP原本是用于无磁盘主机连接上的网络上面的:网络主机使用BOOT ROM而不是磁盘启动并连接上网络,BOOTP则可以自动地为那些主机设定TCP/IP环境。但BOOTP有一个缺点:您在设定前须事先获得客户端的硬件地址,而且,与IP的对应是静态的。换而言之,BOOTP非常缺乏“动态性 ”,若在有限的IP资源环境中,BOOTP的一对一对应会造成非常可观的浪费。

DHCP可以说是BOOTP的增强版本,它分为两个部分:一个是服务器端,而另一个是客户端。所有的IP网络设定数据都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配下来的IP环境数据。比较BOOTP, DHCP透过“租约”的概念,有效且动态的分配客户端的TCP/IP设定,而且,作为兼容考虑,DHCP也完全照顾了BOOTP Client的需求。

DHCP的分配形式

首先,必须至少有一台DHCP工作在网络上面,它会监听网络的DHCP请求,并与客户端磋商TCP/IP的设定环境。它提供两种IP定位方式:

Automatic Allocation

自动分配,其情形是:一旦DHCP客户端第一次成功的从DHCP服务器租用到IP地址之后,就永远使用这个地址。

Dynamic Allocation

动态分配,当DHCP第一次从DHCP服务器租用到IP地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个IP地址,以给其他董作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的IP地址。

动态分配显然比自动分配更加灵活,尤其是当您的实际IP地址不足的时候,例如:您是一家ISP,只能提供200个IP地址用来给拨接客户,但并不意味着您 的客户最多只能有200个。因为要知道,您的客户们不可能全部同一时间上网的,除了他们各自的行为习惯的不同,也有可能是电话线路的限制。这样,您就可以 将这200个地址,轮流的租用给拨接上来的客户使用了。这也是为什么当您查看IP地址的时候,会因每次拨接而不同的原因了(除非您申请的是一个固定IP, 通常ISP都可以满足这样的要求,这或许要另外收费)。当然,ISP不一定使用DHCP来分配地址,但这个概念和使用IP Pool的原理是一样的。

DHCP除了能动态的设定IP地址之外,还可以将一些IP保留下来给一些特殊用途的机器使用,它可以按照硬件地址来固定的分配IP地址,这样可以给你更大的设计空间。同时,DHCP还可以帮客户指定router、netmask、DNS Server、WINS Server等等项目,您在客户端上面,除了将DHCP选项打勾之外,几乎无需任何的IP环境设定。

DHCP的工作原理

根据客户端是否第一次登录网络,DHCP的工作形式会有所不同。

第一次登录的时候:

寻找Server。当DHCP客户端第一次登录网络的时候,也就是客户发现本机上没有任何IP数据设定,它会向网络发出一个DHCP DISCOVER封包。因为客户端还不知道自己属于哪一个网络,所有封包的来源地址会为0.0.0.0,而目的地址则为255.255.255.255,然后再附上DHCP discover的信息,向网络进行广播。

在Windows的预设情形下,DHCP discover 的等待时间预设为1秒,也就是当客户端将第一个DHCP discover封包送出去之后,在1秒之内没有得到响应的话,就会进行第二次DHCP discover广播。若一直得不到响应的情况下,客户端一共会有四次DHCP discover广播(包括第一次在内),除了第一次会等待1秒外,其余三次的等待时间分别是9、13、16秒。如果都没有得到DHCP服务器的响应,客户端则会显示错误信息,宣告DHCP discover的失败。之后,基于使用者的选择,系统会继续在5分钟之后再重复一次DHCP discover的过程。

提供IP租用地址。当DHCP服务器监听到客户端发出的DHCP discover广播后,它会从那些还没有租出的地址范围内,选择最前面的空置IP,连同其它TCP/IP设定,响应给客户端一个DHCP offer封包。

由于客户端在开始的时候没有IP地址,所以在其DHCP discover封包内会带有其MAC地址信息,并且有一个XID编号来辨别该封包,DHCP服务器响应的DHCP offer封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定,DHCP offer封包会包含一个租约期限的信息。

接收IP租约。如果客户端收到网络上多台DHCP服务器的响应,只会挑选其中一个DHCP offer而已(通常是最先抵达的那个),并且会向网络发送一个DHCP request广播封包,告诉所有DHCP服务器它将指定接收哪一台服务器提供的IP地址。

同时,客户端还会向网络发送一个ARP封包,查询网络上面有没有其它机器使用该IP地址;如果发现该IP已经被占用,客户端则会送出一个DHCP decline封包给DHCP服务器,拒绝接受其DHCP offer,并重新发送DHCP discover信息。

事实上,并不是所有DHCP客户端都会无条件接受DHCP服务器的offer,尤其这些主机安装有其它TCP/IP相关的客户软件。客户端也可以用DHCP request向服务器提出DHCP选择,而这些选择会以不同的号码填写在DHCP Option Field里面:

换一句话说,在DHCP服务器上面的设定,未必是客户端全都接受,客户端可以保留自己的一些TCP/IP设定。而主动权永远在客户端这边。

租约确认。当DHCP服务器接收到客户端的DHCP request之后,会向客户端发出一个DHCP ack响应,以确认IP租约的正式生效,也就结束了一个完整的DHCP工作过程。

DHCP发放流程

第一次登录之后:

一旦DHCP客户端成功地从服务器那里取得DHCP租约之后,除非其租约已经失效并且IP地址也重新设定回0.0.0.0,否则就无需再发送DHCP discover信息了,而会直接使用已经租用到的IP地址向之前的DHCP服务器发出DHCP request信息,DHCP服务器会尽量让客户端使用原来的IP地址,如果没问题的话,直接响应DHCP ack来确认则可。如果该地址已经失效或已经被其他机器使用了,服务器则会响应一个DHCP nack封包给客户端,要求其重新执行DHCP discover。

至于IP的租约期限确实非常考究的,并非如我们租房子那样简单,以NT为例子:DHCP工作站除了在开机的时候发出DHCP request请求之外,在租约期限一半的时候也会发出DHCP request,如果此时得不到DHCP服务器确认的话,工作站还可以继续使用该IP;然后在剩下的租约期限的再一半的时候(即租约的75%),还得不到 确认的话,那么工作站就不能拥有这个IP了。至于为什么不是到租约期限完全结束才放弃IP呢?对不起,小弟也是不学无术之人,没有去深究了,只知道要回答 MCSE题目的时候,您一定要记得NT是这么工作就是了。

要是您想退租,可以随时送出DHCP release命令解约,就算您的租约在前一秒钟才获得的。

跨网络的DHCP运作

从前面描述的过程中,我们不难发现:DHCP discover是以广播方式进行的,其请求只能在同一网络之内进行,因为router是不会将广播传送出去的。但如果DHCP服务器安设在其它的网络上 面呢?由于DHCP客户端还没有IP环境设定,所以也不知道router地址,而且有些router也不会将DHCP广播封包传递出去,因此这情形下 DHCP discover是永远没办法抵达DHCP服务器那端的,当然也不会发生 ,offer及其它动作了。要解决这个问题,我们可以用DHCP Agent( 或 DHCP Proxy )主机来接管客户的DHCP请求,然后将此请求传递给真正的DHCP服务器,然后将服务器的回复传给客户。这里Proxy主机必须自己具有路由能力,且能将双方的封包互传对方。

若不使用Proxy,您也可以在每一个网络之中安装DHCP服务器,但这样的话,一来设备成本会增加,而且管理上面也比较分散。当然喽,如果在一个十分大型的网络中,正阳的均衡式构架还是可取的。视您的实际情况而定了。

http://tech.ddvip.com/2008-11/122691202092985.html

67和68 Bootp和DHCP

UDP上的Bootp/DHCP: 通常DSL和cable-modem的防火墙常会看见大量发送到广播地址255.255.255.255的数据。这些机器在向DHCP服务器请求一个地址 分配。Hacker常进入它们分配一个地址把自己作为局部路由器而发起大量的“中间人”(man-in-middle)攻击。客户端向68端口 (bootps)广播请求配置,服务器向67端口(bootpc)广播回应请求。这种回应使用广播是因为客户端还不知道可以发送的IP地址。

DHCP与Bootp的不同点在于,Bootp也可以完成给主机分配IP地址的任务,但它要求主机的硬件地址必须被手工输入到Bootp表中。可以讲 DHCP看成一个动态的Bootp。但是,要记住的是,Bootp还可以将用来引导主机的操作系统发送给主机。而DHCP不可以。

转载于:https://www.cnblogs.com/hnrainll/archive/2011/11/11/2245956.html

DHCP与BOOTP有什么区别相关推荐

  1. DHCP(一)-BOOTP引导程序协议小结

    BOOTP: 谈及DHCP不得不说下BOOTP,BOOTP是一种IP/UDP的引导协议,允许无盘客户端发现自己的IP地址,服务器主机的IP地址,并下载,加载指定文件名的文件(通常为操作系统镜像文件)到 ...

  2. DHCP和BOOTP

    什么是 DHCP? DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是 BOOTP.BOOTP 原本是用于无磁盘主机连接的网络上面 ...

  3. BOOTP 与 DHCP

    Bootstrap 协议 (BOOTP) 定义于 RFC 951,是 DHCP 的前身,与 DHCP 在运行上有一些相似之处.BOOTP 可供无盘工作站下载地址和启动配置.无盘工作站没有硬盘和操作系统 ...

  4. Unit 6: Systems Administration 6.1 Systems Administration Static Addressing, RARP, BOOTP, DHCP

    >> Two very important network services that office admins, systems administrators, deal with o ...

  5. 计算机网络-DHCP的工作原理,IP地址如何获取

    我们计算机的IP地址如何来的 DHCP的工作原理 DHCP的一些疑惑解答 我们计算机的IP地址如何来的 看了前面交换机.路由器.网络包传输的文章,那么就知道要连上网络,就需要IP地址,那么IP地址是如 ...

  6. 【计算机网络】——通信协议综述(网络协议、网络分层、ifconfige命令行、DHCP与PXE)

    一.为什么学习网络协议 协议三要素: 人类和计算机之间需要沟通的协议,只有通过这种协议,计算机才知道我们想让它做什么. 可以看得出,计算机语言作为程序员控制一台计算机工作的协议,具备了协议的三要素. ...

  7. 计算机网络---DHCP和自动配置

    什么是DHCP DHCP(动态主机配置协议)是一个局域网的网络协议,客户机 / 服务器协议.指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码.默认情况 ...

  8. DHCP/DNS服务器配置与管理——3

    配置DHCP/BOOTP客户端 AR G3路由器也可配置作为DHCP或BOOTP客户端使用,通过DHCP协议使其接口可从指定的DHCP服务器动态取得IP地址及其他配置信息. 在配置DHCP/BOOTP ...

  9. 2020上海交通大学考研专业课之DHCP

    今天,来讨论一下今年考研专业课中出现的另一个知识点:DHCP.交大推荐的课本上对这个知识点没有详细说过,所以考到的时候我也稍微有点懵,不过好歹在谢希仁的<计算机网络>书上见到过这个点,但也 ...

最新文章

  1. linux nat 端口,linux – iptables nat只是端口25?
  2. CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法
  3. 《机器人爱好者(第2辑)》——《惑星历险》中的Robby
  4. 日本钢铁业排名(2014/11/5)
  5. laravel swoole mysql_Laravel集成Swoole教程
  6. 【差分】bzoj 1676 [Usaco2005 Feb]Feed Accounting 饲料计算
  7. 敏捷开发模式下如何更好的进行测试
  8. Windows Phone开发(28):隔离存储B 转:http://blog.csdn.net/tcjiaan/article/details/7436959...
  9. Prometheus+Grafana PG监控部署以及自定义监控指标
  10. linux安装qt4 creator,ubuntu14.04下安装qt4.8.6 +qt creator
  11. 关于myeclipise注册机run.bat运行失败的解决方法
  12. 计算机专业学生前端该怎么自学?
  13. linux下无法安装VMware的解决方法
  14. 计算机安装应用程序卸的步骤,怎么彻底删除电脑安装的软件程序
  15. Arduino IDE搭建ESP8266开发环境!文件下载过慢解决方法!
  16. (二)C语言开发工具
  17. 2018年上半年信息系统项目管理师考试真题附答案解析(1)
  18. 博途IEC TIME数据类型_基于博途V15 西门子S7-1200数据处理指令应用-移动操作
  19. [附源码]java毕业设计景区门票系统
  20. C语言#error的使用

热门文章

  1. springboot+Jcrop实现图片裁剪(模仿邮箱注册上传头像)
  2. centos7.5安装git客户端
  3. 英语简明语法系列之---代词(二)
  4. 滚珠螺杆如何安装滚珠?
  5. FreshAir团队的建设
  6. js 数组删除指定多个元素值的方法
  7. 量化交易陷阱和R语言改进股票配对交易策略分析中国股市投资组合
  8. 解决CSS position:fixed 抖动问题
  9. 微信小程序问题归纳(一)
  10. 8节点矩形弹性轴对称弹性固体的非轴对称分析(python,有限元)