0×1.DHCP工作过程
DHCP工作流程如下:
DHCP客户端(PC1)被配置成自动获取IP,R1上面配置了DHCP服务,当PC1启动连接网络时,通过下面的步骤来从DHCP服务端(R1)上获取IP:
1)PC1通过网卡向外广播DHCP Discover信息,该数据包的目的MAC是广播MAC地址(FFFFFFFFFFFF),源MAC地址是PC1的网卡MAC地址;该数据包的目的IP是255.255.255.255,源IP是0.0.0.0;DHCP使用UDP协议,该数据包的目的UDP端口是67(DHCP服务端使用的UDP端口),源UDP端口是68(客户端使用的UDP端口)。
2)R1收到PC1的DHCP Discover广播包,比如上图中R1的Fa0/0接口配置的IP地址是192.168.1.1/24,R1从Fa0/0接口接收到PC1的DHCP Discover广播包后,它在本地的DHCP配置中寻找可以和自己Fa0/0匹配的地址池(192.168.1.0/24这个子网的地址池),如果配置了这个地址池,R1查找这个地址池中还可以使用的IP地址;这里假设192.168.1.100是可用的,R1在提供租用地址之前首先会发送一个ARP查询包,查询192.168.1.100在网络上有没有被使用,如果收到应答,表明这个IP已经被使用,R1在地址池中换一个地址再发送ARP查询,直到找到没有ARP回复的那个IP地址。
3)R1向PC1发送DHCP Offer信息,其中包括这个没被使用的IP地址,DHCP Offer包仍然是一个广播包,目的MAC是广播MAC地址,源MAC是R1的Fa0/0的MAC地址,目的IP是255.255.255.255,源IP是192.168.1.1,目的端口是UDP68,源端口是UDP67。
4)在上面几步中,如果PC1发送的DHCP Discover广播没有DHCP服务端回复,PC1将无法获得IP地址,PC1会每隔一段时间发送一次DHCP Discover,在没有请求到IP地址的这段时间里,Windows主机会被临时分配一个属于169.254.0.0/16的本地地址。
5)接着上面的第三步,PC1收到R1发回的DHCP Offer信息,PC1马上发送DHCP Request包,表示自己将使用R1所提供的IP地址;该数据包还是一个广播包,目的MAC是广播MAC,源MAC是PC1的网卡MAC,目的IP是255.255.255.255,源IP是0.0.0.0,传输层的目的UDP端口是67,源UDP端口是68。DHCP Request中包含了要选择的DHCP服务器(R1的Fa0/0接口)的IP地址以及客户端(PC1)将要使用的IP地址。
6)R1收到PC1发来的DHCP Request信息后,马上发送DHCP Ack确认信息,该确认信息也是以广播发送的(和第三步中的包头差不多,这里就不描述了)。DHCP Ack中包含了一些其他选项,比如子网掩码、默认网关、DNS地址、租约期限、域名等。
7)PC1收到DHCP Ack后,利用其中的信息配置自己的TCP/IP属性,然后广播一个ARP Reply包,这个包的目的是通知其他设备,该IP地址已经被使用。
0×2.DHCP配置实例
a.思科路由器如何配置DHCP
在GNS3中搭建下面的拓扑,PC1-2为vpcs模拟两台真实计算机,R1是c3640路由,接口连线与IP如下图所示,在R1上配置DHCP服务,让PC1-2分别获取到自己网段的IP地址:
R1>
en
02
R1#
conf
t
03
/配置接口IP/
04
R1(config)#
int
fa 1/0
05
R1(config-if)#
ip
add
192.168.1.254 255.255.255.0
06
R1(config-if)#
no
shut
07
R1(config-if)#
int
fa 2/0
08
R1(config-if)#
ip
add
192.168.2.254 255.255.255.0
09
R1(config-if)#
no
shut
10
R1(config-if)#
exit
11
12
/配置dhcp地址池,地址池自定义名称为xxx1/
13
R1(config)#
ip
dhcp
pool
xxx1
14
15
/这个地址池的可用IP范围/
16
R1(dhcp-config)#
network
192.168.1.0 255.255.255.0
17
/默认网关/
18
R1(dhcp-config)#
default-router
192.168.1.254
19
/默认DNS地址/
20
R1(dhcp-config)#
dns-server
192.168.1.254
21
/域名(可选)/
22
R1(dhcp-config)#
domain-name
www.qingsword.com
23
/租约期限,3天/
24
R1(dhcp-config)#
lease
3
25
R1(dhcp-config)#
exit
26
27
/配置第二个地址池/
28
R1(config)#
ip
dhcp
pool
xxx2
29
30
R1(dhcp-config)#
network
192.168.2.0 255.255.255.0
31
R1(dhcp-config)#
default-router
192.168.2.254
32
R1(dhcp-config)#
dns-server
192.168.2.254
33
R1(dhcp-config)#
domain-name
www.qingsword.com
34
R1(dhcp-config)#
lease
1
35
R1(dhcp-config)#
exit
36
37
/排除地址,下面两个地址不会被DHCP分配出去,因为他们是路由接口地址/
38
R1(config)#
ip
dhcp
excluded-address
192.168.1.254
39
R1(config)#
ip
dhcp
excluded-address
192.168.2.254
40
R1(config)#
end
完成后,打开PC1-2的终端,使用自动获取IP命令:
1
/都能正确的获取IP地址,如果是在真实PC上面自动获取,还能看到域名租约期限等信息/
2
VPCS> set pcname PC1
3
PC1>
ip
dhcp
4
DDORA IP 192.168.1.1/24 GW 192.168.1.254
5
6
VPCS> set pcname R2
7
R2>
ip
dhcp
8
DDORA IP 192.168.2.1/24 GW 192.168.2.254
本来这一部分想用GNS3+VMware中的PC来模拟,但考虑到实验的复杂度和描述难度,就使用vpcs代替了。
b.思科路由器如何配置DHCP中继
如下图所示,R1的f1/0连接到一台vpcs,R1是DHCP中继服务器,R2是DHCP服务器,R1负责将vpcs发来的DHCP广播请求以单播的形式发给DHCP服务器R2:
R1配置:
01
R1>
en
02
R1#
conf
t
03
04
R1(config)#
int
fa 1/0
05
R1(config-if)#
ip
add
192.168.1.254 255.255.255.0
06
/*
07
- 在与PC客户端相连的那个接口上配置DHCP中继服务,
08
"ip helper-address 12.1.1.2"
09
- 将这个接口收到的DHCP广播请求以单播形式发给DHCP服务器12.1.1.2,
10
- DHCP中继与DHCP服务器之间必须路由可达。
11
*/
12
R1(config-if)#
ip
helper-address
12.1.1.2
13
R1(config-if)#
no
shut
14
15
R1(config-if)#
int
s 0/0
16
R1(config-if)#
ip
add
12.1.1.1 255.255.255.0
17
R1(config-if)#
no
shut
18
R1(config-if)#
end
R2配置:
01
R2>
en
02
R2#
conf
t
03
04
R2(config)#
int
s 0/1
05
R2(config-if)#
ip
add
12.1.1.2 255.255.255.0
06
R2(config-if)#
no
shut
07
R2(config-if)#
exit
08
09
/DHCP地址池排除R1以太网接口的IP/
10
R2(config)#
ip
dhcp
excluded-address
192.168.1.254
11
/配置地址池与参数/
12
R2(config)#
ip
dhcp
pool
192pool
13
R2(dhcp-config)#
network
192.168.1.0 255.255.255.0
14
R2(dhcp-config)#
default-router
192.168.1.254
15
R2(dhcp-config)#
dns-server
192.168.1.254
16
R2(dhcp-config)#
domain-name
www.qingsword.com
17
R2(dhcp-config)#
lease
3
18
R2(dhcp-config)#
exit
19
20
/如果PC1要和R2通信还要添加下面一条静态路由(这一句并不是DHCP中继必须的)/
21
R2(config)#
ip
route
192.168.1.0 255.255.255.0 12.1.1.1
22
R2(config)#
end
PC1上通过DHCP获取IP:
1
/成功获取到IP和网关/
2
VPCS>
ip
dhcp
3
DDORA IP 192.168.1.1/24 GW 192.168.1.254
4
5
/尝试
ping
R2,通信成功,如果没有在R2上配置那条静态路由,就
ping
不通/
6
VPCS>
ping
12.1.1.2
7
84 bytes from 12.1.1.2 icmp_seq=1 ttl=254 time=49.999 ms