历史上的今天
返回首页

历史上的今天

今天是:2024年09月09日(星期一)

正在发生

2020年09月09日 | stm107 网络的学习之一 DHCP 协议(1)

2020-09-09 来源:eefocus

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 已经被占用,客户端则会送出一个 DHCPDECLIENT 封包给 DHCP 服务器,拒绝接受其 DHCP offer ,并重新发送 DHCP discover 信息。 事实上,并不是所有 DHCP 客户端都会无条件接受 DHCP 服务器的 offer ,尤其这些主机安装有其它 TCP/IP 相关的客户软件。客户端也可以用 DHCP request 向服务器提出 DHCP 选择,而这些选择会以不同的号码填写在 DHCP Option Field 里面:

 

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

 

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

 

DHCP 发放流程第一次登录之后: 一旦 DHCP 客户端成功地从服务器哪里取得 DHCP 租约之后,除非其租约已经失效并且 IP 地址也重新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了,而会直接使用已经租用到的 IP 地址向之前之 DHCP 服务器发出 DHCP request 信息,DHCP 服务器会尽量让客户端使用原来的 IP 地址,如果没问题的话,直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个 DHCPNACK 封包给客户端,要求其从新执行 DHCP discover。 至于 IP 的租约期限却是非常考究的,并非如我们租房子那样简单, 以 NT 为例子:DHCP 工作站除了在开机的时候发出 DHCP request 请求之外,在租约期限一半的时候也会发出 DHCP request ,如果此时得不到 DHCP 服务器的确认的话,工作站还可以继续使用该 IP ;当租约期过了87.5%时,如果客户机仍然无法与当初的DHCP服务器联系上,它将与其它DHCP服务器通信。如果网络上再没有任何DHCP服务器在运行时,该客户机必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包开始,再一次重复整个过程。要是您想退租,可以随时送出 DHCPRELEASE 命令解约,就算您的租约在前一秒钟才获得的。

 

跨网络的 DHCP 运作 从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。 若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。当然喽,如果在一个十分大型的网络中,这样的均衡式架构还是可取的。端视您的实际情况而定了。

推荐阅读

史海拾趣

CoolerMaster公司的发展小趣事

1992年,台北的一间出租屋内,林仁政凭借对电脑硬件的深厚理解与直觉,创立了讯凯国际股份有限公司,即现今广为人知的Cooler Master。初期,公司以生产个人电脑用散热器起家,目标明确——提供业界最好的散热方案。在没有资金、没有支持的情况下,林仁政独自完成了品牌的创建、日常事务的处理以及工作进程的管理。他的坚持与努力,使得Cooler Master逐渐在市场中站稳脚跟,开启了其在散热领域的传奇之旅。

常忆科技(CHINGIS)公司的发展小趣事

常忆科技股份有限公司,始创于1995年,总部位于台湾。在电子行业的发展历程中,常忆科技以其专注于IC设备制造领域的执着和创新能力,逐渐崭露头角。公司成立之初,便致力于开发P型晶体管非挥发性内存,由pFlash和pFusion两个事业单位组成,分别负责不同方面的工作。pFlash专注于开发和生产标准型NOR内存,而pFusion则负责向晶圆代工厂及IC设计公司提供嵌入式非挥发内存的生产技术及知识产权,并提供定制化设计及技术咨询服务。

随着消费电子产品、电脑及周边设备、无线通讯和网络装置等领域的快速发展,常忆科技的产品得到了广泛应用。公司凭借其卓越的技术和产品质量,逐渐在市场上占据了一席之地,为后续的蓬勃发展奠定了坚实基础。

Goldentech Discrete Semiconductor Inc公司的发展小趣事

在20世纪90年代末,Goldentech Discrete Semiconductor Inc.(以下简称“Goldentech”)由一群来自顶尖学术机构的半导体专家创立。公司从成立之初就专注于研发高性能的离散半导体器件,特别是针对当时迅速发展的移动通信市场。Goldentech的创新团队成功开发出了一种新型的低功耗、高频率的晶体管,这一技术突破迅速吸引了多家手机制造商的注意。凭借这一技术优势,Goldentech在短时间内成为移动通信领域离散半导体器件的主要供应商之一,推动了公司业务的快速增长。

Excel Cell Electronic Co Ltd公司的发展小趣事

品质是ECE公司的生命线。公司始终坚持“品质至上”的原则,从原材料采购到生产流程控制,再到产品检验和售后服务,都严格按照国际标准执行。为了提升品质管理水平,ECE公司引进了先进的品质管理系统,加强了对生产过程的监控和评估。同时,公司还定期对员工进行品质管理培训,提高员工的质量意识和技能水平。这些措施使ECE公司的产品质量得到了显著提升,赢得了客户的广泛赞誉。

联捷(Elinker)公司的发展小趣事

随着国内市场的逐渐饱和,联捷(Elinker)开始寻求海外市场的拓展。公司积极参加国际电子展会,与国外的电子企业建立了广泛的合作关系。同时,公司还通过引进国外先进的技术和管理经验,不断提升自身的竞争力。在国际市场的竞争中,联捷(Elinker)凭借其优质的产品和服务,赢得了越来越多客户的信任和认可。

American Power Devices Inc公司的发展小趣事

在激烈的市场竞争中,APD公司始终坚持品质至上的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都严格把关。凭借卓越的产品品质和良好的售后服务,APD赢得了众多客户的信赖和支持。

问答坊 | AI 解惑

CCD与CMOS传感器的不同点

什么是CCD与CMOS传感器         CCD:电荷藕合器件图像传感器CCD(Charge Coupled         Device),它使用一种高感光度的半导体材料制成,能把光线转变成电荷,通过模数转换器芯 ...…

查看全部问答>

windows ce 5.0 开机自动拨号

 如何使windows ce 5.0 开机时能通过 我的连接(GPRS)去自动拨号?  就是如何打开我的连接呢?我的连接是新建的,我在WINDOWS文件夹下去打开rnaapp.exe会提示命令行参数无效。  这个要如何去实现呢?   …

查看全部问答>

WinCE支持键盘的问题

用PB做好的系统,插了个键盘,完全没反应,鼠标就可以用,没问题,Build系统的时候已经选择了USB HID和它的子项USB HID Keyboard and Mouse这两项了 上网查了查资料,如下面,大致说只有US英语,日语,韩语的操作系统才支持键盘,通过他们的Driver ...…

查看全部问答>

求SCIS752/762中关于通过SPI去控制UART读写的例子--急!!!

各位大哥,我现在要写关于SCIS752/762 中通过SPI去控制UART读写的代码,我看过这颗IC的SPEC,上面有写怎样通过SPI去控制UART内部寄存器的格式,可是上面的UART内部寄存器很多,我不知道具体去控制UART读,或者UART写应该用哪些寄存器阿,顺序是什么 ...…

查看全部问答>

evc里SDK的问题

在EVC里如果要把程序下载到板上调试,需要一个和开发板对应的SDK,好像有的开发板厂商会提供,而我的这个没有,需要自己用platform builder来编译一个。我的问题是,使用platform builder编译SDK的过程很顺利,问题是在装完编译得到的SDK后,进入EV ...…

查看全部问答>

请问各位一个非常重要的问题

一个IO.inc里面定义这样的: EE_TABLE_4T        equ        010H        ;4T starts at 010hex EE_TABLE_4Q        equ        1F2H  ...…

查看全部问答>

关于编码的问题

  字符的编码一般是按照两个字节的UNICODE转化成01序列的.图象等也要转化成01序列计算机才能读懂.但是每一个01序列会对应一个数字,计算机是怎么区分这些数字和相应的编码信息的?要是是按照UNICODE来表示数字那计算机又不能按照补码的形式 ...…

查看全部问答>

问题:重启网卡。方法:发送IOCTL_NDIS_BIND_ADAPTER命令,通过NDIS重启网卡

程序: //打开文件 HANDLE hAdapter = CreateFile(                          NDISUIO_DEVICE_NAME,                   ...…

查看全部问答>

购:驱动级度过NP,模拟键盘按键,鼠标移动,代码。

求购:驱动级度过NP,模拟键盘按键,鼠标移动,代码。 从速: 13406738163。 pass86@gmail.com…

查看全部问答>

E题 数字信号传输性能分析仪

本帖最后由 paulhyde 于 2014-9-15 03:39 编辑 如题。大家来讨论一下咯。    …

查看全部问答>