zoukankan      html  css  js  c++  java
  • 动态主机配置协议DHCP

    一---导读

    在日常生活中我们使用电脑,当我们连接到一个新的网络的时候,你知道中间发生了什么,最终你可以上网的吗?一个主机想要上网,需要如下配置信息:IP地址,子网掩码,默认网关,DNS服务器。

    如果手动去配置这些,容易出错还麻烦,这时就有一个解放人类双手的好工具-DHCP服务器,可为局域网主机中各主机配置以上4个信息。

    主机开机后自启动DHCP服务器,然后向DHCP服务器请求配置信息 本篇我们就来介绍一下DHCP(Dynamic Host  Configuration Protocol)。

     二---相关术语的介绍

    DHCP DISCOVER: DHCP发现报文,其内部装有事物ID和DHCP客户端MAC地址。

    DHCP OFFER:DHCP提供报文

    DHCP REQUEST: DHCP请求报文

    DHCP ACK:DHCP确认报文

    DHCP NACK :DHCP否认报文

    DHCP RELEASE:DHCP释放报文

    说明:DHCP客户没有获取地址的时候使用的地址为0.0.0.0。

              最开始客户采用广播地址广播发送的方式去发送相应的报文。

    三---实例讲解DHCP工作过程

    假设网络中有两台DHCP服务器和一台主机,DHCP使用客户-服务器方式,在DHCP服务器上运行DHCP服务进程(简称服务器),在用户主机商行运行DHCP客户进程(简称为客户)

    DHCP是TCP/IP协议体系中的应用层中的协议,使用运输层的UDP所提供的服务,也就是说,DHCP报文在运输层会被打包成UDP用户数据报,服务器使用的UDP端口是67,客户用的是68,UDP用户数据报在网络层被打包成IP数据报。根据所使用的网络接口封装成相应的数据链路层的帧。

    下面我们来看看服务器和客户的交互过程,当启用主机的DHCP后,DHCP客户进程通过广播的方式向DHCP服务器发送DHCP发现报文,因为主机目前还没有分配到IP地址,所以该发现报文的源地址0.0.0.0,

    目的IP地址为广播地址255.255.255.255,之所以采用广播发送,因为主机此时并不知道服务器有几台,IP地址是什么?由于是光播的IP数据报,所以网络中的进程都会收到该数据报,对其层层解封。解封出封装有DHCP发现报文的用户数据报,对于DHCP客户来说,其应用层没有监听该UDP数据报的目的端口67的进程,无法交付 DHCP发现报文,只能丢弃。另一边,DHCP服务器始终运行着DHCP服务器进程。接受该发现报文并做出响应。DHCP的服务器收到发现报文后,根据报文中的客户端的MACI地址来查找自己的数据库,看是否有针对该MACI地址的配置信息。如果有,就把这些配置信息打包成提供报文发给用户主机,没有的话就采取默认的配置信息来发送提供报文,封装该数据报的源IP地址就是服务器本身的地址,源IP地址任然为广播地址(主机目前还没有配IP地址,为了让他收到,只能用广播)。因为是广播发送,所以所有设置都能收到。服务器没有监听目的端口68的进程,于是会丢弃该报文,只有客户会收到并且提取出有用的信息。客户会根据收到的提供报文中的事物ID来判断该报文是不是自己所请求的报文(看两个事物ID是否一样),如果一样,就接受该报文。否则丢弃该报文。

    其中分配IP地址的时候,服务器会使用ARP来确保所选的IP地址未被网络中的其他主机占用,本例中,两个服务器的都收到,但留下先到的那个。然后发送请求报文,征得该服务器同意就可以用IP地址了。

    服务器1接收该请求,发送确认报文。

    之后主机就可以使用该IP地址上网了。

    全过程图解

    四---DHCP中继代理

    我们看如图所示情况,有些主机隔的远,当发送发现报文给DHCP服务器的时候,会被路由器无情的拒绝。

    这时我们需要策反路由器,使其成为DHCP中继代理,每月给他发点工资,让他乖乖听话。

  • 相关阅读:
    FPGA之verilog流水灯小程序
    FPGA之Verilog点灯小程序
    FPGA学习入门
    机试题 (用 hash 实现部门管理系统 只记得大概的内容,简洁版) -- 上一篇的优化
    机试题 (用 hash 实现部门管理系统 只记得大概的内容,简洁版) --> 这里改成文件管理系统
    双向循环链表 (只需要一个 head 节点), 从头尾部 删除 插入 数据都比较方便
    使用 head + tail 两个头尾节点实现双向链表 (队列太多会占用内存), 数据的添加删除比较方便
    线程学习
    堆排序演示 ( 这个 堆排函数将适合所有的堆排, 只需要改一下比较函数)
    windows10 下访问 virtualbox 虚拟机的linux15.10/16.04 系统 及 用 putty 访问虚拟机的配置
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14273438.html
Copyright © 2011-2022 走看看