【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不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...
随机推荐
- JavaWeb基础—VerifyCode源码
package com.jiangbei.verifycodeutils; import java.awt.BasicStroke; import java.awt.Color; import jav ...
- 20155202 张旭 课下作业: Linux下IPC机制
20155202张旭 Linux下IPC机制 IPC机制定义 在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方 ...
- LVM Linear vs Striped Logical Volumes
转自:https://sysadmincasts.com/episodes/27-lvm-linear-vs-striped-logical-volumes About Episode - Durat ...
- tkinter的GUI设计:界面与逻辑分离(二)-- 菜单栏
由于要用到文件对话框和消息对话框,所以先给出下面的列表. py2 与 py3 中 tkinter 的变化: Tkinter → tkinter tkMessageBox → tkinter.messa ...
- 3、计数排序,电影top100
1.计数排序 # -*- coding: utf-8 -*- # @Time : 2018/07/31 0031 11:32 # @Author : Venicid def count_sort(li ...
- 【HNOI2015】实验比较
题面 题解 首先将所有相等的用并查集缩点,然后会发现题目有一个很有用的性质: 对每张图片\(i\),小D都最多只记住了某一张质量不比\(i\)差的另一张图片\(K_i\). 于是将\(K_i\)作为\ ...
- kali更新后窗口不能适应屏幕的解决方案
终端执行 systemctl restart open-vm-tools 当然,也可以加入到启动项来实现自启动
- Java虚拟机笔记(二):GC垃圾回收和对象的引用
为什么要了解GC 我们都知道Java开发者在开发过程中是不需要关心对象的回收的,因为Java虚拟机的原因,它会自动回收那些失效的垃圾对象.那我们为什么还要去了解GC和内存分配呢? 答案很简单:当我们需 ...
- 传输层tcp协议以及scoket套字节方法
一.传输层 1.传输层的由来: 网络层的IP帮我们区分子网 以太网的Mac帮我们找到主机 所以通过IP和Mac找到了一台特定的主机 如何找到该特定主机的应用程序呢? 答案是通过端口,端口即应用程序与网 ...
- 基于socketserver实现并发
基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环 socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题) 一.分析socketserv ...