一、DHCP概念
DHCP----动态主机配置协议,是一个应用层的协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
DHCP----前身是BOOTP(区别DHCP分配的地址是可以有期限的,BOOTP分配的地址是永久的)
DHCP是(Dynamic Host Configuration Protocol)的缩写﹐它的前身是BOOTP。BOOTP原本是用于无磁碟主机连接的网路上面的﹕网路主机使用BOOTROM而不是磁碟起动并连接上网路﹐BOOTP则可以自动地为那些主机设定TCP/IP环境。但BOOTP有一个缺点:您在设定前须事先获得客户端的硬体位址,而且,与IP的对应是静态的。换而言之,BOOTP非常缺乏"动态性",若在有限的IP资源环境中,BOOTP的一对一对应会造成非常可观的浪费。
DHCP可以说是BOOTP的增强版本﹐它分为两个部份﹕一个是服务器端﹐而另一个是客户端。所有的IP网络设定都由DHCP服务器集中管理﹐并负责处理客户端的DHCP要求﹔而客户端则会使用从服务器分配下来的IP环境资料。比较起BOOTP,DHCP透过租约的概念,有效且动态的分配客户端的TCP/IP设定,而且,作为兼容考量,DHCP也完全照顾了BOOTPClient的需求。
DHCP----分为两个部分:1、客户端向68端口(bootps)广播请求配置, 2、服务器向67端口(bootpc)广播回应请求。
DHCP特点:可以自动分配IP、子网掩码、网关、DNS、租期。
DHCP优点:
1.简化了客户机的设置,大部分路由器可以转发DHCP配置请求,因此,互联网的每个子网不都需要DHCP服务器,,可以用中继代理转发广播请求给DHCP服务器。
2.防止用户误操作,客户机不用手工配置IP
3.避免了IP地址的重复,客户机在子网间移动时,旧的IP地址自动释放以便再次使用。在再次启动客户机时,DHCP服务器会自动为客户机重新配置IP。
4.使用DHCP服务器能够大大减少配置花费的开销和重新配置网络上计算机的时间,服务器可以在指派地址租约时配置所有的附加配置值。
5.管理员可以集中为整个互联网指定通用和特定的子网的IP参数,并且可以定义使用保留地址的客户机参数。
利用DHCP服务器,可以灵活的利用手工分配(由DHCP服务器管理员专门指定的ip地址),自动分配(分配到一个ip地址后永久使用)和动态分配(由DHCP客户机第一次从服务器换取一个ip地址后,并非永久的使用该地址。每次使用完后释放该ip,供其他客户机使用)3种分配方式。有效的解决了IP不够用的问题。
DHCP缺点:
1)IP地址随机性:用户的IP地址是随机分配的,具有不确定性。
2)访问权限变化:如果用户的访问权限是基于IP地址划分的,则访问权限随IP地址不同而变化。
3)不可被访问:通过DHCP获得的IP地址具有不确定性,用户被访问难度较大。
4)应用不连续:如果用户在不同网段的WLAN之间不间断使用网络时,IP地址的改变会造成应用中断。
5)安全性差:外来的网络用户会对网络本身造成安全威胁。
DHCP架构:C/S架构 C:客户机 S:服务器
DHCP服务对应传输层是UDP协议,因为是C/S架构,所以DHCP服务是分别为DHCP客户机占用UDP67号端口,DHCP服务器占用UDP68号端口。
DHCP用途:
1.为内部网络或网络服务供应商自动分配IP地址。
2.为用户或者内部网络管理员作为对所有计算机中央管理的手段。
3.为内部网络用户接受IP租约。
DHCP具有以下功能:
1、保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
2、DHCP应当可以给用户分配永久固定的IP地址。
3、DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
4、DHCP服务器应当向现有的BOOTP客户端提供服务。
一、工作原理---------四次会话:--------------广播进行,先到先得,每个网络中只有一个DHCP
1.客户机在网络中搜索服务器---------DHCP客户端进行IP请求----------广播方式发送DHCP Discover信息:其中包括DHCP客户机的MAC地址和计算机名
2.服务器向客户端响应服务--------DHCP服务器响应请求--------广播或者单播(DHCP 在报文的标志字段有一个广播位,如果 Client 支持接收 Offer 单播报文,那么 Client 就会将发送报文中的广播位设为 0 ,否则为 1则为组播 。)方式发送DHCP Offer消息包含:DHCP客户机的MAC地址; DHCP服务器提供的合法IP地址; 子网掩码; 默认网关(路由) ; 租约的期限; DHCP服务器的IP地址-MAC。因为DHCP客户机还没有IP地址, 所以DHCP服务器使用自己的IP地址作为源地址, 使用255.255.255.255作为目标地址, 使用UDP 68端口作为源端口来广播DHCP OFFER信息
3.客户端向目标服务器发出请求服务-------DHCP客户机选择IP--------广播: DHCP Request消息包括为:该客户机提供IP配置的服务器的服务标识符(IP地址) 。 DHCP服务器查看服务器标识符字段, 以确定它自己是否被选择为指定的客户机提供IP地址, 如果那些DHCP OFFER被拒绝, 则DHCP服务器会取消提供并保留其IP地址以用于下一个IP租约请求。
在客户机选择IP的过程中, 虽然客户机选择了IP地址, 但是还没有配置IP地址, 而在一个网络中可能有几个DHCP服务器, 所以客户机仍然使用0.0.0.0的地址作为源地址, 使用255.255.255.255作为目标地址, 使用UDP 67端口作为目的端口来广播DHCP Request信息。
备注:客户机发送DHCP request通告的原因有两层,第一层是通告给所有的DHCP服务器,让其他没有被选中的DHCP服务器把未使用到的地址进行回收,第二次是通告给被选中的DHCP服务器,这个地址DHCP的客户机要使用了。
4.服务器向客户端提供服务--------DHCP服务器确定租约------单播方式回包
服务器确认租约: DHCP ACK
DHCP服务器接收到DHCP REQUEST消息后, 以DHCPACK消息的形式向客户机广播成功的确认, 该消息包含有IP地址的有效租约和其他可能配置的信息。 虽然服务器确认了客户机的租约请求, 但是客户机还没有收到服务器的DHCPACK消息,所以服务器仍然使用自己的IP地址作为源地址, 使用255.255.255.255作为目标地址, 使用UDP 68端口作为源端口来广播DHCP ACK信息。 当客户机收到DHCP ACK消息时, 它就配置了IP地址, 完成了TCP/IP的初始化。
服务器拒绝租约: DHCP NACK(DHCP NAK)
如果DHCP REQUEST不成功, 例如客户机试图租约先前的IP地址, 但该IP地址不再可用, 或者因为客户机移到其他子网, 该IP无效时, DHCP服务器将广播否定确认消息DHCP NACK。 当客户机接收到不成功的确认时, 它将重新开始DHCP租约过程。
1.(客户机请求ip地址,当一个DHCP客户机启动的时候,客户机还没有ip地址,所以客户机要通过DHCP获取一个合法的地址。此时DHCP客户机以广播的方式 DHCP Discover发现信息来寻找DHCP服务器。)
2.(服务器响应当DHCP服务器接收到来自客户机请求ip地址的信息,它就在自己的ip地址池中查找是否有合法的ip地址服务提供给客户机。如果有,DHCP服务器就将此ip地址坐上标记,加入到DHCP Offer 的消息中,然后DHCP服务器就会广播一则DHCP Offer消息)
3.(客户机选择ip地址,DHCP客户机从接收到的第一个DHCP Offer消息中提取ip地址,发出此ip地址的DHCP服务器将该地址保留,这样该地址就不能再分配给另一个DHCP客户机了。之后DHCP客户机就会向服务器发送DHCP Request消息。)
4.服务器确定租约DHCP服务器接收到DHCP Request消息后,以DHCP ACK消息的形式向客户机广播成功确定,该消息包含有ip地址的有效租约和其他可配置的信息。当客户机收到DHCP ACK消息时,它就配置了ip地址,完成TCP/IP的初始化。
简述:
(1)客户机以广播的形式向服务端发送DHCP Discover信息--------发现阶段
(2)服务端收到消息后确定有可用的合法ip地址就会把ip加入到DHCP Offce中单播出去-------提供阶段
(3)客户机收到广播后选择并请求租用ip地址--------选择阶段
(4)服务端回应确定租约,单播回包-------确定阶段
二、重新登录DHCP的租约过程
DHCP客户机每次重新登录网络时,不需要再发送DHCP Discover信息,而是直接发送包含前一次所分配的ip地址的DHCP Request请求信息。
三、更新租约------都是以单播方式 到达87.5%时会以广播方式
租期达到50%(T1)时,DHCP客户端会自动以单播的方式向DHCP服务器发送DHCP Request报文,请求更新ip地址的租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP Discover报文请求的ip地址。
当租期达到87.5%(T2)时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP Request报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
当租约的100%时, DHCP客户机必须放弃这个IP地址, 重新申请。 如果此时无DHCP服务器可用, DHCP客户机会使用169.254.0.0/16(链路本地地址(link local address)中随机的一个地址, 并且每隔5分钟再进行尝试。
链路本地地址:
产品上要支持LLA,即link-local 地址,Link Local地址也被称为:链路本地地址(link local address),是设备在本地网络中通讯时用的地址,网段为169.254.0.1~169.254.254.255
当DHCP服务器故障,或者DHCP超时,不致于设备没有IP而造成连接不上。
LLA是本地链路的地址,是在本地网络通讯的,不通过路由器转发,因此网关为0.0.0.0。它的掩码为255.255.0.0。
它分为三个阶段,先PROBING,探测网络中某个IP有没有被占用,如果有,则换一个IP重新探测,如果没有则ANNOUNCING,即绑定该IP,向网络中发ARP,公告该IP被我绑定了,如果此时没有冲突,则进入BOUND,表示IP绑定成功。
流程图
详细的工作过程:
首先,在开始Local link时,需要将自已的IP和掩码网关都设为0,并随机生成一个IP,网段在169.254.1.0 to 169.254.254.255这个范围,RFC3927中建议使用MAC来生成IP地址,这样可以使每个设备生成的IP都不一样,将设备同时探测同一个IP的可能性降到了最低。
发送ARP探测包,选择合适的IP地址:将目的IP地址指向要探测的IP,这里假设该IP为A;如果网络中,IP A被绑定,则占用该IP的主机会回应,设备在收到的ARP回应中,如果发现源IP是A,则表示冲突;当然,还有一种情况,可能有其它的设备也在探测这个IP,那么,在这种情况下,选择放弃该IP,重新开始配置。
探测包发完了,并且在规定的时间内没有收到来自源IP为A的主机回应,则认为该IP没有被占用,于是设置本机IP为A,RFC3927 2.5节中描述,地址冲突的检测并不局限于地址选择阶段,在任何时候,如果设备收到一个ARP,其中源IP地址和本机IP一致,但MAC不一致,都将认为这是一个冲突。于是就有了图2中的阶段2。
RFC3927 中的IP冲突检测机制还是很完善的,考虑了多个设备在同时local link时的情况;考虑到每到主机都必须要有一个IP地址,169.254.X.X跟IPV6的fe80开头的地址是作用是一样的。
DHCP地址的重新使用:
DHCP客户端非首次接入网络时,可以重用曾经使用过的地址。
包交互总结:
阶段 | 源MAC | 目标MAC | 源IP | 目标IP |
Discover | PC机的MAC | 全FF(代表是广播帧) | 0.0.0.0 | 255.255.255.255 |
Offer | Dhcp服务器或者中继器路由的MAC | Dhcp客户机的MAC | Dhcp服务器或者中继路由器的IP地址 | 准备分配的IP地址 |
Request | PC机的MAC | 全FF | 0.0.0.0 | 255.255.255.255 |
Ack | Dhcp服务器或者中继器路由的MAC | Dhcp客户机的MAC | Dhcp服务器或者中继路由器的IP地址 | 准备分配的IP地址 |
去包回包:
DHCP在工作过程中涉及到的报文种类及其作用如下:
1、DHCP Discover(发现包):客户端开始DHCP过程的第一个报文,是请求IP地址和其它配置参数的广播报文。
2、DHCP Offer(提供包):服务器对DHCP DISCOVER报文的响应,是包含有效IP地址及配置的单播(或广播)报文。
3、DHCP Request(请求包):客户端对DHCP OFFER报文的响应,表示接受相关配置。客户端续延IP地址租期时也会发出该报文。
4、DHCP Decline(谢绝包):当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止使用该IP地址。
5、DHCP ACK(确认包) :服务器对客户端的DHCP REQUEST报文的确认响应报文。客户端收到此报文后,才真正获得了IP地址和相关的配置信息。
6、DHCP NAK(否定包):服务器对客户端的DHCP REQUEST报文的拒绝响应报文。客户端收到此报文后,会重新开始新的DHCP过程。
7、DHCP Release(释放包):客户端主动释放服务器分配的IP地址。当服务器收到此报文后,则回收该IP地址,并可以将其分配给其它的客户端。
8、DHCP Inform(DHCP通告包):客户端获得IP地址后,发送此报文请求获取服务器的其它一些网络配置信息,如DNS等。
DHCP中继代理
DHCPRelay(DHCPR)DHCP中继(也叫做DHCP中继代理)是一个小程序,其可以实现在不同子网和物理网段之间处理和转发dhcp信息的功能。
如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的ip地址。如果不在同一个物理网段,则需要DHCP Relay Agent(中继代理)。
1、简介
用DHCP Relay代理可以去掉在每个物理的网段都要有DHCP服务器的必要,它可以传递消息到不在同一个物理子网的DHCP服务器,也可以将服务器的消息传回给不在同一个物理子网的DHCP客户机。
2、工作原理
1 当dhcp client 启动并进行dhcp 初始化时,它会在本地网络广播配置请求报文。
2 如果本地网络存在dhcp server,则可以直接进行dhcp 配置,不需要dhcp relay。
3 如果本地网络没有dhcp server,则与本地网络相连的具有dhcprelay 功能的网络设备收到该广播报文后,将进行适当处理并转发给指定的其它网络上的dhcp server。
4 dhcp server 根据dhcp client 提供的信息进行相应的配置,并通过dhcp relay 将配置信息发送给dhcp client,完成对dhcp client 的动态配置。
事实上,从开始到最终完成配置,需要多个这样的交互过程。
1 dhcp relay设备修改dhcp消息中的相应字段,把dhcp的广播包改成单播包,并负责在服务器与客户机之间转换。
2 netcore路由器(2x05)可以作为dhcp relay 代理。
DHCP中继
考虑到成本,无需每个子网都配备一台DHCP服务器,所以DHCP协议应当可以通过路由器或者BOOTP代理透传(DHCP中继)。
由于DHCP请求报文采用广播方式发送报文,因此当DHCP客户端和DHCP服务器处于不同子网时,必须要通过DHCP中继进行通信,最终获取到IP地址。
多个网络上的DHCP客户端可以使用同一个DHCP服务器,既节省了成本,又便于进行集中管理。
为什么需要DHCP中继:------就是客户机与服务端不在同一子网内就需要中继才能让他们通信
1.当DHCP Client与DHCP Server处于不同子网时,client发出的DHCP报文无法到达server。
2.使用DHCP中继,即可实现DHCP client从远程的DHCP server获取ip地址。
通过中继器可以把目的广播地址改为单播地址.--------PC的广播包转为单播包发给DHCP server
DHCP中继代理 的工作流程
注:DHCP client和DHCP relay 间的所有报文,从初始状态获取ip地址时,discover和request都是广播的,offer和ack根据请求报文中的广播标志来决定是广播还是单播,如果请求标注位是广播,则offer和ack就是广播的,否则就是单播的。
接口地址池:根据接口的地址和掩码决定----跟接口绑定
全局地址池:任意规划地址
DHCP欺骗:
DHCP Snooping------防止DHCP饿死和DHCP欺骗
DHCP Snooping概述
DHCP Snooping是 DHCP 的一种安全特性,主要应用在 交换机 上,作用是屏蔽接入网络中的非法的 DHCP 服务器。即开启 DHCP Snooping 功能后,网络中的客户端只有从管理员指定的 DHCP 服务器获取 IP 地址。
DHCP在设计上未从分考虑安全因素,从而留下了许多安全漏洞,使得DHCP很容易受到。实际网络中,针对DHCP的gongji行为主要有以下三种:
*DHCP饿死gongji,仿冒DHCP Server gongji,DHCP中间人gongji*,
DHCP饿死gongji
gongji原理:gongji者持续大量的向DHCP Server申请地址,直到耗尽DHCP Server地址池中的IP地址,导致DHCP Server不能给正常的用户进行分配。
解决方法:通过校验CHADDR与MAC值。
仿冒DHCP Servergongji。
gongji原理:gongji者仿冒DHCP Server,向客户端分配错误的IP地址及提供错误的网关地址等,导致客户端无法正常访问网络。
解决办法:通过配置trust与untrust口区分转发。
中间人gongji
gongji原理:gongji者利用ARP机制,让PC-A学习到IP-S与MAC-B的映射关系,又让Server学习到IP-A与MAC-B的映射关系。如此一来,PC-A与Server之间交付的IP报文都会经过gongji者中转。
解决办法:开启ARP检测。
课件:
DHCP配置(路由器)
R1_DHCP(config)#ip dhcp pool vpc6_dhcp-----定义地址池
R1_DHCP(dhcp-config)#network 192.168.20.0 /24-----设定ip地址分配范围
R1_DHCP(dhcp-config)#default-router 192.168.20.254----设定获取网关地址
R1_DHCP(dhcp-config)#dns-server 8.8.8.8-----设定获取dns服务器地址
R1_DHCP(config)#ip dhcp excluded-address 192.168.200.101 192.168.200.254----用于排除不用的ip地址范围
DHCP relay配置-----用于跨网段将dhcp请求广播包转换为单播包
R3(config)#int e0/0-----此接口为网关接口
R3(config-if)#ip helper-address 192.168.10.250-----------------此时单播源ip地址为e0/0的ip,目标ip为192.168.10.250(dhcp服务器ip)
1、路由器充当DHCP服务器:
在小型网络中,可以使用路由器作为dhcp服务器,用于给LAN内的各台计算机自动分配IP地址,从而减轻网络管理员的工作负担。
配置:
Router(config)#ip dhcp excluded-address 192.168.10.1 192.168.10.10 ————排除地址
Router(config)#ip dhcp pool name ————设置名称
Router(dhcp-config)#network 192.168.10.0 255.255.255.0 ————配置地址池
Router(dhcp-config)#default-router 192.168.10.1 ————配置网关
Router(dhcp-config)#dns 10.10.10.10 ————配置DNS
2、服务器与客户机不在同一个网段内:
DHCP中继:由于 dhcp 服务依赖于广播,当 dhcp 服务器和 dhcp 客户机分别在不同的广播域中时,可以通过配置路由器的 dhcp 中继服务(ip helper-address),使得 dhcp 客户机发出的广播经路由器转为单播,发送给dhcp服务器。
配置:
Router(config)#int g0/0 ————客户机所在的接口
Router(config-if)#ip helper-address 192.168.2.5 ————服务器的ip地址
3、三层交换机:
在实际网络应用环境中,此位置通常不是路由器,而是一台三层交换机如果出现dhcp服务器和dhcp客户机不在同一个广播域的情况在三层交换机的vlan虚接口上同样可以做dhcp中继服务
三层交换机作为dhcp服务器,给各个vlan自动分配ip地址。其配置过程与路由器做dhcp服务器基本一致。
Switch(config)#int vlan 10
Switch(config-if)#ip helper-address 192.168.2.5
4、将路由器配置为 DHCPv4 客户端
配置:
Router(config)# interface g0/1
Router(config-if)# ip address dhcp
Router(config-if)# no shutdown