1、DHCP概述
IPv4是32位IP地址,拥有大约43亿IP地址,平均全球每人还分不到一个,可以说是稀缺资源,所以如果所有用户上网都使用静态IP的话,可能面临IP资源短缺,并且也造成了极大的浪费,毕竟大多用户并没有时刻连在网络上。此时需要一个动态分配IP的机制,于是DHCP应运而生。这有点儿像我们上公共厕所,茅坑相当于IP,人相当于主机,坑就那么几个,大家如果不拉屎也非要占个位子,肯定好多人就在厕所门外憋死了。所以公共厕所的机制就是有人来了,有空位你就上,没空位就排队等着。DHCP就是实现了这样一种机制,有主机上网才会给它分配一个IP地址(这里指的是全局IP,并非局域网IP),该主机下线以后它用的IP就被回收,又可以分配给其他要上网的主机使用,这就最大限度地利用了有限的IP资源。
DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,在DHCP协议下,不仅客户端主机的IP地址由服务器分配得到,TCP/IP设置也是由服务器发送。可以认为DHCP是BOOTP(Bootstrap Protocol)的增强版,因为DHCP是从BOOTP协议的基础上发展而来的。BOOTP主要应用在无盘工作站上,但使用BOOTP协议的主机IP地址是静态的,缺乏动态性。BOOTP协议这里这里还涉及到一个先有鸡还是先有蛋的问题,有兴趣的可以研究一下RFCS 951和1084。比较起 BOOTP ,DHCP 透过 "租约" 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求,并且支持BOOTP协议的relay可以转发DHCP报文。
2、DHCP协议下客户端与服务器端的沟通过程
(1)首先寻找 Server。当 DHCP 客户端第一次登录网络的时候﹐客户端发现本机上没有任何 IP 数据设定﹐它会向网络发出一个 DHCP DISCOVER 封包。因为客户端还不知道自己属于哪一个网络﹐所以封包的来源地址会为 0.0.0.0﹐而目的地址则为 255.255.255.255﹐然后再附上 DHCP discover 的信息﹐向网络进行广播。这一步的封包中还包含客户端的MAC信息,XID编号等。如果把客户端主机比作一个人,服务器比作公司,这一步就好比是投简历,只不过这个人是在网上满无目的地群发简历,在网上叫嚷:我要工作,谁给我个OFFER!
(2)提供 IP 租用地址。当 DHCP 服务器监听到客户端发出的 DHCP discover 广播后﹐它会从那些还没有租出的地址范围内﹐选择靠前面的未被使用 的IP地址 ,连同其它 TCP/IP 设定,响应给客户端一个 DHCP OFFER 封包,不过服务器要先使用ICMP报文来确定该IP未被其他主机使用。DHCP offer 封包除了包含MAC地址、客户端IP、服务器IP以及其他TCP/IP设置信息外,还会包含一个租约期限的信息。这相当于服务器发给了客户端一份“合同”。这一步好比是有公司收到了他的简历,正好自己这里有职位空缺,就给他个offer吧,顺便把劳动合同也给他了。
(3)客户端响应 IP 租约。如果客户端收到网络上多台 DHCP 服务器的响应﹐只会挑选其中一个 DHCP offer 而已﹐并且会向网络发送一个DHCP request广播封包﹐告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。但并不是所有 DHCP 客户端都会无条件接受 DHCP 服务器的 offer 。客户端也可以用 DHCP request 向服务器提出 DHCP 选择﹐而这些选择会以不同的号码填写在 DHCP Option Field 里面。这意味着,对于服务器发出的“合同”,客户端可以“讨价还价”,也可以不签,客户端拥有充分的主动权。大学毕业的时候很多人手里捏着好几个OFFER,他会选一个好的offer来签,这一步就是类似这样的功能。
(4)租约确认。当 DHCP 服务器接收到客户端的 DHCP request 之后﹐会向客户端发出一个 DHCPACK 响应﹐以确认 IP 租约的正式生效(好比劳动合同生效,嘻嘻)。此时客户端会广播一个ICMP报文,以确认自己的IP未被使用。如果服务器配置的IP地址可用,就结束了一个完整的 DHCP 工作过程;如果该IP地址不可用,客户端会向服务器发送一个DHCPDECLINE,拒绝使用该IP地址,然后重新开始发送DHCPDISCOVER报文。与DHCPACK响应相反的是DHCPNACK ,如果该IP地址已经失效或已经被其它机器使用,服务器会发送DHCPNACK封包,客户端收到这个封包, 就意味着IP地址分配失败,客户端要重复前面的步骤,即又发送一次DHCP DISCOVER。
应该是IPV6协议才能缓解IPV4数量不够的问题,IPV6协议迟早会代替IPV4的。