最近学习了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天)

 

 

dhcp学习总结_第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开始分配,会忽略这些地址从最小的地址分配。

该图中就是:

 

   
   
   
   
  1. ip dhcp excluded-address 192.168.2.1 
  2. ip dhcp excluded-address 192.168.3.1 
  3. ip dhcp excluded-address 192.168.4.1 
  4. ip dhcp excluded-address 192.168.5.1 

 

确定pool的范围:

   
   
   
   
  1. ip dhcp pool vlan2 
  2.  network 192.168.2.0 255.255.255.0 
  3.  default-router 192.168.2.1 
  4.  dns-server 202.102.192.68 
  5. ip dhcp pool vlan3 
  6.  network 192.168.3.0 255.255.255.0 
  7.  default-router 192.168.3.1 
  8.  dns-server 202.102.192.68 
  9. ip dhcp pool vlan4 
  10.  network 192.168.4.0 255.255.255.0 
  11.  default-router 192.168.4.1 
  12.  dns-server 202.102.192.68 
  13. ip dhcp pool vlan5 
  14.  network 192.168.5.0 255.255.255.0 
  15.  default-router 192.168.5.1 
  16.  dns-server 202.102.192.68 

 

 从哪个svi分配

 

   
   
   
   
  1. interface Vlan2 
  2.  ip address 192.168.1.1 255.255.254.0 
  3. interface Vlan3 
  4.  ip address 192.168.2.1 255.255.255.0 
  5. interface Vlan4 
  6.  ip address 192.168.3.1 255.255.255.0 
  7. interface Vlan5 
  8.  ip address 192.168.4.1 255.255.255.0 
  9. interface Vlan6 
  10.  ip address 192.168.5.1 255.255.255.0 

vlan3的主机通过dhcp获得ip add

 

dhcp学习总结_第2张图片

再说下另外一种情况,dhcp server与client即不是直连(即不在同一个Broadcast Domain中),而是隔着路由,图如下:

 

dhcp学习总结_第3张图片

 

图中,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,然后封装发送出去)

dhcp学习总结_第4张图片

这里因为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的原理很相似。

 

dhcp学习总结_第5张图片

(这个图主要是看source add 与destination add)

封到2层的时候,查看arp table,看从哪个接口发送。

当广播到达发送地址请求的主机,他会在发送一个request到达gateway,然后gateway把这个request转发给DHCP-Server,DHCP-Server在发ack给gateway,在转发到client。(这里都是单播了) 

 

   
   
   
   
  1. interface FastEthernet0/0.10 
  2.  encapsulation dot1Q 10 
  3.  ip address 192.168.1.1 255.255.255.0 
  4.  ip helper-address 10.1.1.2 
  5. interface FastEthernet0/0.20 
  6.  encapsulation dot1Q 20 
  7.  ip address 192.168.2.1 255.255.255.0 
  8.  ip helper-address 10.1.1.2 

另外,要注意dhcp-server在这个例子里面并不是分配与R1 serial相连的地址,而是与fastethernet相同网段的地址。2个vlan都是向dhcp-server发送请求,但是并不是先到先得,而是与每个vlan网关相同网段的地址。

 

 

   
   
   
   
  1. ip dhcp pool A 
  2.  network 192.168.1.0 255.255.255.0 
  3.  default-router 192.168.1.1 
  4.  dns-server 202.102.192.68 
  5. ip dhcp pool B 
  6.  network 192.168.2.0 255.255.255.0 
  7.  default-router 192.168.2.1 
  8.  dns-server 202.102.199.68 
  9.  
  10.  
  11. interface Serial0/0 
  12.  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处于同一网段中。。。

 

完毕