Linux的DHCP深度学习(DHCP服务器搭建)

DHCP协议:动态主机配置协议

DHCP是基于C/S架构的协议

  • C/S架构:Client/Server          --- 客户端/服务端
  • B/S架构:browser/server       ---浏览器/服务器

DHCP的客户端的端口号是:68,服务端的端口号是:67

HDCP数据帧结构:

 OP:op=1,客户端发送给服务端的封包;op=2,服务端发送给客户端的封包;还有一个特殊的情况,就是客户端request时的特殊标识

HTYPE: 硬件类别

HLEN: 硬件地址长度

HOPS: 跳数,每经过一次转发+1,若在同一网内,为0(客户端的初始设置为0)

FLAGS:(从0到15共16 bits)
        最左1Bit为1时表示:服务端将以广播方式传送封包给客户端
        最左1Bit为0时表示:服务端将以单播方式传送封包给客户端

HDCP的工作流程:

首次连接:(这个时候有四个阶段)

发现阶段 (这个阶段主要发送方为客户端客户端 ---> 服务端

        此时是以客户端为主要发送者,以广播形式发送 DHCP-Discover包给服务端

提供阶段 (这个阶段主要发送方为服务端服务端 ---> 客户端

        服务器在收到客户端发来的请求后,以单播/广播形式发送DHCP-offer包 给客户端
        (offer包内会携带一个有效的ip地址,服务器会暂时为DHCP客户端保留这个ip)

选择阶段(这个阶段主要发送方为客户端客户端--->服务端) 

        客户端在收到服务器发来的信息后,客户端以广播形式发送DHCP-request包给服务端,请求使用这个ip地址
        (当客户端获得多个offer的包时,会选择第一个获取的offer包中的ip地址作为请求ip)

确认阶段 (这个阶段主要发送方为服务端服务端--->客户端

         服务端在收到客户端的请求后,会以单播/广播包发送DHCP-ACK包/DHCP-NCK包给客户端  (DHCP-ACK包表示允许客户端使用此ip,DHCP-ACK包则为拒绝客户端使用这个ip) 

再次连接:

客户端因为一些特殊原因断开了DHCP连接,此时需要重新向服务器申请ip地址(最好是上一次链接的ip),所以再次连接时,会直接从选择阶段开始

①客户端以广播形式向服务器发送DHCP-request包 

  • 请求获取上次使用的ip地址

②服务器以单播/广播包形式发送DHCP-ACK包/DHCP-NAK包

  • DHCP-ACK表示允许使用request请求的ip地址(上次断开连接使用的地址)
  • DHCP-NAK表示需要重新获取新的ip地址(此时服务器重新发送offer包)

特殊的包:DHCP-Release数据包   ---- 客户端主动释放ip地址

DHCP的几个数据包: 

DHCP Discover:客户端开始DHCP过程发送的包,是DHCP协议的开始。以广播的方式发送DHCP DISCOVER报文。来寻找局域网中的DHCP服务器。源地址为0.0.0.0 目的地址为255.255.255.255, 网络上所有支持TCP/IP的主机都会收到该DHCP DISCOVER报文,但是只有DHCP Server会响应该报文。

DHCP Offer:服务器接收到DHCP DISCOVER之后做出的响应,通过解析报文,查询dhcpd.conf配置文件,如果在地址池中能找到合适的IP地址,DHCP Server会给DHCP Client发送Offer报文。它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符自己其他信息。

如果存在多个DHCP服务器,单个服务器依然会发送多个DHCP OFFER报文。

DHCP Request:客户端对于服务器发出的DHCP OFFER所做出的响应,在续约租期的时候同样会使用。Client根据先收到的Offer报文来决定使用哪个服务器提供的DHCP的地址。(优先先到的offer报文)然后根据这个Offer提供的地址信息,发送Request报文请求。

  • 客户端初始化时,发送广播的DHCP Request报文来回应服务器的DHCP Offer报文
  • 客户端重启初始化后,发送广播的DHCP的DHCP Request报文来确认先前被分配的IP地址等配置信息。
  • 当客户端已知和某个IP地址绑定后,发送单播的DHCP Request报文来延长IP地址租期。

DHCP ACK:服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给他的IP和其他信息可以被允许使用。服务器接收到request报文以后,确认地址池中的这个地址没有被分配,如果没有被分配就回复ACK报文,如果被分配了,就会回复DHCP-NAK报文,告诉Client地址已经被分配了

DHCP NAK :表示服务器拒绝了客户端的请求

DHCP RELEASE :一般出现在客户端关机、下线等情况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址,当服务器收到此报文后,可将这个IP地址分配给其他客户端

DHCP INFORM:客户端发出的服务器请求一些信息的报文。如DNS, 网关

DHCP DECLINE:客户端发现服务器分配的IP地址无法使用(IP地址冲突),将发出此报文,通知服务器禁止使用该IP地址

 关于DHCP的租期问题:(租期24H)

①:T1 --- 租期的50%(12h)  DHCP客户端(PC) ---> DHCP服务器 发送DHCP-request包(单播) <续约请求>
②:T2 --- 租期的87.5%(21h)DHCP客户端(PC) ---> DHCP服务器 发送DHCP-request包(广播) <续约请求>
如果时间结束服务端无条件释放ip地址,服务端重新获取ip地址

DHCP服务器按照如下优先次序为客户端选择IP地址:

  1. DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址
  2. 客户端以前曾经使用过的IP地址,即客户端发送的DHCPDISCOVER报文中请求IP地址选项的地址
  3. 在DHCP地址池中,在顺序查找可供分配的IP地址中,最先找到的IP地址
  4. 如果在DHCP地址池中未找到可供分配的IP地址,则依次查询超过租期、发生冲突的IP地址,如找到可用IP地址,则分配否则报告错误

DHCP客户端申请续约的步骤:

  1. 在DHCP客户端的IP地址租约期限达到50%时,DHCP客户端会向为它分配IP地址的DHCP服务器以单播方式发送DHCPREQUEST请求报文,以期进行IP租约的更新
  2. 如果DHCP服务器同意续约,则DHCP服务器向客户端以单播方式返回DHCP ACK报文,通知DHCP客户端已经获得新IP租约,可继续使用此IP地址;相反,如服务器不同意续约,则DHCP服务器以单播方式返回DHCP NAK报文,通知DHCP客户端不能获得新的租约。此IP地址不可以再分配给该客户端
  3. 如上面的续约申请失败,则DHCP客户端还会在租约期限达到87.5%时,再次以单播方式发送REQUEST请求报文进行续约。

在linux上的具体操作:

  • DHCP的安装

//DHCP的安装
[root@localhost /]# yun clean all                  --- 清理缓存
[root@localhost /]# yun makecache                  --- 建立缓存
[root@localhost /]# yum install dhcp-server -y

//在DHCP装载完成后,查看/etc/dhcp
[root@localhost ~]# cd /etc/dhcp/
[root@localhost dhcp]# ls
dhclient.conf  dhclient.d  dhcpd6.conf  dhcpd.conf
//此时会发现有四个拓展包

//通常我们使用的dhcp.conf进行dhcp的分配划分
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 

//相关的参考文件在/usr/share/doc/dhcp-server/dhcpd.conf.example 下有模板
[root@localhost ~]# cd /usr/share/doc/dhcp-server/
[root@localhost dhcp-server]# ls
dhcpd6.conf.example  dhcpd.conf.example  dhcp-lease-list.pl  ldap
  • DHCP的配置模板

//设置最短存活时间和最大存活时间
default-lease-time 600;
max-lease-time 7200;
//设置为dns不更新,且不主动更改主机名
ddns-update-style none;
ignore client--updates;
//设置dhcp网络段192.168.220.0 而255.255.255.0为反掩码
subnet 192.168.220.0 network 255.255.255.0{
        option routers 192.168.220.2;            //网关
        option subnet-mask 255.255.255.0;        //反掩码
        range  192.168.220.100 192.168.220.120   //dhcp获得的网络主机位范围
}
subnet 192.168.230.0 network 255.255.255.0{
        option routers 192.168.230.2;
        option subnet-mask 255.255.255.0;
        range 192.168.230.200 192.168.230.220
}
//配置固定网络位
host XX{   
        hardware ethernet “shebeiming”     //配置ens设备号
        fixed-address 192.168.220.200      //设置固定主机位
}

练习:

  • 单网端dhcp配置

//在dhcp.conf配置单网段
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 
//设定不主动更改地址
ddns-update-style none;
ignore client--updates;
//设置租期
default-lease-time 600;
max-lease-time 7200;
//设置网段192.168.220.XXX
subnet 192.168.220.0 network 255.255.255.0{
        option routers 192.168.220.2;
        option subnet-mask 255.255.255.0;
        range  192.168.220.100 192.168.220.120
}

//此时绑定的是nat
  • 增加网卡,多网段dhcp配置

//设置网段信息,第一个为192.168.220.XXX(nat),一个为192.168.230.XXX(网卡)
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 
ddns-update-style none;
ignore client--updates;
default-lease-time 600;
max-lease-time 7200;
//配置192.168.220.XXX
subnet 192.168.220.0 network 255.255.255.0{
        option routers 192.168.220.2;
        option subnet-mask 255.255.255.0;
        range  192.168.220.20 192.168.220.30
}
//这个绑定的是nat

//配置192.168.230.XXX,需要配置一个新网段接口设备
subnet 192.168.230.0 netmask 255.255.255.0 {
       range 192.168.230.20  192.168.225.30;
}

//这个绑定的是网卡
  • 固定主机dhcp配置

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 
ddns-update-style none;
ignore client--updates;
default-lease-time 600;
max-lease-time 7200;
//配置固定地址192.168.220.200,并设置固定的设备
host XX{
        hardware ethernet “XXX”
        fixed-address 192.168.220.200
}


//XXX:网卡的mac地址

问题 :

问题1:在练习增加网卡,多网段dhcp配置这个题目时,会出现一个问题.

        此时命名为192.168.230.XXX网段,如果此时断开连接,重新DHCP连接,会发现这个时候网络连接耗时很长,原因:客户端在请求原来网段192.168.220.XXX,此时服务器发现并没有这个网段,于是重新进行DHCP协议(赋予新网段192.168.230.XXX)

[这也是很多时候,在断开DHCP连接后,发现重新获得网段时间较快]

问题2:如果使用DHCP获取完地址后,关闭DHCP,此时地址会不会断开?

        DHCP主要是提供地址协议,作用就是提供一个ip地址,所以在获得地址后,断掉dhcp,此时地址并不会消失,还能连接

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值