- 静态与动态
如果我们要访问网络,最起码要拥有一个ip地址,这可能是访问互联网最基本的一条件了。但是究竟是谁给我们分配IP地址的呢?可能有人会说是运营商给我们的,但是如果你用wifi来连接网络为什么只需要输入wifi名称和密码就可以连接网络呢?这就是DHCP在起作用。
试想一下如果让我们完全手动去配置上网信息,需要自己去填写IP地址,子网掩码,网关和DNS服务器地址,如果家里来了客人你让客人配置这些来连接网络,这简直就是灾难。而且网络管理员还得确保一个IP地址只给一台设备用,其他人不能用,不然会发生冲突。这样配置的IP地址是静态的,适合长期使用。
一般来说固定的的设备比如:打印机、服务器、NAS…需要使用这样的静态IP地址,这样的IP地址分配方式不太适合大部分的家庭和公共场所,因此DHCP这种的分配IP地址的方式就变得十分重要!不管我们使用的是有线还是无线设备,只要开启了自动获取IP地址的方式,一般DHCP服务器都会给我们分配IP地址,子网掩码,网关和DNS服务器地址,我们的设备获取到这些信息之后,就会自动配置,然后就可以上网了~
DHCP
Dynamic Host Configuration Protocol
动态主机配置协议
Dynamic:动态
表示动态分配IP地址,过程自动化,终端无需一一手工配置。
Configuration:配置
在获取的信息中不止能获取到IP地址,子网掩码,网关和DNS服务器地址这些基本信息,具体可以查看文档中关于option的设定。
- 地址池&租期
一般家中我们能接触到的dhcp服务器就是我们家里的路由器或者光猫了。也就是说,如果你知道设备的管理员密码,你就可以进行一些额外配置,假如你突然需要增加非常多的上网设备 ,那就可以在路由器的DHCP设置里把地址池的范围增大,这样设备在获取IP的时候就可以提供更多的IP地址了。
不过大家可能会有疑惑?我在家中真的可以这样设置吗?运营商不就给了我好多好多的IP地址呢?
其实一般来说路由器中获取的IP地址都为私有地址!
Ipv4地址分类:
公网单播地址:internet(互联网:全球唯一)
私网单播地址:隔离,延缓ipv4地址消耗+NAT
internet互联网路由器的路由表中没有私网路由
由RFC1918来定义:
10.0.0.0 – 10.255.255.255 (10/8 prefix)—–10.0.0.0/8
172.16.0.0 – 172.31.255.255 (172.16/12 prefix)—–172.16.0.0/12
172.00010000.00000000.00000000- 172.16.0.0
172.00011111.11111111.11111111- 172.31.255.255
111.11110000.00000000.00000000- 子网掩码=== 172.16.0.0/12
192.168.0.0 – 192.168.255.255 (192.168/16 prefix)
总的来说就是运营商不可能这么好心给你的都是公网地址,可能你家里没有一个公网地址,全是私网地址靠NAT(Network Address Translation)网络地址转换得来的地址,这些私有地址只是在局域网里面使用,最终在因特网里面传输是需要转成公有地址的。
地址池中的范围可以增大,当然也可以缩小(exclude-address),但是操作要小心。因为DHCP分配出去的IP地址是有租期的(lease day),如果给一台设备分配了一个租期为7天的IP地址,这台设备即使只使用了这个IP地址1天,在没有额外操作的情况下,其他设备在到期前都不能使用这个IP地址,静态分配的IP地址不受租期时长的限制,使用期限为无限长,如果想要无限租期时长可以使用unlimited命令,这样就无限租期了,不过要谨慎这样的设置。
dhcp server lease { day day[ hour hour[ minute minute ] ]|unlimited }
另外如果网络里有些地址是专门用来作服务器或者其他作用,这些地址当然不想被分配进去,在DHCP配置的地址池的时候就可以排除这些地址。
dhcp server excluded-ip-address 172.16.12.200 172.16.12.210---排除172.16.12.200-210
当然我们也可以把特定的IP地址保留给对应的MAC地址的设备使用。
- DHCP握手和网络模型
现在我们可以来看看DHCP是如何工作的了。

假设这里有俩台设备和一个路由器从这里的网络来看很明显都处于同一个局域网里面。
现在又来了一台新的设备也想上网,当这台设备插入网线也想获取ip地址的时候,这时这台设备实际上什么信息都没有,虽然我们从网线来看知道路由器是DHCP服务器,但是新设备改变不知道这里头究竟哪个是DHCP服务器因此新设备需要DHCP Discover也就是发现与寻找DHCP服务器的存在,那DHCP Discover这一步就必须要发送数据出去。
从网络模型来看DHCP是出于应用层的,也就是说DHCP Discover实际上是应用层报文,既然基于最上层,那么网络模型下层的信息一定是要有的,DHCP在传输层里使用的是UDP协议,传输层中一个重要的协议就是端口了,其中客户端使用68端口,服务端使用67端口。在网络层里就是IP地址了,数据包最基本的要有源IP地址和目的IP地址,但是这里并没有IP地址,因为新设备本来就是要索取IP地址,根本就没有自己的IP地址,而且新设备就是要寻找DHCP服务器地址,目的IP地址更不知道是什么。不过没关系,就ipv4举例,当不知道自己的IP地址可以在源地址中写0.0.0.0,当不知道目标的IP地址可以填写255.255.255.255,填写这个地址就会进行广播。接下来数据链路层,当然是MAC地址,也需要源和目标的MAC地址,新设备当然知道自己的原MAC地址,但是目标的MAC地址是不知道的,因此这里和IP地址是同样的道理,填写MAC广播地址ff:ff:ff:ff:ff:ff

DHCP Discover这一步完成以后,如果此时网络中有DHCP服务器存在就会进行,也就是进行DHCP Offer。
这一步DHCP回提供上网所需的配置信息,最基本的就是IP地址,子网掩码,网关和DNS服务器地址。另外还有个特别重要的信息也是在这时候发送的,就是IP地址的租期,过了设置的时间就会过期,因此当设备的租期到达50%时(T1),将会发送DHCP REQUEST报文重新续租,如果服务器响应了DHCP ACK报文,那么租期成功更新,从零开始重新计算。如果客户端收到DHCP NAK报文,或者在T1时间内没有收到任何响应,它将重新开始一个新的DHCP发现过程,发送DHCP DISCOVER报文来请求一个新的IP地址。
DHCP Offer报文在传输层里同样使用UDP协议,不过源和目标端口号反了过来。网络层的话就更好理解了,因为路由器肯定有自己的IP地址, 而且路由器在这一步会初次提供IP地址,因此源和目标的IP地址都可以填写在数据包上。数据链路层这里同样好理解,源MAC地址就是路由器,目的MAC地址就是刚刚新设备提供的。

那DHCP的工作就已经完成了嘛?
当然是不行的,试想一下当一个局域网里面有两台DHCP服务器,他们同时提供Offer,那新设备只能选一个,所以进入下一步,DHCP Request。
DHCP Request也就是选择好了并正式进行请求因为上一步DHCP服务器已经提供了IP地址,如果确定要这个IP地址,就需要在报文里说明,我需要这个IP地址。
因为新设备还没有完全允许可以使用这个IP地址,所以在网络层里依旧使用0.0.0.0来作为源IP地址,目标IP地址也使用广播地址,这里可能大家会有疑惑:新设备已经得到DHCP服务器的位置信息了,直接单播发送给这个DHCP服务器不就完了吗?为什么还用广播地址?实际上网络里可能还存在其他DHCP服务器,因此用广播可以告诉所有设备已经选择了哪个服务器。
同理数据链路层的MAC地址也是和Discover阶段是一样的。

如果DHCP服务器收到了新设备发来的DHCP Request。就要发送DHCP ACK来确认新设备可以使用这个IP地址了,这一步的所有数据信息基本就和DHCP Offer是一样的了。

那么现在新设备就可以开始上网了!

- 三种部署方式
- 基于接口的部署方式:适用于中小规模的网络(客户端和服务器在用一个局域网)
- 基本配置:
- AR1:
sys
sys AR1
int g0/0/0
ip add 192.168.10.1 24
- AR1:
- DHCP
- AR1:
sys
dhcp enable-------------------------全局使能dhcp
int g0/0/0
dhcp select interface----------------打开基于端口的dhcp - PC1
打开dhcp功能
- AR1:
- 验证
- AR1:
dis ip pool
Pool-name : GigabitEthernet0/0/0
Pool-No : 0
Position : Interface Status : Unlocked
Gateway-0 : 192.168.10.1
Mask : 255.255.255.0
VPN instance : --
IP address Statistic
Total :253
Used :1 Idle :252
Expired :0 Conflict :0 Disable :0 - PC1:
PC>ipconfig
Link local IPv6 address………..: fe80::5689:98ff:fec7:1aa3
IPv6 address………………….: :: / 128
IPv6 gateway………………….: ::
IPv4 address………………….: 192.168.10.254
Subnet mask…………………..: 255.255.255.0
Gateway………………………: 192.168.10.1
Physical address………………: 54-89-98-C7-1A-A3
DNS server……………………:
- AR1:
- 基本配置:
- 基于全局的部署方式
- 基本配置:
- AR1:
sys
sys AR1
int g0/0/0
ip add 192.168.10.1 24
- AR1:
- DHCP
- AR1:
sys
dhcp enable---------------------------------全局使能dhcp
ip pool 1-----------------------------------创建地址池
network 192.168.10.0 mask 24----------------设置地址池的范围
gatway-list 192.168.10.1--------------------设置默认网关
lease day 3---------------------------------设置租期为3天
dns-list 8.8.8.8----------------------------设置默认DNS
excluded-ip-address 192.168.10.254----------排除10.254地址
int g0/0/0
dhcp select global--------------------------打开基于全局的dhcp - PC1
打开dhcp功能 - PC2
打开dhcp功能
- AR1:
- 验证
- AR1
dis ip pool
Pool-name : 1
Pool-No : 0
Position : Local Status : Unlocked
Gateway-0 : 192.168.10.2
Gateway-1 : 192.168.10.1
Mask : 255.255.255.0
VPN instance : --
IP address Statistic
Total :252
Used :2 Idle :249
Expired :0 Conflict :0 Disable :1 - PC1
PC>ipconfig
Link local IPv6 address………..: fe80::5689:98ff:fe34:2ca1
IPv6 address………………….: :: / 128
IPv6 gateway………………….: ::
IPv4 address………………….: 192.168.10.253
Subnet mask…………………..: 255.255.255.0
Gateway………………………: 192.168.10.1
Physical address………………: 54-89-98-34-2C-A1
DNS server……………………: 8.8.8.8 - PC2
PC>ipconfig
Link local IPv6 address………..: fe80::5689:98ff:fe8b:4f04
IPv6 address………………….: :: / 128
IPv6 gateway………………….: ::
IPv4 address………………….: 192.168.10.252
Subnet mask…………………..: 255.255.255.0
Gateway………………………: 192.168.10.1
Physical address………………: 54-89-98-8B-4F-04
DNS server……………………: 8.8.8.8
- AR1
- 基本配置:
- 基于中继的部署方式
- 基本配置:
- AR1:
sys
sys AR1
int g0/0/0
ip add 34.1.1.5 24 - AR2:
sys
sys AR2
int g0/0/0
ip add 34.1.1.4 24
int g0/0/1
ip add 12.1.1.3 24 - AR3:
sys
sys AR3
int g0/0/0
ip add 12.1.1.2 24
int g0/0/1
ip add 192.168.1.254 24
int g2/0/0
ip add 192.168.2.254 24
- AR1:
- 静态路由:
- AR1:
ip route-static 192.168.1.0 255.255.255.0 34.1.1.4 # 下一跳为AR2的GE0/0/0 ip route-static 192.168.2.0 255.255.255.0 34.1.1.4 - AR2:
ip route-static 192.168.1.0 255.255.255.0 12.1.1.2 # 下一跳为AR3的GE0/0/0 ip route-static 192.168.2.0 255.255.255.0 12.1.1.2 - AR3:
ip route-static 34.1.1.0 255.255.255.0 12.1.1.3 # 下一跳为AR2的GE0/0/1
- AR1:
- DHCP:
- AR1:
Dhcp enable
#
ip pool vlan12
gateway-list 192.168.1.254
network 192.168.1.0 mask 255.255.255.0
static-bind ip-address 192.168.1.66 mac-address 5489-9892-5CB3-----IP绑定mac地址
lease day 2 hour 0 minute 0
dns-list 114.114.114.114 8.8.8.8
#
ip pool vlan23
gateway-list 192.168.2.254
network 192.168.2.0 mask 255.255.255.0
lease day 2 hour 0 minute 0
dns-list 114.114.114.114 8.8.8.8
#
interface GigabitEthernet0/0/0
description link-to AR2 g0/0/0----------------------注释作用
dhcp select global - AR2:
Dhcp enable
interface GigabitEthernet0/0/1
dhcp select relay---------------------------中继模式
dhcp relay server-ip 34.1.1.5 - AR3:
Dhcp enable
interface GigabitEthernet0/0/1
dhcp select relay---------------------------中继模式
dhcp relay server-ip 34.1.1.5
#
interface GigabitEthernet2/0/0
dhcp select relay---------------------------中继模式
dhcp relay server-ip 34.1.1.5 - PC1
打开dhcp功能 - PC2
打开dhcp功能 - PC3
打开dhcp功能 - PC4
打开dhcp功能
- AR1:
- 验证
- PC1:
PC>ipconfig
Link local IPv6 address………..: fe80::5689:98ff:fe92:5cb3
IPv6 address………………….: :: / 128
IPv6 gateway………………….: ::
IPv4 address………………….: 192.168.1.66————绑定mac为1.66
Subnet mask…………………..: 255.255.255.0
Gateway………………………: 192.168.1.254
Physical address………………: 54-89-98-92-5C-B3
DNS server……………………: 114.114.114.114
8.8.8.8 - PC3:
PC>ipconfig
Link local IPv6 address………..: fe80::5689:98ff:fe0b:2f8
IPv6 address………………….: :: / 128
IPv6 gateway………………….: ::
IPv4 address………………….: 192.168.2.253
Subnet mask…………………..: 255.255.255.0
Gateway………………………: 192.168.2.254
Physical address………………: 54-89-98-0B-02-F8
DNS server……………………: 114.114.114.114
8.8.8.8
- PC1:
- 基本配置:
- 抓个包
然后我们来抓个包来验证是否真正理解DHCP的原理,我们来看一下实际的抓包信息。

首先映入眼帘的是DHCP握手的4个步骤Discover,Offer,Request和ACK。

咱们先看看第一步Discover,新设备想要租用IP,也不知道谁是DHCP服务器,因此是从0.0.0.0发送并且255.255.255.255广播,MAC地址就是新设备的地址作为源,并且使用MAC的广播地址为目标地址,传输层使用UDP,从68端口发送到67端口。但是在应用层方面需要讲解的东西就比较多了。

这里出现了一个特殊的ID值Transaction ID,事物ID这个ID值是由客户端提供的随机数如果有其他设备也在DHCP交互有这个Transaction ID就能更好判断是这个设备的请求了。
因为DHCP是基于Bootstrap Protocol发展出来的,因此在报文里会看到Bootp或者Boot这样的字样。
这里Bootp flags设置为Unicast的意思是服务器可以单播发送给新设备。因此我们在DHCP Offer这一步里就能看到没有使用广播地址。
下面多处都是填写0.0.0.0,当然是因为新设备啥都没。
之后的重点在Option选项里面,其中的参数请求列表:

客户端你想要什么信息可以一次性在这里说明,但是DHCP服务器并不一定会全部提供。
接下来是DHCP Offer:

因为DHCP服务器已经拟定了一个IP地址给新设备,而且上一步已经说了可以使用单播,因此IP地址这里可以就单对单进行发送,但是注意了,实际上服务器是有能力用广播形式发送DHCP Offer的。
然后我们回到报文中:

这次的Your(client)IP adress就填写好了,也就是服务器给客户的IP地址。
Next server IP address:客户端并不是只能找一个DHCP服务器,还可以找第二个服务器,但是这次实验中只有一个所以为本服务器的IP地址
Relay agent IP address:本次实验中并没有中继DHCP服务器所以这里写0.0.0.0
接下来就是Option信息:

里面子网掩码,IP地址,续租时间等等,客户端要的,服务器并没有全部提供,这里需要注意一下。
接下来就是DHCP Request:

这一步的报文信息和DHCP Discover非常相似,基本上就是复制粘贴,但是在Option选项这里有一个重点,就是Option:(50)Requested IP Address,客户端会说明自己选择好的DHCP服务器,一般来说会选择第一份收到其报文的DHCP服务器,而且可以看到这一步又用了广播地址,如果其他DHCP服务器收到后也会知道客户端选择的是不是自己。
参数请求列表Option:(55)Parameter Request List这里一般还是会把之前的请求信息复制过来,DHCP服务器上一步如果没有提供,客户端依旧想要得到这些信息,因此还是可以写上继续请求的。
最后一步DHCP ACK就更简单了,意思就是确认IP地址允许给客户使用了。

这个报文和DHCP Offer一样可以单播或者广播~
好啦现在你已经知道DHCP的基本原理辣!!!!!恭喜下课!!!!



