zoukankan      html  css  js  c++  java
  • DHCP的工作原理

    1.几个DHCP名词在介绍

    DHCP工作原理以前,先解释这几个名词的含义:

    DHCP客户:DHCP客户是一通过DHCP来获得网络配置参数的Internet主机,通常就是普通用户的工作站。

    DHCP服务器:DHCP服务器是提供网络设置参数给DHCP客户的Internet主机。

    DHCP/BOOTP 中继代理:在DHCP客户和服务器之间转发DHCP 消息的主机或路由器。

    DHCP是基于客户机/服务器模型设计的,DHCP客户和DHCP服务器之间通过收发DHCP消息进行通讯。

    2、DHCP 消息的格式

    ___________________________________________________________

    | 0 | 1 | 2 | 3 | 

    |0123456789 | 0123456789 | 0123456789 | 0123456789 |

    |op (1) | htype (1) | hlen (1) | hops (1) |

    | xid (4) | 

    | secs (2) | flags (2) |

    | ciaddr (4) |

    | yiaddr (4) |

    | siaddr (4) |

    | giaddr (4) |

    | chaddr (16) |

    | sname (64) |

    | file ( 128) |

    | options ( 312) | 

    ------------------------------------------------------------

    各段描述如下:

    括号里的数字代表这个段以8位组为单位的大小,除options外,其余的段的长度都是固定的,options段的长度至少是312个8位组。如op(1)代表这个段的长度为一个8

    位组op 是消息操作代码,值为1 代表BOOTREQUEST(自举请求)值为2 代表BOOTREPLY(自举响应)。

    在DHCP客户和DHCP服务器对话期间,op段被DHCP客户设置为BOOTREQUEST(1),被DHCP服务器设置为BOOTREPLY(2)。

    htype 是硬件地址类型

    hlen 是硬件地址长度

    hops DHCP客户置这项为零,中继代理要用

    xid DHCP客户在寻求时产生的一个随机数,它提供了对所有后续的DHCP消息中的客户请求和服务器响应的一种联合。

    ciaddr 客户机用来请求一个特定的IP地址,这个地址以前曾经分配给该客户机,希望保留。

    yiaddr 由DHCP服务器填写,包含它提供给某一DHCP客户的IP地址

    siaddr 服务器的主机地址

    giaddr 中继代理的IP地址

    chaddr DHCP客户硬件地址

    sname 服务器主机名

    file 启动文件名

    3、修改配置文件DHCPd默认的配置文件是/etc/dhcpd.conf

    这是一个文本文件,DHCPd里有一个语法分析器,能对这个文件进行语法分析,获得配置参数。

    dhcpd.conf 格式是递归下降的,关键字大小写敏感,可以有注释,注释以#开头,一直到该行结束。这里给出一个简单的dhcpd.conf的例子,所服务的网络为C类保留网络192.168.1.0 .

    #examples

    # 缺省租约时间
    default-lease-time 28800;

    # 最大租约时间
    max-lease-time 43200; 

    # 子网掩码选项
    option subnet-mask 255.255.255.0;

    # 广播地址
    option broadcast-address 192.168.1.255;

    # 路由器地址
    option routers 192.168.1.1;

    # DNS地址
    option domain-name-servers 192.168.1.1;

    # 域名
    option domain-name "netreslab.org";

    # 以上都是全局参数

    # 子网声明和掩码
    subnet 192.168.1.0 netmask 255.255.255.0 {

    range 192.168.1.10 192.168.1.100;

    range 192.168.1.150 192.168.1.200;

    }

    #这段配置将允许DHCP服务器分配两段地址范围给DHCP客户,192.168.1.10-100 和192.168.1.150-200

     

    如果DHCP客户在申请租约时不请求一个特定租约失效时间,则以default-lease-time(28800秒)为租约时间,如果有请求一个特定的租约失效时间,则采用max-lease-time(432000秒) 

    如果要为一台叫做hotdog的机器指定固定的IP地址,可以在dhcpd.conf文件加一条

    host hotdog {
    hardware ethernet 08:00:00:4c:58:23;
    fixed-address 192.168.1.210; }

    4、DHCP分配IP地址的过程

          DHCP客户机初始化TCP/IP,在本地物理子网上广播一个DHCPDISCOVER 消息,以确定DHCP服务器位置及其IP地址。如果DHCP服务器和客户不在同一个物理子网上,BOOTP中继代理将转发这个消息给DHCP服务器。由于网络上可能不止一个DHCP服务器,凡所有具有有效IP地址信息的DHCP服务器向客户机发出一个提议。客户机从接收到的第一个提议中选定IP地址信息,并广播一条租用地址的消息请求。由发出该提议的DHCP服务器响应该消息,指定IP地址信息给该客户机并发送一个确认,而所有其它DHCP服务器撤回各自的提议。客户机完成TCP/IP协议的初始化和绑定。配置完成后,客户机就可以使用普通网络通信和连接至其它IP主机时用到的所有IP服务和应用。

    5、dhcpd.leases 


    dhcpd.leases 是DHCP客户租约的数据库文件,默认目录在/var/state/dhcp/,文件包含租约声明,每次一个租约被获取、更新或释放,它的新值就被记录到文件的的末尾。在DHCPd第一次安装后,并不会生成这个文件。但DHCPd的运行需要这个文件,所以可以建立一个空的文件。

    # touch /var/state/dhcp/dhcpd.leases

    DHCPd记录这个文件的格式是:
    lease ip-address { statements... } 
    每个记录包含一个提供给客户的IP地址,在花括号里的语句包含一些租约信息。具体的租约信息因客户发出不同的DHCP请求而稍有差别。

    6、dhcpd.conf 概述


    前面说过,dhcpd.conf是个递归下降格式的配置文件,有点象C的源程序风格,由参数和声明两大类语句构成。

    参数类语句主要告诉DHCP网络参数, 如租约的时间、网关、DNS等。

    声明语句则是描述网络的拓扑,用来表明网络上的客户、要提供给客户的IP地址、提供一个参数组给一组声明等。网络拓扑的声明语句有 shared-network 和 subnet 。

    如果要给一个子网里的客户动态指定IP地址,那么在subnet声明里必须有一个 range 声明,说明地址范围。

    如果要给DHCP客户静态指定IP地址,那么每个这样客户都要有一个host 声明。

    对于每个子网,都要有一个 subnet 声明,即使这是个没有IP地址要动态分配的子网。

    一个典型的dhcpd.conf如下

    #example
    #全局参数
    shared-network 共享网络名 {
    共享网络特定参数...
    subnet 204.254.239.0 netmask 255.255.255.224 {
    子网特定参数... 
    range 204.254.239.10 204.254.239.30; }
    subnet 204.254.239.32 netmask 255.255.255.224 {
    子网特定参数...
    range 204.254.239.42 204.254.239.62; }

    group { 组特定参数... 
    host ws1.domain { 特定主机参数... }
    host ws2.domain { 特定主机参数... }
    host ws3.domain { 特定主机参数... }
    }

    语句参考


    因为DHCPd的语句很多,不可能一一列出,这里给出最常用和最重要的语句。 

    声明类语句

    share-network 语句 :

    语法
    shared-network name {
    [ 参数 ]
    [ 声明 ]
    }

    share-network 用于告诉DHCP服务器某些IP子网其实是共享同一个物理网络。任何一个在共享物理网络里的子网都必须声明在 share-network 语句里。当属于其中某个子网的客户启动时,将获得在share-network语句里指定参数,除非这些参数被subnet 或 host 里的参数覆盖。

    用share-network是一种权宜之计,例如某公司用B类网络145.252,公司里的部门 A 被划在子网 145.252.1.0 里, 子网掩码为255.255.255.0,这里子网号为8个bit,主机号也为8个bit,但如果部门 A 急速增长,超过了254个节点,而物理网络还来不及增加,就要在原来这个物理网络上跑两个8bit掩码的子网,而这两个子网其实是在同一个物理网络上, share-network 语句可以如下:

    shared-network share1 {
    subnet 145.252.1.0 netmask 255.255.255.0 {
    range 145.252.1.10 145.252.1.253; }
    subnet 145.252.2.0 netmask 255.255.255.0 {
    range 145.252.2.10 145.252.1.253; }
    }

    这里的share1是个共享网络名。

    subnet 语句:

    语法
    subnet subnet-number netmask netmask {
    [ 参数 ]
    [ 声明 ]
    }

    subnet 语句用于提供足够的信息来阐明一个IP地址是否属于该子网。也可以提供指定的子网参数和指明那些属于该子网的IP地址可以动态分配给客户,这些IP地址必须在 range 声明里指定。

    subnet-number 可以是个IP地址或能被解析到这个子网的子网号的域名。

    netmask 可以是个IP地址或能被解析到这个子网的掩码的域名。 

    range 语句:

    语法
    range [ dynamic-bootp ] low-address [ high-address];

    对于任何一个有动态分配IP地址的subnet语句里,至少要有一个 range 语句,用来指明要分配的IP地址的范围。如果只指定一个要分配的IP地址,高地址部分可以省略

    host 语句:

    语法

    host hostname {
    [ 参数 ]
    [ 声明 ]
    }

    host语句的作用是为特定的客户机提供网络信息。

    group 语句

    语法
    group {
    [ 参数 ]
    [ 声明 ]
    }

    group语句给一组声明提供参数。

    allow 和 deny 语句


    allow和deny语句用来控制DHCPd对客户的请求。

    unknown-clients 关键字:allow unknown-clients;  deny unknown-clients; 


    allow unknown-clients 允许DHCPd可以动态分配IP给未知的客户,

    而 deny unknown-clients 则不允许。 缺省是允许的。

    bootp 关键字 allow bootp;  deny bootp; 


    指明DHCPd是否响应bootp查询,默认是允许的。

    参数类语句


    default-lease-time time; 
    指定缺省租约时间,这里的time是以秒为单位的。如果DHCP客户在请求一个租约但没有指定租约的失效时间,租约时间就是缺省租约时间。

    max-lease-time time; 
    指定最大的租约时间。如果DHCP在请求租约时间时有发出特定的租约失效时间的请求,则用最大租约时间。

    hardware 语句

    hardware hardware-type hardware-address; 
    指明物理硬件接口类型和硬件地址。硬件地址由6个8位组构成,每个8位组以“:”隔开。如00:00:E8:1B:54:97 例如:hard server-name 语句 server-name "name";  用于告诉客户服务器的名字。

    fixed-address 语句


    fixed-address address [, address ... ];  
    用于指定一个或多个IP地址给一个DHCP客户。只能出现在host声明里。

    选项类语句

    选项类语句以option 开头,后面跟一个选项名,选项名后是选项数据,选项非常的多,这里列出一些常用的选项供参考。

     
    option routers ip-address[, ip-address];
    指明在客户子网内的路由器的地址,可以有多个;
    option time-servers ip-address[, ip-address...];
    指明时间服务器的地址。
    option domain-name-servers ip-address[, ip-address...];
    指明DNS的地址
    option host-name string;
    给客户指定主机名,string是个字符串。
    option domain-name string;
    指明域名
    option interface-mtu mtu;
    指明网络界面的MTU,这里mtu是个正整数
    例 option interface-mtu 1500;
    option broadcast-address ip-address;
    指定广播地址

  • 相关阅读:
    【Pascal's Triangle II 】cpp
    【Pascal's Triangle】cpp
    【Substring with Concatenation of All Words】cpp
    【Multiply Strings】cpp
    【Minimum Window】cpp
    【Merge Intervals】cpp
    【Insert Interval】cpp
    认识GIT之入门
    数据结构学习系列之线性表(四)
    VBox虚拟机与主机(宿主)通讯原理以及socat(套接字猫)简单介绍
  • 原文地址:https://www.cnblogs.com/linuxbo/p/4296565.html
Copyright © 2011-2022 走看看