分类: LINUX
2010-08-31 21:37:05
搞了这么久DHCP了,今天做下总结.
系统用的是RHEL 4.8-64
一.先说一下DHCP的IP申请过程
根据客户端是否第一次登录网络﹐DHCP 的工作形式会有所不同
当客户机是第一次登录网络时.
1.IP租用请求:
DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该广播包中的源IP地址为
2.IP租用提供:
任何接收到DHCPDISCOVER广播包并且能够提供IP地址的DHCP服务器,都会通过UDP端口68给客户机回应一个DHCPOFFER广播包,提供一个IP地址。该广播包的源IP地址为DCHP服务器IP,目标IP地址为255.255.255.255;包中还包含提供的IP地址、子网掩码及租期等信息。
3.IP租用选择:
客户机从不止一台DHCP服务器接收到提供之后,会选择第一个收到的DHCPOFFER包,并向网络中广播一个DHCPREQUEST消息包,表明自己已经接受了一个DHCP服务器提供的IP地址。该广播包中包含所接受的IP地址和服务器的IP地址。 所有其他的DHCP服务器撤消它们的提供以便将IP地址提供给下一次IP租用请求。
4.IP租用确认:
被客户机选择的DHCP服务器在收到DHCPREQUEST广播后,会返回给客户机一个DHCPACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息发给客户机。 客户机在收到DHCPACK包,会使用该包中的信息来配置自己的TCP/IP,则租用过程完成。
5. 客户接收到包括配置参数的DHCPACK包,它应该对此参数进行最后一次检查,客户端还会向网络发送一个 ARP 封包﹐查询网络上面有没有其它机器使用该 IP 地址 ,不要和人家的冲突了,当没有发现冲突时客户才算真正配置好了。如果客户发现有人已经使用了这个地址,它需要向服务器发送DHCPDECLINE包,并重新开始配置过程,当然了,客户机必须等待一段时间后才能进行重要的配置过程,如果紧接着就进行会对网络造成巨大的压力。不但在地址冲突的时候要重新开始配置过程,在接收到DHCPNAK包时也要进行重要配置过程。如果超时而未接收到DHCPACK或DHCPNAK包,客户需要再次发送DHCPREQUEST。当然这个发送的过程要有一定的时间,不要人家服务器还没接收到呢,这边就放弃了。如果重新发送后还是没有收到DHCPACK或DHCPNAK包,客户要返回初始状态,并通知用户,初始化过程失败,正在重新开始。
6. 客户可以通过发送DHCPRELEASE包取消租用。客户在消息中放置“客户标记”或”chaddr”和网络地址。如果客户在租用的时候使用了“客户标记”,在取消租用的时候必须还使用这一标记项。
7. 如果客户通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收到DHCPINFORM包,并建立一个DHCPACK消息,在其中包括一些合适客户的配置参数,只是不包括分配网络地址,检查现有的绑定,在信息中不填充'yiaddr'字段或租用时间参数。服务器取得DHCPINFORM包内的'ciaddr'地址,而返回DHCPACK包。
DHCP客户机在发出IP租用请求的DHCPDISCOVER广播包后,将花费1秒钟的时间等待DHCP服务器的回应,如果1秒钟没有服务器的回应,它会将这一广播包重新广播四次(以2,4,8和16秒为间隔,加上1~1000毫秒之间随机长度的时间)。四次之后,如果仍未能收到服务器的回应,则运行Windows 2000的DHCP客户机将169.254.0.0/16这个自动保留的私有IP地址(APIPA)中选用一个IP地址,而运行其他操作系统的DHCP客户机将无法获得IP地址。DHCP客户机仍然每隔5分钟重新广播一次,如果收到某个服务器的回应,则继续IP租用过程。
重新登录:
当客户机重新登录时,客户不会发送DHCPDISCOVER发现信息了,而是直接发送包含前一次所分配的IP地址的DHCPREQUEST请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCPACK确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCPNACK否认信息。当原来的DHCP客户机收到此DHCPNACK否认信息后,它就必须重新发送DHCPDISCOVER发现信息来请求新的IP地址。
DHCP 所包含的各种封包:
1 DHCP DISCOVER
2 DHCP OFFER
3 DHCP REQUEST
4 DHCPDECLINE
5 DHCPACK
6 DHCPNACK
7 DHCPRELEASE
DHCP 封包格式
以下为各字段的简要说明:
OP
若是 client 送给 server 的封包,设为 1 ,反向为 2 。
HTYPE
硬件类别,Ethernet 为 1 。
HLEN
硬件地址长度, Ethernet 为 6 。
HOPS
若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0 。
TRANSACTION ID
DHCP REQUEST 时产生的数值,以作 DHCPREPLY 时的依据。
SECONDS
Client 端启动时间(秒)。
FLAGS
从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client ,其余尚未使用。
ciaddr
要是 client 端想继续使用之前取得之 IP 地址,则列于这里。
yiaddr
从 server 送回 client 之 DHCP OFFER 与 DHCPACK 封包中,此栏填写分配给 client 的 IP 地址。
siaddr
若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK 封包中,此栏填写开机程序代码所在 server 之地址。
giaddr
若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0 。
chaddr
Client 之硬件地址。
sname
Server 之名称字符串,以 0x00 结尾。
file
若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。
options
允许厂商定议选项(Vendor-Specific Area),以提供更多的设定信息(如:Netmask、Gateway、DNS、等等)。其长度可变,同时可携带多个选项,每一选项之第一个 byte 为信息代码,其后一个 byte 为该项数据长度,最后为项目内容。
1.在当前租期已过去50%时,DHCP客户机直接向为其提供IP地址的DHCP服务器发送DHCPREQUEST消息包。如果客户机接收到该服务器回应的DHCPACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%。
2. 如果在租期过去50%的50%时,客户机将在再次向为其提供IP地址DHCP联系。如果联系不成功,则会再在剩余租期的50%时,再次申请续租,此过程一直继续直到租期到期.
3. 如果DHCP客户机重新启动时,它将尝试更新上次关机时拥有的IP租用。发送DHCPREQUEST广播消息包,如果更新未能成功,客户机将尝试联系现有IP租用中列出的缺省网关。如果联系成功且租用尚未到期,客户机则认为自己仍然位于与它获得现有IP租用时相同的子网上(没有被移走)继续使用现有IP地址。 如果未能与缺省网关联系成功,客户机则认为自己已经被移到不同的子网上,将会开始新一轮的IP租用过程。
三.DHCP在RHEL4.8上的架设
当你的DHCP服务器有多张网卡时,还需要绑定具体某个网卡
/etc/sysconfig/dhcpd
DHCPARGS=eth0
Linux下的配置文件为/etc/dhcpd.conf
常用参数介绍
参数主要用于设置服务器和客户端的动作或者是否执行某些任务,比如设置IP地址租约时间、是否检查客户端所用的IP地址等等哈~
常见参数使用如下:
(1)ddns-update-style (none|interim|ad-hoc)
作用:定义所支持的DNS动态更新类型。
none:表示不支持动态更新
interim:表示DNS互动更新模式
ad-hoc:表示特殊DNS更新模式
注意:这个选项是必选参数哈,配置文件中必须包含这一个参数并且要放在第一行。
(2)ignore client-updates
作用:忽略客户端更新
注意:这个参数只能在服务器端使用。
(3)default-lease-time number(数字)
作用:定义默认IP租约时间
(4)max-lease-time number(数字)
作用:定义客户端IP租约时间的最大值
(5) domain-name-servers
定义DHCP客户使用的DNS 服务器,多个DNS请使用逗号分割
option domain-name-servers 192.168.0.17, 203.56.8.1;
(6) authritative
拒绝不正确的IP地址的要求
authoritative;
(7) domain-name
为客户端指明DNS名字。
option domain-name “shsfis.com”;
(8) domain-name-servers
为客户端指明DNS服务器IP地址,有多个时用逗号隔开
option domain-name-servers
(9)option routers IP地址
作用:为客户端指定默认网关
(10)option subnet-mask 子网掩码
作用:设置客户端的子网掩码
(11)broadcast-address
为客户端设定广播地址。
option broadcast-address 10.5.111.255;
(12)ntp-server
为客户端设定网络时间服务器IP地址。
(13)time-offset
为客户端设定和格林威治时间的偏移时间,单位是秒。
在服务器/var/lib/dhcpd/dhcpd.leases 档案中显示的租约时间是UTC时间,这个UTC时间与你的本机时间差就是 -18800;但在客户端看到的租约时间还是本机时间。
option time-offset -18800;
(14)subnet-mask
为客户端设定子网掩码
(15)subnet 网络号 netmask 子网掩码 {......}
作用:定义作用域,指定子网
(16)range 起始IP地址 结束IP地址
作用:指定动态IP地址范围
(17)设定保留IP地址.
host ns {
hardware ethernet 52:54:AB:34:5B:09;
fixed-address 192.168.1.9;
}
一个完整的配置档案
ddns-update-style interim;
ignore client-updates;
authoritative;
option domain-name "shsfis.com";
option domain-name-servers
subnet
option broadcast-address
option time-offset -18800;
option routers
range
default-lease-time 7200;
max-lease-time 14400;
host n1-1-aoi {
hardware ethernet 00:00:00:00:01:51;
fixed-address
}
}
注意的地方:
1. subnet 必须包括DHCP服务器所在的网段,否则DHCP服务无法启动.
2. 用range 分出去IP范围不能像Windows DHCP服务器那样可以保留rang中的IP地址.在LINUX 中要想分配保留IP地址,这个IP地址一定是在range外的IP.