DHCP的定义:

动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

 

DHCP的工作模式

1.人工分配: 即人工的将mac和ip进行绑定,这样做的缺点是地址利用率低

2.自动分配: 一次分配永久使用 ,同样具有上面的缺陷

3.动态分配: dhcp客户端从服务器得到地址后并非永久使用,而是有一定的租约,租约到期地址就释放,当然在使用期间也会不断的更新租约,已达到地址的充分利用

 

DHCP的工作原理:

 

1. 发现阶段,即DHCP客户端寻找DHCP服务器的阶段。客户端以广播方式发送DHCPDISCOVER包,只有DHCP服务器才会响应。 2. 提供阶段,即DHCP服务器提供IP地址的阶段。DHCP服务器接收到客户端的DHCPDISCOVER报文后,从IP地址池中选择一个尚未分配的IP地址分配给客户端,向该客户端发送包含租借的IP地址和其他配置信息的DHCPOFFER包。 3. 选择阶段,即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该客户端发送DHCPOFFER包,客户端从中随机挑选,然后以广播形式向各DHCP服务器回应DHCPREQUEST包,宣告使用它挑中的DHCP服务器提供的地址,并正式请求该DHCP服务器分配地址。其它所有发送DHCPOFFER包的DHCP服务器接收到该数据包后,将释放已经OFFER(预分配)给客户端的IP地址。 如果发送给DHCP客户端的DHCPOFFER包中包含无效的配置参数,客户端会向服务器发送DHCPCLINE包拒绝接受已经分配的配置信息。 4. 确认阶段,即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCPREQUEST包后,便向客户端发送包含它所提供的IP地址及其他配置信息的DHCPACK确认包。然后,DHCP客户端将接收并使用IP地址及其他TCP/IP配置参数。

下面通过一些案例来详细说明:

首先来做一个 简单的作用域:

拓扑:

安装dhcp软件包

配置/etc/dhcpd.conf 用vim编辑器打开后是个空文档 需要从样例文件中读取,如下图:

配置后的结果

检查配置并启动服务:

主机可通过dhcp获得地址

通过查看dhcp服务器的日志可知道主机获得地址的过程

增加mac地址ip地址绑定

重启服务

Xp主机网卡关掉重启测试结果

下面我们来做一个超级作用域

为了做出测试的结果,把两个作用域的地址池都设为一个地址

重启服务:

测试结果:

最后从实验结果来看物理机先从第一个地址池中得到地址,然后虚拟机的xp只有从第二个地址池中得到地址,从而以显示了超级作用域的作用,可以解决地址不够用的问题

 

 

 

DHCP中继案例

说明:DHCP服务器用linux做 路由器也用linux系统代替 开启linux系统中继功能,将两台主机放在不同的网络区域去自动获得地址来验证

 

#以下是在dhcp服务器上的配置,在linux系统上编辑 /etc/dhcpd.conf文件,建立三个作用域,3.0和2.0分别负责主机的dhcp分配,1.0是服务器网段,建立一个空作用域

ddns-update-style interim;

ignore client-updates;

subnet 192.168.2.0 netmask 255.255.255.0 {                -----声明作用域

# --- default gateway

        option routers                  192.168.2.1;

        option subnet-mask              255.255.255.0;

        option nis-domain               "domain.org";

        option domain-name              "tec";                       ----作用域名称

        option domain-name-servers      222.88.88.88;

        option time-offset              -18000; # Eastern Standard Time

#       option ntp-servers              192.168.1.1;

#       option netbios-name-servers     192.168.1.1;

# --- Selects point-to-point node (default is hybrid). Don't change this unless

# -- you understand Netbios very well

#       option netbios-node-type 2;

        range dynamic-bootp 192.168.2.2 192.168.3.99;             ----作用域地址池

        default-lease-time 21600;

        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address

        host ns {

                next-server marvin.redhat.com;

                hardware ethernet 12:34:56:78:AB:CD;

                fixed-address 207.175.42.254;                          -----主机绑定不再配置

        }

}

subnet 192.168.3.0 netmask 255.255.255.0 {            ------声明另一个作用域                 下面为另一作用域的配置

        option routers                  192.168.3.1;

        option subnet-mask              255.255.255.0;

        option nis-domain               "domain.org";

        option domain-name              "final";

        option domain-name-servers      222.88.88.88;

        range dynamic-bootp 192.168.3.2 192.168.3.99;

        default-lease-time 21600;

        max-lease-time 43200;

  }

subnet 192.168.1.0 netmask 255.255.255.0{}

 

# DHCP Server Configuration file.

#   see /usr/share/doc/dhcp*/dhcpd.conf.sample 

#

利用setup将eth0地址配置成192.168.1.100 子网掩码 255.255.255.0 网关 192.168.1.1

 

下面为路由器的配置,由linux系统代替,三块网卡分别在不同的区域,vm1 vm2 vm3

Router

[root@localhost ~]#

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0c:29:08:ac:6c

ONBOOT=yes                                                编辑文件给eth0配置地址和掩码

IPADDR=192.168.1.1

NETMASK=255.255.255.0

TYPE=Ethernet

~                                                                                                                                                                     

~             

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth1

BOOTPROTO=none

IPADDR=192.168.2.1

NETMASK=255.255.255.0                           编辑文件给eth1配置地址和掩码

ONBOOT=yes

HWADDR=00:0c:29:08:ac:76

~                                                                                                                                                                     

~                                                                                                                                                                     

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth2

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth2

BOOTPROTO=none

IPADDR=192.168.3.1

NETMASK=255.255.255.0

ONBOOT=yes                                               编辑文件给eth20配置地址和掩码

HWADDR=00:0c:29:08:ac:80

~                                                                                                                                                                     

~[root@localhost ~]# service network restart                     将网卡服务重启

Shutting down interface eth0:                              [  OK  ]

Shutting down interface eth1:                              [  OK  ]

Shutting down interface eth2:                              [  OK  ]

Shutting down loopback interface:                          [  OK  ]

Bringing up loopback interface:                            [  OK  ]

Bringing up interface eth0:                                [  OK  ]

Bringing up interface eth1:                                [  OK  ]

Bringing up interface eth2:                                [  OK  ]                                                                                                                                                                     

~                 ~                                                                                                                                                                     

~[root@localhost ~]# vim /etc/sysconfig/dhcrelay              将dhcp中继功能打开

# Command line options here

INTERFACES="eth0 eth1 eth2"

DHCPSERVERS="192.168.1.100"

~                                                                                                                                                                     

~  

[root@localhost ~]# service dhcrelay start                           启动dhcp中继

Starting dhcrelay:                                         [  OK  ]

[root@localhost ~]#        

 

 

下面为测试结果           将两个系统网卡分别放在虚拟机的不同区域得到不同网段的地址            

将一系统网卡放在2.0区域得到以下结果

以下是将网卡放在2.0作用域的到如下结果