文档章节

DHCP服务

王弘毅
 王弘毅
发布于 2016/11/22 00:19
字数 2167
阅读 26
收藏 0
点赞 0
评论 0

Dynamic Host Configuration Protocol  动态主机配置协议

DHCP服务器工作原理:

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会响应该报文。

注意:客户端执行DHCP DISCOVER 后,如果没有DHCP 服务器响应客户端的请求,客户端会随机使用169.254.0.0/16 网段中的一个IP 地址配置本机地址。

169.254.0.0/16是windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段。

早先的Linux上并不会产生这条路由,现在有这条路由大概是为了和windows兼容。

[root@xuegod63 ~]# 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报文来续约租期。

【安装之前,虚拟机环境,分别添加1块网卡,并且和主网独立的网卡】

安装DHCP服务:

[root@why188 ~]# yum install -y dhcp*
[root@why188 ~]# rpm -qa|grep dhcp
dhcp-common-4.1.1-51.P1.el6.centos.x86_64
dhcp-4.1.1-51.P1.el6.centos.x86_64
dhcp-devel-4.1.1-51.P1.el6.centos.x86_64

修改配置文件:

【此时服务是重启不起来的,启动失败的原因是 dhcp服务器配置的IP地址和默认配置文件里定义的地址段不相同。在启动DHCP服务之前,需要给DHCP Server配置一个静态的IP地址】

保证开机启动:

chkconfig dhcpd on   #配置的服务要保证开机启动

模版配置文件模版

/usr/share/doc/dhcp-4.1.1 /dhcpd.conf.sample【一切以.sample】
cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

dhcpd.conf内容

说明:

dhcp 范本配置文件内容包含了部分参数、声明以及选项的用法,其中注释部分可以放在任何位

置,并以“#”号开头,当一行内容结束时,以“;”号结束,大括号所在行除外

概念与协议:

作用域:可以分配IP的范围 subnet

地址池:可以分配给客户端的IP,range包括的IP

保留地址:指定某个客户端使用一个特定IP,通过host配置的

租约(时间):客户端可以使用这个IP地址的时间

root@why188 dhcp-4.1.1]# cat /etc/dhcp/dhcpd.conf
#dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0{-----------IP作用域,为地址分配
range 192.168.1.100 192.168.1.200;------------------地址池
option domain-name-servers 192.168.1.1;-------------指定DNS服务器
option domain-name "why";---------------------------指定默认域
option routers 192.168.1.1;-------------------------客户端指定默认网关
option broadcast-address 192.168.1.255;-------------广播地址
default-lease-time 600;-----------------------------租约时间最大值
max-lease-time 7200;--------------------------------默认IP续租时间
}

DHCP服务端配置静态IP:

[root@why188 dhcp-4.1.1]# ifconfig eth1 192.168.1.20/24

eth1      Link encap:Ethernet  HWaddr 00:50:56:3E:67:31

          inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:fe3e:6731/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:971 errors:0 dropped:0 overruns:0 frame:0

          TX packets:213 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:128066 (125.0 KiB)  TX bytes:37422 (36.5 KiB)

启动服务:

[root@why188 dhcp-4.1.1]# /etc/init.d/dhcpd start

Starting dhcpd:                                            [  OK  ]

添加开机启动服务:

[root@why188 dhcp-4.1.1]# chkconfig dhcpd on

[root@why188 dhcp-4.1.1]# chkconfig --list |grep dhcpd
dhcpd              0:off    1:off    2:on    3:on    4:on    5:on    6:off
dhcpd6             0:off    1:off    2:off    3:off    4:off    5:off    6:off

配置客户机网络环境:

【配置客户端虚拟机网络环境】

复制网卡配置文件:

cd /etc/sysconfig/network-script/
cp ifcfg-eth0 ifcfg-eth1
vim ifcfg-eth1---------删除网卡mac地址,删除UUID,修改BOOTPROTO=dhcp
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
IPV6INIT=no
USERCTL=no

DHCP client重启网络服务,通过获取IP地址:

[root@why189 network-scripts]# service network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down interface eth1:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 192.168.0.189 is already in use for device eth0...

                                                           [  OK  ]
Bringing up interface eth1:

Determining IP information for eth1... done.
                                                           [  OK  ]
[root@why189 network-scripts]# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:0C:29:69:8C:F9 
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe69:8cf9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:807 errors:0 dropped:0 overruns:0 frame:0
          TX packets:414 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:119950 (117.1 KiB)  TX bytes:50698 (49.5 KiB)

查看DNS和域名:

[root@why189 etc]# cat resolv.conf
; generated by /sbin/dhclient-script
search why
nameserver 192.168.1.1

服务端查看租约信息:

[root@why188 etc]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.1.1-P1
lease 192.168.1.100 {
  starts 6 2016/11/19 19:39:18;
  ends 6 2016/11/19 19:49:18;
  tstp 6 2016/11/19 19:49:18;
  cltt 6 2016/11/19 19:39:18;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:69:8c:f9;

}

固定DHCP client IP方法:【通过IP地址和mac地址绑定】

在DHCP Server dhcpd.conf 配置文件中添加:⒈host 声明;⒉hardware;⒊fixed-address

找到对应的子网范围:

在原有的subnet中添加一个host xxx

比如:

[root@why188 ~]# cat /etc/dhcp/dhcpd.conf
#dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0{
range 192.168.1.100 192.168.1.200;
option domain-name-servers 192.168.1.1;
option domain-name "why";
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
host why188{---------------------------------添加hostXXX
hardware ethernet 00:50:56:25:C1:78;---------添加mac地址
fixed-address 192.168.1.115;-----------------添加绑定的固定IP
}
}

修改完后重启服务:

[root@why188 ~]# /etc/init.d/dhcpd restart
DHCP Client:
[root@why189 log]# service network restart

DHCP在message中整个通信过程:

/var/log/message
Nov 20 05:30:43 why189 abrtd: Init complete, entering main loop
Nov 20 05:35:13 why189 dhclient[1389]: DHCPREQUEST on eth1 to 192.168.1.20 port 67 (xid=0x2fbe697e)
Nov 20 05:35:13 why189 dhclient[1389]: DHCPACK from 192.168.1.20 (xid=0x2fbe697e)
Nov 20 05:35:15 why189 dhclient[1389]: bound to 192.168.1.110 -- renewal in 285 seconds.
Nov 20 05:40:00 why189 dhclient[1389]: DHCPREQUEST on eth1 to 192.168.1.20 port 67 (xid=0x2fbe697e)
Nov 20 05:40:00 why189 dhclient[1389]: DHCPNAK from 192.168.1.20 (xid=0x2fbe697e)
Nov 20 05:40:00 why189 dhclient[1389]: DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 3 (xid=0x49194d03)
Nov 20 05:40:00 why189 dhclient[1389]: DHCPOFFER from 192.168.1.20
Nov 20 05:40:00 why189 dhclient[1389]: DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x49194d03)

 

© 著作权归作者所有

共有 人打赏支持
王弘毅
粉丝 3
博文 3
码字总数 2427
作品 0
武汉
程序员

暂无相关文章

JDK1.6和JDK1.7中,Collections.sort的区别,

背景 最近,项目正在集成测试阶段,项目在服务器上运行了一段时间,点击表格的列进行排序的时候,有的列排序正常,有的列在排序的时候,在后台会抛出如下异常,查询到不到数据,而且在另外一...

tsmyk0715 ⋅ 12分钟前 ⋅ 0

spring RESTful

spring RESTful官方文档:http://spring.io/guides/gs/rest-service/ 1. 可以这么去理解RESTful:其实就是web对外提供的一种基于URL、URI的资源供给服务。不是一个原理性知识点。是一个方法论...

BobwithB ⋅ 14分钟前 ⋅ 0

C++ 中命名空间的 5 个常见用法

相信小伙伴们对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。 命名空间在1995年被引入到 c++ 标准中,通常是这样定义的: 命名...

柳猫 ⋅ 16分钟前 ⋅ 0

@Conditional派生注解

@Conditional派生注解(Spring注解版原生的@Conditional作用) 作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效; @Conditional扩展注解 作用(判...

小致dad ⋅ 17分钟前 ⋅ 0

适配器模式

适配器模式 对象适配器 通过私有属性来实现的类适配器 通过继承来实现的接口适配器 通过继承一个默认实现的类实现的

Cobbage ⋅ 20分钟前 ⋅ 0

Java 限流策略

概要 在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速...

轨迹_ ⋅ 24分钟前 ⋅ 0

GridView和子View之间的间隙

默认的情况下GridView和子View之间会有一个间隙,原因是GridView为了在子View被选中时在子View周围显示一个框。去掉的办法如下: android:listSelector="#0000" 或 setSelector(new ColorDra...

国仔饼 ⋅ 28分钟前 ⋅ 0

idea插件开发

1 刷新页面要使用多线程 2 调试要使用restart bug 不要去关闭调试的idea 否则再次启动会卡住

林伟琨 ⋅ 28分钟前 ⋅ 0

Java 内存模型

物理机并发处理方案 绝大多数计算任务,并不是单纯依赖 cpu 的计算完成,不可避免需要与内存交互,获取数据。内存要拿到数据,需要和硬盘发生 I/O 操作。计算机存储设备与 cpu 之间的处理速度...

长安一梦 ⋅ 35分钟前 ⋅ 0

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 55分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部