计算机网络学习日常Linux运维开发

DHCP协议

2018-07-18  本文已影响21人  InnocenceYWQ

DHCP协议原理


DHCP动态主机配置协议
  TCP/IP协议想要运行正常的话,网络中的主机和路由器不可避免地需要配置一些信息(如接口的IP地址等)。有了这些配置信息主机/路由器才能提供/使用特定的网络服务。
  主机信息的必要元素有:IP地址、子网掩码、DNS服务器IP地址
  TCP/IP协议配置主机信息主要有三种方法:

  1. 客户主机比服务主机移动更频繁
  2. 服务主机需要提供更可靠的服务,其配置信息应该减少对其他系统/主机的依赖
  3. 客户主机比服务主机的数量要多得多。
  4. 客户主机使用者的网络配置知识比服务主机的使用者低

DHCP协议由来
  DHCP有Bootp协议发展而来。Bootp协议提供了有限的主机信息配置,且主机信息已经配置就很难被修改。DHCP提供 几乎所有的主机信息的配置,且引入了租约等概念,使得主机信息能够动态发生变化。 DHCP向后兼容Bootp。
  DHCP基于UDP/IP传输。DHCP服务器使用端口号67,DHCP 客户端使用端口号68.

DHCP 协议内容

DHCP 主要分为两部分: 地址的管理 和 配置信息的传递

DHCP 地址管理

地址池 与 地址租约

                   
DHCP服务器会维护一个 IP地址池,DHCP从地址池从取出一个IP回应给。
  
DHCP客户端。在地址分配时,DHCP服务器也会指定回应给DHCP客户端的 
 
IP地址的租约期,该地址只有在该租约期内可用,不过DHCP客户端可用在租 
 
约期内请求延长租约(更新租约期)

DHCP协议数据包格式
  学习DHCP协议不能单纯学习协议本身,还必须连带了解它的封包结构,之所以这么说,是因为DHCP是一个特殊的"服务发现"类型的协议,它用于客户端"获取某种资源",所以它的封包格式具有一定的特殊性

1.jpg
其中:
1. 链路层头: 承载报文的链路层信息头,常见的有Ethernet_II格式、802.1Q格式、 IEEE802.3格式、令牌环链路层头格式等。
2. IP头: 标准的IP协议头,IPV4中长度为20bytes,包括了SrcIp,DstIp等信息。
3. UDP头: 8bytes,包括了SrcPort,DstPort,报文长度及UDP校验和等信息。
4. DHCP报文:具体的DHCP报文内容。

由于DHCP协议是初始化协议,更简单的说,就是让终端获取IP地址的协议,既然终端连IP地址都没有,何以能够发出IP报文呢?SERVER给CLIENT回送的报文该怎么封装呢?带着这些疑问,继续学习
为了解决这个问题,DHCP报文的封装采取了如下措施:

1. 首先链路层的封装必须是广播形式,即让在同一物理子网中的所有主机都能够收到这个报文 
2. 由于终端目前没有IP地址,IP头中的SrcIp规定填为全0。
3、当终端发出DHCP请求报文,它并不知道DHCP SERVER的IP地址,因此IP头中的DstIp
填为有限的子网广播IP——全1(广播),以保证DHCP SERVER的IP协议栈不丢弃这个报文
4. 上面的措施保证了DHCP SERVER能够收到终端的请求报文,但仅凭链路层和IP层信息,
DHCP SERVER无法区分出DHCP报文,因此终端发出的DHCP请求报文的UDP层中的SrcPort 为68,DstPort为67。
即DHCP SERVER通过知名端口号67来判断一个报文是否是DHCP报文
5. DHCP SERVER给终端的响应报文将会根据DHCP报文中的内容决定是广播还是单播,一般都是广播形式:
    5.1 广播封装时:
        5.1.1 链路层的封装必须是广播形式 
        5.1.2 IP头中的DstIp填为有限的子网广播IP——全1(广播)
    5.2 单播封装时
        5.2.1 链路层的封装是单播形式(因为客户端在发送DHCP数据包的时候在链路层帧头填写了
         sourceMAC)
    5.2.2 IP头中的DstIp填为有限的子网广播IP(全1)、或者是即将分配给用户的IP地址
        (当终端能够接收这样的IP报文时)

DHCP报文类型
DHCP共有八种报文,不同报文之间的区别除了DHCP数据包本身之外,在封包上(UDP头,IP头、链路层头)也有一些差别

1. DHCP Discover
DHCP客户端请求地址时,并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送请求报文,
这个报文成为Discover报文,目的是发现网络中的DHCP服务器,所有收到Discover报文的DHCP服务器都会发送回应报文,
DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。
2. DHCP Offer
DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和
其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给用户(可以广播、也可以单播),告知用户
本服务器可以为其提供IP地址。(注意,只是告诉client可以提供,是预分配,还需要client通过ARP检测该IP是否重复)
3. DHCP Request
客户端会在两种情况下发送DHCP Request
    1) DHCP客户端可能会收到来自DHCP服务器的很多Offer,所以必须在这些回应中选择一个。Client通常选择第一个
回应Offer报文的服务器作为自己的目标服务器,并回应一个广播Request报文,通告选择的服务器。注意,
"Client通常选择第一个回应Offer报文的服务器作为自己的目标服务器"这里存在一个安全问题,如果我们的
伪DHCP服务器能比原始DHCP服务器先发送Offer数据包,就能达到欺骗的目的,从而劫持目标用户的流量
    2) 获取DHCP客户端成功获取IP地址后,在地址使用租期过去1/2时,会向DHCP服务器发送单播Request
报文续延租期,如果没有收到DHCP ACK报文,在租期过去3/4时,发送广播Request报文续延租期。
4. DHCP ACK
DHCP服务器收到Request报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录
(即之前的预分配过程中登记的那个MAC),如果有则发送ACK报文作为回应,通知用户可以使用分配的IP地址。
5. DHCP NAK
如果DHCP服务器收到Request报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,
则发送NAK报文作为回应,通知用户无法分配合适的IP地址。
6. DHCP Release
当用户不再需要使用分配IP地址时,就会"主动"向DHCP服务器发送Release报文,告知服务器用户不再需要
分配IP地址,DHCP服务器会释放被绑定的租约(在数据库中清除某个MAC对某个IP的租约记录,这样,这个IP就可以分配给下一个请求租约的MAC)
7. DHCP Decline
DHCP客户端收到DHCP服务器回应的ACK报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于
其他原因导致不能使用,则发送Decline报文,通知服务器所分配的IP地址不可用,我们在手工设置静态IP、
或者DHCP分配中有时会遇到"检测到IP冲突"的提示就是因为客户端利用ARP机制来在当前内网中确认当前指定的IP是否已经被占用
8. DHCP Inform
DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送Inform报文向服务器进行请求,
服务器收到该报文后,将根据租约进行查找,找到相应的配置信息后,发送ACK报文回应DHCP客户端

DHCP服务概述

DHCP服务运行原理

图片2.png

DHCP Client发现阶段:
即DHCP客户端寻找DHCP服务端的过程,对应于客户端发送DHCP Discovery,因为DHCP Server对应于DHCP客户端是未知的,所以DHCP 客户端发出的DHCP Discovery报文是广播包,源地址为0.0.0.0目的地址为255.255.255.255。网络上的所有支持TCP/IP的主机都会收到该DHCP Discovery报文,但是只有DHCP Server会响应该报文。

[root@centos7 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
DHCP Server 提供阶段:

DHCP Server提供阶段,即为DHCP Server响应DHCP Discovery所发的DHCP Offer阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer提供信息

DHCP Client 确认阶段:

即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCPoffer提供信息,则DHCP客户机只接受第一个收到的DHCPoffer提供信息,然后它就以广播方式回答一个DHCPrequest请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址

DHCP Server确认阶段:

即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址

DHCP Client重新登录网络:

当DHCP Client重新登录后,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

DHCP Client更新租约:

DHCP获取到的IP地址都有一个租约,租约过期后,DHCP Server将回收该IP地址,所以如果DHCP Client如果想继续使用该IP地址,则必须更新租约。更新的方式就是,当当前租约期限过了一半后,DHCP Client都会发送DHCP Renew报文来续约租期。

通过以上过程DHCP的客户端和服务端就可以建立连接,服务端为客户端分配IP地址等网络相关信息。
上一篇下一篇

猜你喜欢

热点阅读