动态主机配置协议(DHCP),一个局域网的网络协议,使用UDP协议工作,用于局域网中集中管理、分配IP地址。

DHCP介绍

DHCP有两个主要部分组成:地址管理和配置数据交付。地址管理用于IP地址的动态分配,并为客户机提供地址租用。配置数据交付包括DHCP协议的消息格式和状态机。

DHCP服务器决定IP分配方式:自动分配、动态分配和手动分配。

  1. 最常用方法是动态分配,客户机从服务器配置的地址池(通常为一个预定义的范围)中获得一个可撤销的IP地址。

  2. 自动分配使用的是相同方法,但地址不可撤销。

  3. 在手动分配中,DHCP协议用于传输地址,但地址对于请求的客户机是不变的(即它不是由服务器维护的可分配池的一部分)。

DHCP客户端指的是支持DHCP协议的网络设备上的指定端口,通过该端口与DHCP服务器交互获取配置信息。三者之间的差异是地址分配是否基于客户机的身份,以及该地址是否可撤销或变更。

在上面提到的动态分配方式中,DHCP客户端请求分配一个IP地址,服务器从可用的地址池中选择一个地址作为响应。通常情况下这个地址池是专门为DHCP用途分配的一个连续的IP地址范围。分配给客户机的地址只在一段特定时间内有效,这段时间称为租用期。常见的租用期默认值包括12~24小时,取决于使用的DHCP服务器。微软建议较小网络采用8天,较大网络采用16~24小时,取决于使用的DHCP服务器。微软建议较小网络采用8天,较大网络采用16天。

DHCP消息格式

DHCP的前身是BOOTP,它是在BOOTP上做了扩展,以保持两种协议之间的兼容性。一个DHCP(或者可以说是BOOTP)消息格式如下图所示:

Op(操作字段)标识消息是请求(1)还是应答(2);

HW类型字段分配基于ARP使用的值,并定义在相应的IANA ARP参数页中[IARP],最常见的值为1(以太网);

HW长度字段用于存放硬件(MAC)地址,对于类似以太网的网络,值通常为6;

跳步数字段用于保存消息传输过程中的中继次数,发送方将该值设为0,每次中继时加1;

事务ID有客户机选择,为一个随机数,用于将应答和请求匹配;

秒数字段由客户机设置,是第一次尝试申请或重新申请地址经过的秒数;

标志字段当前只包含一个经过定义的位,称为广播标志;

客户机IP地址包含请求者的IP地址(如果已知),否则为0;

"你的"IP地址有服务器填写,向请求者提供服务器地址;

下一服务器IP地址给出下一个服务器的地址,用以客户机的引导过程;

网关中继IP地址有DHCP或BOOTP中继器填写,它们在转发消息时返回自己的地址;

客户机硬件地址保存客户机的硬件地址(唯一标识);

服务器名和引导文件名可选,表示服务器名称或启动文件路径;

选项字段是BOOTP中的供应商扩展字段,现在用以区分DHCP消息与传统BOOTP消息,选项通常提供相对简单的配置信息,或者支持一些其他协商协议。

常见选项包括填充(0)、子网掩码(1)、路由器地址(3)、域名服务器(6)、域名(15)、请求的IP地址(50)、地址租用期(51)、DHCP消息类型(53)、服务器标识符(54)等等...就不都举例了...

DHCP协议的地址分配过程

当一台新的客户机连接到网络的时候,它首先发现可用的DHCP服务器以及它们能够提供地址。然后它决定使用哪台服务器和哪个地址,并向提供该地址的服务器发送请求(同时将其他选择通知所有服务器)。除非服务器在此期间已将该地址分配出去,否则它通过确认将地址分配给请求的客户机。

如下图,一次典型的DHCP交换:

过程解析:

  1. 客户机连接网络,向网络广播一个DHCPDISCOVER消息;

  2. DHCP服务器接收到消息,响应一个DHCPOFFER消息,并在"你的"IP地址字段填写提供的IP地址,且提供租用时间、更新时间、重新绑定时间等信息;

  3. 客户机接收到来自一台或多台DHCP服务器的响应,确定自己想要哪个DHCPOFFER,并广播一个包含服务器标识符选项的DHCPREQUEST消息,请求的IP地址选项设置为客户机选择使用的IP地址;

  4. 多台DHCP服务器可能收到广播的DHCPREQUEST消息,但只有DHCPREQUEST消息标识的服务器同意将该地址进行绑定,其他服务器则清除与该请求相关的状态,然后标识的服务器响应给客户机:1.发送一个DHCPACK消息,可以使用该地址;2.无法分配该地址,发送一个DHCPNAK消息;

  5. 客户端接到DHCPACK消息后进行配置,并探测网络来确定地址未被使用。如果探测到无冲突,则直接使用;如果探测到冲突...客户机舍弃该地址,向服务器发送一个DHCPDECLINE消息来通知该地址不能使用,经过默认10秒延时后客户机重新从第1步开始操作;

DHCP协议在客户机和服务器中运行一个状态机。状态用于指出协议下一个处理的消息类型:

在简单的网络中,一个DHCP服务器可供同一个局域网中的客户机使用,但在更复杂的网络中,可通过一个或更多的DHCP中继代理来中继DHCP流量将DHCP操作扩展到跨越多个网段。

无状态地址自动配置

所谓的无状态地址自动配置,指的是一台主机基本不需要协助就可以决定自己的地址。

IPv4的无状态地址自动配置

一台主机,没有任何手工配置的地址,所在网络也没有DHCP服务器,那么基于IP的通信是不可能的。[RFC3927]描述了一种机制,主机通过该机制可自动从链路本地范围169.254.1.1至169.254.254.254使用16位子网掩码255.255.0.0生成自己的IPv4地址,该方法称为链路本地地址的动态配置或者自动专用IP寻址(APIPA)。除非服务器在此期间已将该地址分配出去,否则它通过确认将地址分配给请求的客户机。其本质是一台主机从一个范围中随机选择一个地址并检测(IPv4 ACD)该地址在本子网中是否被使用。

IPv6的无状态地址自动配置

[RFC4862]中描述的IPv6 SLAAC的目标是允许节点自动(和自主)分配链路本地IPv6地址。步骤如下:

  1. 主机配置链路本地地址;

  2. 主机检查地址是否唯一,即主机对(暂时)地址执行重复地址检测(DAD);

  3. 在接收路由器通告(RA)后,主机为接收的路由器通告中的每个前缀配置一个或多个暂时IPv6地址;

  4. 主机检查地址是否唯一,即对暂时地址执行DAD;

  5. 如果地址是唯一的,它通常会成为"首选"地址,可以积极用于网络通信。

首选地址涉及到IPv6地址生命周期:

IPv6 DAD(IPv6重复地址检测)使用ICMPv6邻居请求和邻居通告消息以确定一个特定的IPv6地址是否在连接链路上使用。

DAD执行步骤如下:

  1. 一个节点首先加入临时地址的所有节点组播地址和请求节点组播地址;

  2. 为了检查使用的地址是否重复,一个节点发送一个或多个ICMPv6邻居请求消息;

  3. 这些消息的源和目的IPv6地址分别是未指定地址和被检查目的地址的请求节点地址,目的地址字段设置为被检查的地址(临时地址);

  4. 如果在响应中接收到一个邻居通告消息则说明DAD失败,并放弃被检查的地址。

DHCP与DNS交互

当一台DHCP客户机获得一个IP地址时,它接收的配置信息的重要部分是一台DNS服务器的IP地址。它允许客户机系统将DNS名称转换为IPv4和/或IPv6地址,该地址是进行传输层连接时协议实现所需要的。

组合DNS/DHCP服务器是一个服务器程序,它可配置为提供IP地址租约以及其他信息,也可读取一个DHCPREQUEST中的客户机标识符或域名,并在使用DHCPACK进行响应之前,通过"名称到地址"的绑定更新内部DNS数据库。这样,由DHCP客户机或与相同DNS服务器交互的其他系统发起的任何后续DNS请求就能够在名称和新分配的IP地址之间转换了。

参考:

《TCP IP 详解卷1:协议》

RFC官方文档

TCP/IP 笔记 - DHCP和自动配置的更多相关文章

  1. 第六章 系统配置:DHCP和自动配置

    系统配置:DHCP和自动配置 写在开头:今天和导师见了个面,抛给我一堆材料以及论文,感觉自己学业更加繁重.有些知识现阶段我可能没办法掌握,但是至少在我需要进一步理解它的时候,要知道在哪个地方能够找到. ...

  2. 【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置

    简介 为了使用 TCP/IP 协议族,每台主机or路由器都需要一定的配置信息: IP地址 子网掩码 广播地址 路由或转发表 DNS 协议配置方法: 手动 通过使用网络服务来获得 使用一些算法来自动确定 ...

  3. TCP/IP 笔记 - 防火墙和网络地址转换

    防火墙是位于内部网和外部网之间的屏障,是系统的第一套防线,作用是防止非法用户的进入. 网络地址转换是一种IP数据包通过路由器或防火墙时通过重写来源IP地址或目的地址的技术,可以用来隐藏或保护内部网络, ...

  4. TCP/IP笔记(四)IP协议

    前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...

  5. TCP/IP笔记(五)IP协议相关技术

    IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的.必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能. 这篇主要介绍下DNS.ARP ...

  6. TCP/IP 笔记 - 安全

    安全:可扩展身份认证协议.IP安全协议.传输层安全.DNS安全.域名密钥识别邮件 任何由用户或以用户账号执行却违背了用户本身意愿的软件被称为恶意软件 网络安全是一门十分广泛及有深度的学识,而本书旨在了 ...

  7. TCP/IP 笔记 - TCP数据流和窗口管理

    TCP流量控制机制通过动态调整窗口大小来控制发送端的操作,确保路由器/接收端消息不会溢出. 交互式TCP连接 交互式TCP连接指该连接需要在客户端和服务器之间传输用户输入信息,如按键操作.短消息.操作 ...

  8. TCP/IP 笔记 - TCP连接管理

    TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此建立一条连接:这与UDP的无连接不同,UDP无需通信双方发送数据之前建立连接.所有TCP需要处理多种TCP状态时需要面对的问题,比如连 ...

  9. TCP/IP 笔记 - ICMPv4和ICMPv6 : Internet控制报文协议

    ICMP是一种面向无连接的协议,负责传递可能需要注意的差错和控制报文,差错指示通信网络是否存在错误(如目的主机无法到达.IP路由器无法正常传输数据包等.注意,路由器缓冲区溢出导致的丢包不包括在ICMP ...

随机推荐

  1. Django自动获取项目中的全部URL

    import re from collections import OrderedDict from django.conf import settings from django.utils.mod ...

  2. each遍历

    <script> $(function () { $.each([52, 97], function(index, value) { alert(index + ': ' + value) ...

  3. cpp 区块链模拟示例(三)新基本原形工程的建立

    /* 作 者: itdef 欢迎转帖 请保持文本完整并注明出处 技术博客 http://www.cnblogs.com/itdef/ 技术交流群 群号码:432336863欢迎c c++ window ...

  4. 项目启动一直死循环 DruidDataSource.init 方法

    今日项目启动遇到一个问题: 项目启动一直死循环 DruidDataSource.init 方法, 代码和同事相同,环境也一致 最后通过maven  clean 然后重新install ,再次启动正常了 ...

  5. post网络请求坑

    微信小程序开发中网络请求必不可少.GET.POST请求是最常用的.GET请求 POST请求的时候有好几个坑.我已经为大家填好了.

  6. CMD指令及其意义

    1. appwiz.cpl:程序和功能 2. calc:启动计算器 5. chkdsk.exe:Chkdsk磁盘检查(管理员身份运行命令提示符) 6. cleanmgr: 打开磁盘清理工具 9. cm ...

  7. 7.ASP.NET MVC 5.0中的Routing【路由】

    大家好,这一篇向大家介绍ASP.NET MVC路由机制.[PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers[HTML帮助类] ] 路由是一个模式匹配系统,它确保 ...

  8. KMP string pattern matching

    The function used here is from the leetcode. Details can be found in leetcode problem: Implement str ...

  9. 关于JavaScript的操作

    一:js基础. 1. var是定义js变量的关键字. 如: var leng=5;定义一个变量为5 var length = 16; // Number 通过数字字面量赋值 var points = ...

  10. Mac 视频录制然后转 gif

    https://gist.github.com/dergachev/4627207 用 ScreenShot 或 Quicktime Player 录制视频, 保存位 in.mov ffmpeg -i ...