协议森林16 小美的桌号(DHCP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

 

DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址、DNS域名服务器地址等。一台电脑只要接上网,就可以通过DHCP协议获得相关配置,从而顺利的畅游网络。

 

网络配置

电脑刚刚接上网络时,像一个走入一家新餐厅的食客,不免会有很多疑惑:

“我该坐在哪里?”

“我怎么点菜?”

“我该如何结账?”

 

初入大饭店

 

如果顾客的问题长时间得不到解答,那么餐厅很可能失去这位客人。于是,餐厅往往会雇一些服务员。他们可以把客人引导到空闲的座位,并告诉顾客如何点餐、如何结账等。同样,在网络通信中,一台电脑需要设置自己的IP地址等网络参数。可对于电脑用户来说,这些设置太过复杂。幸好,DHCP协议可以解决这一让人头痛的问题。

 

DHCP协议全称为“动态主机设置协议”(Dynamic Host Configuration Protocol)。通常来说,普通电脑中都内置有DHCP客户端模块。电脑接上网络后,DHCP客户端发现新连通的网络,会在该网络上找DHCP服务器。DHCP服务器将给电脑提供合理的网络配置,并把设置信息传回本机。所谓的DHCP服务器,其实就是一些运行有DHCP服务器端软件的特殊电脑。他们像等候在网络上的服务员,为新来的顾客排忧解难。本机和DHCP服务器之间的通信,都是通过DHCP协议进行的。

 

其实在网络诞生初期,就有了用一台服务器为网络上的电脑配置参数的做法。最早的一个协议叫BOOTP(Bootstrap Protocol),主要用于开机配置。计算机开机时需要很多配置参数。对于没有磁盘的计算机来说,它无法获得这些参数,但可以通过BOOTP从网络上的其他设备上获得。DHCP大体上继承了BOOTP的工作方式,但在细节上进行了改进。我们将在以后看到。

 

地址分配

服务员最重要的任务是为客人找座位。类似的,DHCP服务器的首要任务是分配IP地址。分配的IP地址要符合以下原则:

  1. 地址合法,即对应该局域网的IP地址和子网掩码。
  2. 地址空闲,同一网络下没有其他设备使用该地址。

 

DHCP服务器上存有一个地址池,里面是可用的IP地址,相当于服务员手中的空闲桌号列表。当新客人出现时,DHCP服务器就会从地址池中取出一个IP地址分配给客人。此外,服务器还会说明IP地址的占用时间,也就是租期:

“先生,请注意您的用餐时间为1个小时”

 

当然,主机使用网络的时间可能超过租期。如果主机在租期到时都没有联系DHCP服务器,那么DHCP服务器会收回IP地址,再分配给其他主机。可如果主机想继续使用IP地址,就要在中途申请延长租期。收到申请的DHCP服务器通常会答应主机的请求,允许它继续使用现有IP地址。但少数情况下,服务器会要求主机更换IP地址。如果主机联系不上DHCP服务器,那么它必须立即停止使用IP地址,重启寻找DHCP服务器的过程。

 

有了动态分配,DHCP服务器不但简化了网络配置过程,还可以有效利用IP地址资源。例如一个咖啡馆的Wifi路由允许200台设备接入。咖啡馆每天进出的客人很多。如果每个客人都要求一个不一样的IP地址的话,所需地址会远远超过200台。而通过动态的方式,200个IP地址不断回收使用,完全可以满足客人的需要。有时,DHCP服务器会预留一些地址给特定MAC地址的设备使用。这就好像餐厅给贵宾预留座位,不允许其他客人坐。这样的地址通常会分配给打印机、传真机等特殊设备。由于IP地址固定,用户可以方便的通过IP地址找到它们。

 

通信过程

DHCP协议的底层是UDP协议。我们知道,网络上的点对点沟通需要有IP地址。但新接入网络的客户机正是想通过DHCP通信来获得IP地址。这简直成了“鸡生蛋、蛋生鸡”的死胡同。幸好,除了点对点通信,UDP协议还允许广播通信。把UDP数据包发送到网络的广播地址,网络上的每个设备都能收到。因此,DHCP通信主要靠这种广播的形式进行。

 

DHCP通信分为四步:

  1. Discovery:客户机发广播,搜寻DHCP服务器。
  2. Offer:DHCP服务器发出邀请,提供一个可用的IP地址。
  3. Request:客户机正式请求使用该IP地址。
  4. Acknowledge:DHCP服务器确认,并提供其他配置参数。

 

每一步的通信内容都放在一个符合DHCP格式的数据包中。数据包中可以包括客户机IP地址、服务器IP地址、客户的硬件MAC编号等字段,还能附加多条网络设置参数。当某些信息未知时,如客户机的IP地址,相应的字段可以填成0。

 

我们可以再次用餐厅来类比通信过程:

客人老张大喊:“服务员,我是老张,给我找张桌子呗?”

服务员小美回喊:“我是服务员小美。老张你坐3号桌行吗?”

老张觉得3号桌不错,又喊了一嗓子,“这桌子行,老张我就坐在这里了啊。”

小美回复,“成啊。记得用餐时间是一个小时哟。”

 

服务员小美

 

经过这一系列的DHCP通信,客户机获得了自己的IP地址,也记下了租期时间。为了防止DHCP服务器不靠谱,客户机通常还会探测一下网络,以免该IP已经被其他设备占用。除了租期,DHCP服务器最终确认中,还可能加上其他网络配置信息,如DNS服务器地址、网络出口地址等。客户机可以选择接受,也可以拒绝DHCP服务器的“好意”,自行设置这些参数。

 

DHCP攻击

一定程度上说,DHCP服务器是个活雷锋,为网络上的其他设备提供公共服务,免得设备之间私自打架。人们也越来越信赖这个活雷锋,只管接上网线、连上Wifi,让DHCP服务器处理配置之类的杂事。无形中,DHCP服务器掌握了很大的公共权力。一些黑客攻击手法开始瞄准DHCP服务器。

 

针对DHCP的一种攻击办法是从服务器那里骗IP地址。攻击者的电脑可以不断发出DHCP请求,冒充成新入网的客户机。于是,DHCP服务器的地址池被耗干,无法分配地址给后来的用户。后来的用户再也没法使用网络服务。攻击者很可能会继续下连环套。攻击者占有了大量IP地址,可以装扮成新的DHCP服务器,把自己骗来的IP地址分配给网络上的新用户。

 

等等,好像有什么不对攻击者搞瘫一台DHCP服务器,就为了过一下cosplay的瘾?

假扮小美,很容易被外表迷惑
 

当然不是。DHCP服务器还能提供其他网络设置参数。攻击者可以让自己成为DNS服务器或者网络出口。于是,客户机的域名解析和外网通信,必须经过攻击者的电脑。这个时候,攻击者的权限就很大了。他可以偷听通信、伪装成客户机、假扮成某个域名的网站。比如说,攻击者就可以篡改域名解析,让你在访问www.cnblogs.com/vamei时,实际上访问的是攻击者提供的一个网页。当你在这个网页上输入用户名和密码时,你的信息就完全泄露给了攻击者。

 

DHCP攻击让人防不胜防。DHCP协议在设计中并没有考虑到安全性的问题,所以很难从软件上杜绝DHCP攻击。某些品牌的交换机上,可以指定特定端口给合法的DHCP服务器,以免其他人伪装。当然,最重要的保护方式,还是防止攻击者连入局域网。

 

总结

DHCP服务器可以动态的分配IP地址,还可以提供其他网络设置参数。客户机和服务器经过四步来完成DHCP通信。

 

欢迎继续阅读“协议森林”系列

时间: 2024-09-20 17:19:24

协议森林16 小美的桌号(DHCP协议)的相关文章

协议森林01 邮差与邮局 (网络协议概观)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了"敌人入侵"这一抽象信号.这样一个"狼烟=敌人入侵"就是一个简单的协议.协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母.比如SOS(***---***,  *代表短信号,-代表长信号).这样&q

协议森林

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   互联网是为了通信,通信又依赖于协议.我们交谈时,要符合语法和用语规范.机器之间的通话也要符合协议.否则,鸡同鸭讲,无法相互理解."协议森林"是我的一系列关于网络协议的文章,总结了多个网络协议. 网络协议属于技术,但深受政策与历史的影响.Ethernet, IP, UDP, TCP, HTTP, DNS... 这些协议形成茂密的树林,盘根错节.协议之间有时合作,有时竞

协议森林07 傀儡 (UDP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   我们已经讲解了物理层.连接层和网络层.最开始的连接层协议种类繁多(Ethernet.Wifi.ARP等等).到了网络层,我们只剩下一个IP协议(IPv4和IPv6是替代关系).进入到传输层(transport layer),协议的种类又开始繁多起来(比如TCP.UDP.SCTP等).这就好像下面的大树,根部(连接层)分叉很多,然后统一到一个树干(网络层),到了树冠(传输层)部分又开始开始分叉

协议森林05 我尽力 (IP协议详解)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP协议的具体细节和设计哲学.   IPv4与IPv6头部的对比 我们已经在IP接力中介绍过,一个IP包分为头部(header)和数据(payload/data)两部分.头部是为了实现IP通信必须的附加信息,数据是IP通信所要传送的信息.   黄色区域 (同名区域) 我们看到,三个黄色区域跨越了IPv4和IPv6.Version(4位)用

协议森林14 逆袭 (CIDR与NAT)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址.这造成了IPv4地址的耗尽危机.随后,IPv6被设计出来,并可以提供足够多的IP地址.但是IPv4与IPv6并不兼容,IPv4向IPv6的迁移并不容易.一些技术,比如说这里要说的CIDR和NAT,相继推广.这些技术可以缓解IPv4的稀缺状态,成就了IPv4一时的逆袭.   CIDR CIDR(Classless Int

协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   网络层(network layer)是实现互联网的最重要的一层.正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet.更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息.操作系统也会提供该层的socket,从而允许用户直接操作IP包. IP数据包是符合IP协议的信息(也就是0/1序列),我们后面简称IP数据包为IP包

协议森林04 地址耗尽危机 (IPv4与IPv6地址)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 谢谢xwpcom纠错   IP地址是IP协议的重要组成部分,它可以识别接入互联网中的任意一台设备.在IP接力中,我们已经看到,IP包的头部写有出发地和目的地的IP地址.IP包上携带的IP地址和路由器相配合,最终允许IP包从互联网的一台电脑传送到另一台. 在IP接力中,我们是以IPv4为例说明IP包的格式的.IPv4和IPv6是先后出现的两个IP协议版本.IPv4的地址就是一个32位的0/1序列,

Linux操作系统启动界面揭秘DHCP协议实现过程

我特别喜欢Linux启动的时候屏幕上一行一行的提示.它把系统正在干的所有事情都告诉了我们,不像Windows,自检完了就给个进度条,背后干啥都不让我们知道. DHCP协议部分实现过程如下 ①:DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文. ②:DHCP 客户从 UDP 端口 68发送 DHCP 发现报文. ③:凡收到 DHCP 发现报文的 DHCP 服务器都发出 DHCP 提供报文,因此 DHCP 客户可能收到多个 DHCP 提供报文. ④:DHCP 客户从几个 DHCP

网络协议X档案之BOOTP协议、TFTP协议和DHCP协议

网络协议--BOOTP协议说明:BOOTP协议全称Bootstrap Protocol(自举协议),BOOTP协议是一个基于TCP/IP协议的协议,它可以让无盘站从一个中心服务器上获得IP地址,为局域网中的无盘工作站分配动态IP地址,并不需要每 个用户去设置静态IP地址.使用BOOTP协议的时候,一般包括Bootstrap Protocol Server(自举协议服务端)和Bootstrap Protocol Client(自举协议客户端)两部分.应用:该协议主要用于有无盘工作站的局域网中,客户