作者: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通信。

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

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

  1. DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习

    相关学习资料 http://www.rfc-editor.org/rfc/rfc2131.txt http://baike.baidu.com/view/7992.htm?fromtitle=DHCP ...

  2. (转)协议森林07 傀儡 (UDP协议)

    协议森林07 傀儡 (UDP协议) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经讲解了物理层.连接层和网络层.最开始的 ...

  3. 协议分析 - DHCP协议解码详解

    协议分析 - DHCP协议解码详解 [DHCP协议简介]         DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...

  4. DHCP协议讲解

    一.DHCP服务介绍: DHCP为动态主机配置协议,该协议能自动配置主机的IP地址.子网掩码.网关及DNS服务器等TCP/IP信息.DHCP可以降低客户机IP地址配置的复杂度和网络管理成本. DHCP ...

  5. 【转】DHCP协议详解

    协议分析 - DHCP协议解码详解 DHCP协议简介 DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作 ...

  6. 【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置

    简介 为了使用 TCP/IP 协议族,每台主机or路由器都需要一定的配置信息: IP地址 子网掩码 广播地址 路由或转发表 DNS 协议配置方法: 手动 通过使用网络服务来获得 使用一些算法来自动确定 ...

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

    网络层(network layer)是实现互联网的最重要的一层.正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet.更高层的协议,无论是TCP还是UDP,必须通过网络 ...

  8. 很好的 DHCP协议与dhcpcd分析【转】

    本文转载自:http://blog.csdn.net/gjsisi/article/details/18052369 第一部分 DHCP工作过程 DHCP的工作过程主要分为以下六个阶段:     发现 ...

  9. dhcp协议简介

    协议分析 - DHCP协议解码详解 DHCP协议简介 DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作 ...

随机推荐

  1. 如何远程关闭一个ASP.NET Core应用?

    在<历数依赖注入的N种玩法>演示系统自动注册服务的实例中,我们会发现输出的列表包含两个特殊的服务,它们的对应的服务接口分别是IApplicationLifetime和IHostingEnv ...

  2. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

  3. JavaScript自定义媒体播放器

    使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...

  4. 解决“chrome提示adobe flash player 已经过期”的小问题

    这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...

  5. PHP设计模式(八)桥接模式(Bridge For PHP)

    一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...

  6. Lind.DDD.LindMQ的一些想法

    回到目录 很久就想写一套属于自己的消息队列组件,前段时候看了汤雪华同学的EQueue,感觉还是不错的,他也是看了rabbitMQ之后写的Equeue,在设计上与前者有类似的地方,而大叔这次准备写一个L ...

  7. 5.0 JS中引用类型介绍

    其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...

  8. Android studio使用git教程

    ①下载Git工具,配置到Android studio中 http://git-scm.com/downloads ------------------------------------------- ...

  9. mysql删除重复记录语句的方法

    例如: id name value 1 a pp 2 a pp 3 b iii 4 b pp 5 b pp 6 c pp 7 c pp 8 c iii id是主键 要求得到这样的结果 id name ...

  10. linux下配置matlab运行环境(MCR)

    在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...