admin管理员组

文章数量:1604028

DHCP和IP地址冲突

    由于宿舍增加一些上网的设备,宿舍老是IP地址冲突,各种断线,各种麻烦。原因是DHCP的分配问题。然后由于本人严重的拖延症,路由的设置一直有问题,但一直没去修改路由,趁着今天有时间,修改了路由,然后断线问题不再有,顺便写了一篇说明和复习了一下计算机网络的DHCP协议。

 注:如果你也出现类似的问题,而想直接寻找解决的办法,直接跳到第三点看就可以了。

1.什么是DHCP(Dynamic Host Configuration Protocol

  动态主机设置协定(Dynamic Host Configuration Protocol, DHCP)DHCP是一个局域网的网络协议,使用UDP协议工作,其前身是BOOTP协议。当前的DHCP定义可以在RFC 2131中找到,而基于IPv6的建议标准(DHCPv6)可以在RFC 3315中找到。主要有两个用途:

  • 给内部网络或网络服务供应商自动分配IP地址给用户

  • 给内部网络管理员作为对所有电脑作中央管理的手段

2.DHCP是怎样工作的

 

2.1原理:动态主机设置协定(DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议。在IP网络中,每个连接Internet的设备都需要分配唯一的IP地址。DHCP使网络管理员能从中心结点监控和分配IP地址。当某台计算机移到网络中的其它位置时,能自动收到新的IP地址。

 

DHCP使用了租约的概念,或称为计算机IP地址的有效期。租用时间是不定的,主要取决于用户在某地联接Internet需要多久,这对于教育行业和其它用户频繁改变的环境是很实用的。通过较短的租期,DHCP能够在一个计算机比可用IP地址多的环境中动态地重新配置网络。DHCP支持为计算机分配静态地址,如需要永久性IP地址的Web服务器。

 

以上内容可以在维基百科的词条:DHCP找到更详细的解答。

 

2.2下面详细介绍以下DHCP自动分配IP地址的过程:

DHCP统一使用两个IANA分配的端口作为BOOTP:服务器端使用67/udp,客户端使用68/udp。

DHCP运行分为四个基本过程,分别为发现阶段、提供IP、选择IP租约和确认IP租约。

 

 

  • 发现阶段:DHCP客户机寻找DHCP服务器的阶段

 

DHCP客户机第一次登录网络的时候(也就是客户机上没有任何IP地址数据时),它会通过UDP 67端口向网络上发出一个DHCPDISCOVER数据包(包中包含客户机的MAC地址和计算机名等信息)。因为客户机还不知道自己属于哪一个网络,所以封包的源地址为0.0.0.0,目标地址为255.255.255.255,然后再附上DHCP discover的信息,向网络进行广播,网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

  • 提供IP地址租用:DHCP服务器提供IP地址的阶段

在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,DHCP为客户保留一个IP地址,然后通过网络广播一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。此时还是使用广播进行通讯,源IP地址为DHCP Server的IP地址,目标地址为255.255.255.255。同时,DHCP Server为此客户保留它提供的IP地址,从而不会为其他DHCP客户分配此IP地址。

 

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

 

  • 选择阶段:即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段

如果客户机收到网络上多台DHCP服务器的响应,只会挑选其中一个DHCP OFFER(一般是最先到达的那个),并且会向网络发送一个DHCP REQUEST广播数据包(包中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等),告诉所有DHCP Server它将接受哪一台服务器提供的IP地址,所有其他的DHCP服务器撤销它们的提供以便将IP地址提供给下一次IP租用请求。此时,由于还没有得到DHCP Server的最后确认,客户端仍然使用0.0.0.0为源IP地址,255.255.255.255为目标地址进行广播。

  • 租约确认阶段:即DHCP服务器确认所提供的IP地址的阶段

当DHCP Server接收到客户机的DHCP REQUEST之后,会广播返回给客户机一个DHCP ACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。

客户机在接收到DHCP ACK广播后,会向网络发送三个针对此IP地址的ARP解析请求以执行冲突检测,查询网络上有没有其它机器使用该IP地址;如果发现该IP地址已经被使用,客户机会发出一个DHCP DECLINE数据包给DHCP Server,拒绝此IP地址租约,并重新发送DHCP discover信息。此时,在DHCP服务器管理控制台中,会显示此IP地址为BAD_ADDRESS。

如果网络上没有其它主机使用此IP地址,则客户机的TCP/IP使用租约中提供的IP地址完成初始化,便将收到的IP地址与客户端的网卡绑定。从而可以和其他网络中的主机进行通讯。

 

 

通过以上DHCP工作流程的步骤,就完成了客户端动态IP地址分配的过程。

  • DHCP客户机租期续约:

因为客户机申请的IP地址是有一定的时间限制的,DHCP服务器向DHCP客户端分配IP地址称为出租,通常都设置有租借期限,所以在地址到期之前客户机还会向DHCP服务器发送一个续约的请求.

客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP Server发送DHCP REQUEST消息包。如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%。 如果在租期过去50%的时候没有更新,则客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP联系。如果还不成功,到租约的100%时候,客户机必须放弃这个IP地址,重新申请。

通过第1次分配IP地址之后,DHCP客户端每次重新登录网络时,就不需要再次发送DHCP discover广播信息了,因为这时已经知道内网中有一个DHCP服务器的IP地址了,所以就直接发送包含前一次所分配的IP地址的DHCP request信息。当DHCP服务器收到该信息后,会尝试让DHCP客户端继续使用原来的IP地址,并回答一个DHCP ACK信息。若该IP地址已被使用,则DHCP服务器将发送一个DHCP NACK信息给客户端,客户端收到该信息后,将重新发送DHCP discover信息来请求新的IP地址。如果客户端已知的DHCP服务器IP地址无效,就只有重新发送广播信息,查找新的DHCP服务器了。

3.小型局域网出现的IP冲突问题
一般的家用路由,小型局域网的路由都采用DHCP自动分配IP地址。

因为最近宿舍的主机发生经常性的断网,且右下角伴随着黄色三角形的感叹号,须重启路由才能重新连上,但连上不久就有可能再次冲突。

这个问题的发生,原因在于IP冲突。重置路由,但问题虽然减轻但没有根本上的解决。

后了解到有几台手动设置了主机的网络配置。通过前面DHCP服务器的介绍,我们可以得知,DHCP服务器是只能确保自己分配了地址不再重复分配,但如果同一个局域网中的客户机采用手动设置网络配置IP地址,DHCP服务器是不知情的。所以一旦有人提前手动设定分配某个ip A,而DHCP服务器在分配的时候完全有可能把A再次分配给局域网的另一台采用自动获取IP的主机。从而造成两台机器发生IP冲突,导致无法上网。

 

 

解决办法:

 1.局域网内所有主机均采用自动分配IP。(控制面板\网络和 Internet\网络连接)

 2.在主机手动设定ip的时候,同时把该IP在路由上设定为静态IP,使路由识别此IP只能分配给对应mac地址的主机,从而保留了该IP不会再分给其他的主机。

这里以宿舍的TP—LINK为例:
浏览器输入:192.168.1.1 输入:admin  和密码admin进入路由器的管理

然后添加mac地址,mac地址进入命令输入:ipconfig可以获得。和相对应主机设定的ip地址。

3.绑定ARP与IP绑定,原理和上面的类似,都是把mac地址和相应的ip绑定一起。从而DHCP分配的时候不会冲突。

 

 

还有一种办法就是关闭DHCP服务,局域网全部采用手动分配。但是这种方法就比较麻烦了。对于新主机的接入也不大方便。

that'all!

参考资料:http://www.baike/wiki/DHCP

          http://zh.wikipedia/wiki/DHCP#.E5.8D.8F.E8.AE.AE.E7.BB.93.E6.9E.84

          http://tonyguo.blog.51cto/379574/163475/

分类:  计算机基础, 网络 标签:  计算机网络,  DHCP,  IP冲突,  网络,  局域网,  ip分配 好文要顶  关注我  收藏该文    若晨辰
关注 - 7
粉丝 - 11 +加关注 1 0 « 上一篇: Sublime Text 2 入门与总结
» 下一篇: git学习笔记——查看git历史记录

posted on 2013-05-18 18:20 若晨辰 阅读(3029) 评论(1) 编辑 收藏

评论

#1楼 2013-05-20 11:06AlanWang  

图文并茂,通俗易懂
支持楼主 支持(1) 反对(0)

刷新评论 刷新页面 返回顶部 注册用户登录后才能发表评论,请  登录 或  注册, 访问网站首页。 【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【活动】阿里云双11活动开始预热 云服务器限时2折起
【调查】有奖调研即刻参与,你竟然是酱紫程序猿!
【推荐】Vue.js 2.x 快速入门,大量高效实战示例
最新IT新闻:
·  出行大数据绘制的“城市星云图”是怎样的?我们总结了5种城市结构
·  微软说MR重新定义了“工作”,HoloLens也将进入29个新欧洲市场
·  借力腾讯,加码AI,八大亮点看搜狗IPO路演PPT
·  李开复:无人驾驶必须一步到位,没有所谓的人机协同
·  Google发布VR/AR版本Google Play,免费共享VR/AR作品
»  更多新闻... 最新知识库文章:
·  NASA的10条代码编写原则
·  为什么你参加了那么多培训,却依然表现平平?
·  写给初学前端工程师的一封信
·  实用VPC虚拟私有云设计原则
·  如何阅读计算机科学类的书
»  更多知识库文章...

公告

昵称: 若晨辰
园龄: 5年7个月
粉丝: 11
关注: 7 +加关注

导航

  • 博客园
  • 首页
  • 新随笔
  • 联系
  • 订阅
  • 管理
<2013年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

  • 随笔 - 6
  • 文章 - 0
  • 评论 - 22
  • 引用 - 0

搜索

   

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论
  • 我的标签

我的标签

  • DHCP(1)
  • Docker(1)
  • floyd(1)
  • git(1)
  • IPyhton(1)
  • IP冲突(1)
  • ip分配(1)
  • nginx(1)
  • Python(1)
  • Sublime Text(1)
  • 更多

随笔分类(6)

  • C++
  • github(1)
  • linux
  • Python(2)
  • 编程工具
  • 计算机基础(1)
  • 算法(1)
  • 网络(1)

随笔档案(6)

  • 2015年6月 (1)
  • 2015年5月 (1)
  • 2013年8月 (1)
  • 2013年5月 (1)
  • 2013年1月 (1)
  • 2012年11月 (1)

文章分类

  • Python

相册(17)

  • sublimeText(17)

最新评论

  • 1. Re:用python验证蒙提霍尔问题
  • @淡抹眼线引用三个囚犯的问题的答案不认为正确,三个人被释放的可能是:(亚当,查尔斯)、(亚当,比尔)、(查尔斯,比尔);假如狱卒告诉了亚当 比尔肯定被释放,那么(亚当,查尔斯)被释放就为0,亚当被释放......
  • --若晨辰
  • 2. Re:用python验证蒙提霍尔问题
  • 三个囚犯的问题的答案不认为正确,三个人被释放的可能是:(亚当,查尔斯)、(亚当,比尔)、(查尔斯,比尔);假如狱卒告诉了亚当 比尔肯定被释放,那么(亚当,查尔斯)被释放就为0,亚当被释放的概率就成了1......
  • --淡抹眼线
  • 3. Re:用python验证蒙提霍尔问题
  • 感谢楼主精彩分享
  • --worldball
  • 4. Re:用python验证蒙提霍尔问题
  • @小丑僵尸可以...
  • --若晨辰
  • 5. Re:用python验证蒙提霍尔问题
  • 文章写的不错
    在注明来源的前提下,可以转载吗?
  • --小丑僵尸

阅读排行榜

  • 1. Sublime Text 2 入门与总结(10366)
  • 2. DHCP和IP地址冲突(3027)
  • 3. 弗洛伊德算法(1076)
  • 4. 用python验证蒙提霍尔问题(991)
  • 5. Docker部署IPython(894)

评论排行榜

  • 1. Sublime Text 2 入门与总结(15)
  • 2. 用python验证蒙提霍尔问题(6)
  • 3. DHCP和IP地址冲突(1)

推荐排行榜

  • 1. 用python验证蒙提霍尔问题(10)
  • 2. Sublime Text 2 入门与总结(9)
  • 3. 弗洛伊德算法(1)
  • 4. DHCP和IP地址冲突(1)
  • 5. Docker部署IPython(1)
Powered by:  博客园 Copyright © 若晨辰

本文标签: 冲突地址DHCPip