【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置
简介
为了使用 TCP/IP 协议族,每台主机or路由器都需要一定的配置信息:
- IP地址
- 子网掩码
- 广播地址
- 路由或转发表
- DNS
协议配置方法:
- 手动
- 通过使用网络服务来获得
- 使用一些算法来自动确定
服务器、路由器通常采取手工配置。而客户端主机也要手动配置的话就太麻烦了!
定义
动态主机配置协议[RFC2131] Dynamic Host Configuration Protocol
- Internet 客户端主机(有时也有路由器)中用于建立基本要素、指定配置信息的协议与程序。
- 流行的 client-server协议,应用层 协议
- 前身为 Internet 引导程序协议(Bootstrap Protocol,BOOTP)
- 分配方式:自动、动态、手动。
- 地址池和租用的概念
消息格式

| 字段 | 含义 |
|---|---|
| OP | 若是 client 送给 server 的封包,设为 1 ,反向为 2。 |
| HTYPE | 硬件类别,Ethernet 为 1。 |
| HLEN | 硬件地址长度, Ethernet 为 6。 |
| HOPS | 若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0。 |
| TRANSACTION ID | DHCP REQUEST 时产生的数值,以作 DHCPREPLY 时的依据。 |
| SECONDS | Client 端启动时间(秒)。(时间戳) |
| FLAGS | 从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client ,其余尚未使用。 |
| ciaddr | 要是 client 端想继续使用之前取得之 IP 地址,则列于这里。 |
| yiaddr | 从 server 送回 client 之 DHCP OFFER 与 DHCPACK封包中,此栏填写分配给 client 的 IP 地址。 |
| siaddr | 若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。 |
| giaddr | 若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。 |
| chaddr | Client 之硬件地址。 |
| sname | Server 之名称字符串,以 0x00 结尾。 |
| file | 若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。 |
| options | 允许厂商定议选项(Vendor-Specific Area),以提供更多的设定信息(如:Netmask、Gateway、DNS、等等)。 |
最后一项 options 长度可变,同时可携带多个选项,每一选项之第一个 byte 为信息代码,其后一个 byte 为该项数据长度,最后为项目内容。
项值类别:
1 DHCP DISCOVER
2 DHCP OFFER
3 DHCP REQUEST
4 DHCP DECLINE
5 DHCP ACK
6 DHCP NACK
7 DHCP RELEASE
DHCP 的选项非常多,这里不再叙述了。
协议操作和状态机

四步:
- Discover
- 由于 DHCP Server 对于 client 来说是未知的,因此发现的操作的报文是广播的。
- Offer
- 所有支持 TCP/IP 的主机都会接受到此报文,然而只有 DHCP Server 会回应。Offer也需要是广播,因为 client 此时可能还没有 IP 地址。
- Request
- Request也需要广播,通知其他 DHCP Server 自己做出的选择。
- ACK
- 仍需要广播,其他 DHCP Server 将收回之前提供的 IP 地址。
状态机:状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。

DHCP relay

用DHCP Relay代理可以去掉在每个物理的网段都要有DHCP服务器的必要。它可以传递消息到不在同一个物理子网的DHCP服务器,也可以将服务器的消息传回给不在同一个物理子网的DHCP客户机。
- 当dhcp client 启动并进行dhcp 初始化时,它会在本地网络广播配置请求报文。
- 如果本地网络存在 dhcp server,则可以直接进行 dhcp 配置,不需要 dhcp relay。
- 如果本地网络没有 dhcp server,则与本地网络相连的具有 dhcprelay 功能的网络设备收到该广播报文后,将进行适当处理并转发给指定的其它网络上的 dhcp server。
- dhcp server 根据 dhcp client 提供的信息进行相应的配置,并通过 dhcp relay 将配置信息发送给 dhcp client,完成对dhcp client 的动态配置。
事实上,从开始到最终完成配置,需要多个这样的交互过程。
- dhcp relay 设备修改 dhcp 消息中的相应字段,把 dhcp 的广播包改成单播包,并负责在服务器与客户机之间转换。
- netcore路由器(2x05)可以作为dhcp relay 代理。
在 DHCP 客户端看来,DHCP 中继代理就像 DHCP 服务器;在 DHCP 服务器看来,DHCP 中继代理就像 DHCP 客户端。
DHCP 与 DNS 交互
DNS 是一台机器使用互联网服务的一个很重要的部分,如果没有 DNS 服务器或者其他方式将域名映射为 IP 地址,大部分用户几乎难以访问互联网系统。由于 DNS 映射通常采取烦琐的手工配置,因此,将指定 DHCP 地址与相应地址的 DNS 映射更新方法结合起来会更加方便。这可以通过组合 DHCP/DNS 服务器或者动态 DNS 来解决。
DHCP 安全问题:认证、与 DHCP 有关的攻击
不幸的是,DHCP 并没有提供安全保障。为了缓解这些问题,[RFC3118]提出了DHCP认证(DHCP Authentication)
- DHCP 认证
- Authentication Information 保存一个类似于密码的字符串,用于 client 和 server 的匹配。
- 很明显这种流量可能被攻击者截获,很不安全,只能抵御偶然的DHCP问题
- DHCP 延期认证
- 如此,则discover 、offer、ACK 消息中包含认证选项
- 用 MAC 确认身份。
- Client 和 Server 有一个共享的密钥,用于确保两者之间互换的 DHCP 消息没有被修改(Integrity)
- DHCP 认证没有被广泛使用的原因:
- 所有 DHCP Server 和每个认证的 Client 都要分发共享密钥
- 认证的定义出现在 DHCP 已经广泛使用之后。
DHCP 很容易受到拒绝服务式攻击,大多数攻击可以通过为 DHCP 增加安全机制来缓解,但是目前仍然很少被使用。
links
【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置的更多相关文章
- TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)
ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...
- TCP/IP详解 卷一(第三章 IP:网际协议)
IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...
- TCP/IP详解 卷一(第十三章 IGMP:Internet组管理协议)
本章将介绍用于支持主机和路由器进行多播的Internet组管理协议(IGMP) 它让一个物理网络上的所有系统知道主机当前所在的多播组.多播路由器需要这些信息以便知道多播数据报应该向那些接口转发. 跟I ...
- TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)
UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示
- TCP/IP详解 卷一(第十七章 TCP:传输控制协议)
与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- 【TCP/IP详解 卷一:协议】第二章:链路层
2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...
- TCP/IP详解 卷一(第一章 概述)
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...
随机推荐
- html移动应用 input 标签 清除按钮功能如何实现(不触发键盘)
有个需求是:输入框有文本的时候就显示清除按钮,没有文本则隐藏清除按钮,点击清除按钮不能影响键盘弹出的状态. 网上有css实现自动显示和隐藏清除按钮的方案,但是考虑到兼容性,我们还是使用js来实现. c ...
- hadoop--hive数据仓库
一.hive概述 Hive是基于 Hadoop 的一个[数据仓库工具],可以将结构化的数据文件映射为一张数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进 ...
- # 2017-2018-1 20155224 《信息安全系系统设计基础》第四周MyOD
2017-2018-1 20155224 <信息安全系系统设计基础>第四周MyOD 在这里跟老师先道歉,当时我的git没有安装好,后面也一直没有装上,所以程序没有git. 要求 参考教材第 ...
- c++ 变量 常量
- 4-[多进程]-互斥锁、Queue队列、生产者消费者
1.互斥锁 (1)为什么需要互斥锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如下 #并发运行,效率 ...
- 开发人员常用的DOS命令
1.远程连接:mstsc /admin 2.开启服务:services.msc 3.打开注册表:regedit 4.IIS服务器重启:iisreset 5.打开记事本:notepad 6.查看系统信息 ...
- aws存储桶s3使用
关于aws s3的使用说明: aws官方文档地址:https://docs.aws.amazon.com/s3/index.html#lang/zh_cn 创建s3与基础使用: 1.登陆aws控制台- ...
- linux shell 完成批量压缩文件
首先得到文件列表 使用 list -1 注意是1 不是l 然后是用一个循环内包装zip代码 #!/bin/bash list=`` for var in $list do echo $var zip ...
- Python 之Memcache中间件
一.引子 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,它通过在内存中缓存数据和减少读取数据库的次数,从而提高动态数据库驱动网站的速度.Memcache ...
- 在WebGL场景中进行棋盘操作的实验
这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...