最近学习了dhcp---Dynamic Host Configuration Protocol(动态主机分配协议),我的理解就是server将pool的将ip地址分配给请求的主机。至于“动态”分配,就是主机从server租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,server在将该地址分配给其他主机。
hdcp是典型的c/s模式,有client端首先发送广播包,(这里注意client是没有ip add的,但是3层需要source ip add,就以0.0.0.0来代表,这里不是表示默认路由,而是表示未知ip add),当server收到该广播后会查看自己的pool,如果有未租出的地址,将最小的地址分配给client并封装成packet发送给client。
dhcp的packet应该是这样
ethernetII | ip | udp | dhcp | fcs |
当client收到该packet将发送一个request 给server,告之已接收,然后server在发送ack确认,该机制是因为udp协议是不可靠的,需要该机制来确保可靠性。
dhcp的packet包含:
1、分配的ip
2、netmask
3、default-router
4、dns-server
5、lease(默认是1天)
这是我配置的一个例子
环境:一台层3交换,一台路由,若干台交换(没有任何配置,当傻瓜交换机),若干host模拟lan,而另一台路由模仿wan,
本来想把 router1配置成dhcp server,但是3560不支持ip help-address,只好把3560配置成dhcp server。每一个傻瓜交换机一个vlan,考验3560跨网段分配ip地址呢,其实不用担心,ip add的分配是与接口有关,比如图有n个svi,每个接口的地址是固定(也是每个vlan的gateway),而3560的pool,是根据svi的地址下发ip的,比如说,vlan2的地址只可能分配给svi 是vlan2的ip add,不可能分给其他vlan的------这点就是dhcp是根据接口来分配ip add的。
另外,有些地址是不能下发的,比如说,该图上svi的地址是不能分配,可以先配置一个地址段,将不能分配的地址包含其中,当dhcp开始分配,会忽略这些地址从最小的地址分配。
该图中就是:
- ip dhcp excluded-address 192.168.2.1
- ip dhcp excluded-address 192.168.3.1
- ip dhcp excluded-address 192.168.4.1
- ip dhcp excluded-address 192.168.5.1
确定pool的范围:
- ip dhcp pool vlan2
- network 192.168.2.0 255.255.255.0
- default-router 192.168.2.1
- dns-server 202.102.192.68
- ip dhcp pool vlan3
- network 192.168.3.0 255.255.255.0
- default-router 192.168.3.1
- dns-server 202.102.192.68
- ip dhcp pool vlan4
- network 192.168.4.0 255.255.255.0
- default-router 192.168.4.1
- dns-server 202.102.192.68
- ip dhcp pool vlan5
- network 192.168.5.0 255.255.255.0
- default-router 192.168.5.1
- dns-server 202.102.192.68
从哪个svi分配
- interface Vlan2
- ip address 192.168.1.1 255.255.254.0
- !
- interface Vlan3
- ip address 192.168.2.1 255.255.255.0
- !
- interface Vlan4
- ip address 192.168.3.1 255.255.255.0
- !
- interface Vlan5
- ip address 192.168.4.1 255.255.255.0
- !
- interface Vlan6
- ip address 192.168.5.1 255.255.255.0
- !
vlan3的主机通过dhcp获得ip add
再说下另外一种情况,dhcp server与client即不是直连(即不在同一个Broadcast Domain中),而是隔着路由,图如下:
图中,R2做为dhcp-server,为R1 ethernet所连接的lan分配ip add。
因为host是发送dhcp请求时,destination add是255.255.255.255即广播地址,而路由是隔离broadcast的,当host的请求到达路由时,路由解封装后就直接丢弃了,那么请求就到达不了dhcp-server,当然host也就没有ip add了。
这里就需要一个帮助地址了,将destination add转换成dhcp的地址(而且知道怎么到达dhcp-server)
好了ip help-address就这么登场了,他的作用就是将host发送的请求ip地址的broadcast转换成dhcp-server 的地址(这里都是ip地址啊),这里罗嗦一句:(经过与鲨鱼兄弟的讨论以及抓包)
如果没有经过nat,ip add在拓扑中是不会改变的。
但是这里也有转换(或者说就是借用这个接口去请求地址)
source ip add :0.0.0.0 ---->网关的ip address
destination ip add:255.255.255.255 ---->ip helper-address就是将该地址转换(或者说改成与自己连接的dhcp-server接口的ip add,然后封装发送出去)
这里因为source address与destination address都是确定或者说早已分配好的,就等于把brondcast packet解封装,将其的udp与hdcp header留下,source地址改为请求主机的gateway 的ip address,destination地址改成hdcp-server的入口地址(这个接口入还是出相对啊),这样才能发单播,不然当packet到达hdcp-server,他知道source是谁?怎么单播回来?
好了,当dhcp-server的packet到达路由,路由接封装查看,知道是一个dhcp的offer(即分配ip地址的回应)。解到3层的时候知道了ip地址,这时,他将source地址与desination地址改成:
source add:192.168.2.1
destination add:255.255.255.255(这里还是广播----因为gateway不知道是谁发的,哪个主机的ip还是0.0.0.0呢)----这个与代理arp的原理很相似。
(这个图主要是看source add 与destination add)
封到2层的时候,查看arp table,看从哪个接口发送。
当广播到达发送地址请求的主机,他会在发送一个request到达gateway,然后gateway把这个request转发给DHCP-Server,DHCP-Server在发ack给gateway,在转发到client。(这里都是单播了)
- interface FastEthernet0/0.10
- encapsulation dot1Q 10
- ip address 192.168.1.1 255.255.255.0
- ip helper-address 10.1.1.2
- !
- interface FastEthernet0/0.20
- encapsulation dot1Q 20
- ip address 192.168.2.1 255.255.255.0
- ip helper-address 10.1.1.2
另外,要注意dhcp-server在这个例子里面并不是分配与R1 serial相连的地址,而是与fastethernet相同网段的地址。2个vlan都是向dhcp-server发送请求,但是并不是先到先得,而是与每个vlan网关相同网段的地址。
- ip dhcp pool A
- network 192.168.1.0 255.255.255.0
- default-router 192.168.1.1
- dns-server 202.102.192.68
- ip dhcp pool B
- network 192.168.2.0 255.255.255.0
- default-router 192.168.2.1
- dns-server 202.102.199.68
- interface Serial0/0
- ip address 10.1.1.2 255.255.255.0
对于这点:我的理解是,如果dhcp-server与client在同一broadcast domain中,有多个server向client分配ip add,client本着先到先用原则,然后继续broadcast request,(第一,对使用分配该ip的dhcp-server来说,等于发送一个ack,对于没有使用分配ip的dhcp-server来说,让其回收分配的ip add),然后dhcp-server在回一个ack。
对于跨网段的请求,client端并不管这些,都是要gateway用自己的地址来做一个Unicast(单播)来转发请求,而hdcp-server分配的ip add就肯定与该网段gateway处于同一网段中。。。
完毕