DHCP : 网络世界身份的获取
DHCP 协议
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)前身是 BOOTP 协议,是一个局域网的网络协议。它是一种 服务器- 客户端 的工作模式,使用 UDP 协议工作,常用的 2 个端口:67(DHCP server), 68(DHCP client)。
DHCP 通常被用于局域网环境,主要作用是集中的管理、分配 IP 地址,使 client 动态的获得 IP 地址、Gateway 地址、DNS 服务器地址等信息,并能够提升地址的使用率。
DHCP 报文种类
DHCP 一共有 8 种报文,分别为 DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各种类型报文的基本功能如下:
DHCP报文类型 | 说明 |
---|---|
DHCP Discover | DHCP 客户端在请求 IP 地址时并不知道 DHCP 服务器的位置,因此 DHCP 客户端会在本地网络内以广播方式发送 Discover 请求报文,以发现网络中的 DHCP 服务器。所有收到 Discover 报文的 DHCP 服务器都会发送应答报文,DHCP 客户端据此可以知道网络中存在的 DHCP 服务器的位置。 |
DHCP Offer | DHCP 服务器收到 Discover 报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个 Offer 报文,发送给 DHCP 客户端,告知用户本服务器可以为其提供 IP 地址。但这个报文只是告诉 DHCP 客户端可以提供 IP 地址,最终还需要客户端通过 ARP 来检测该 IP 地址是否重复。 |
DHCP Request | DHCP 客户端可能会收到很多 Offer 请求报文,所以必须在这些应答中选择一个。通常是选择第一个 Offer 应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的 Request 请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP 客户端在成功获取 IP 地址后,在地址使用租期达到 50% 时,会向 DHCP 服务器发送单播 Request 请求报文请求续延租约,如果没有收到 ACK 报文,在租期达到 87.5% 时,会再次发送广播的 Request 请求报文以请求续延租约。 |
DHCP ACK | DHCP 服务器收到 Request 请求报文后,根据 Request 报文中携带的用户 MAC 来查找有没有相应的租约记录,如果有则发送 ACK 应答报文,通知用户可以使用分配的 IP 地址。 |
DHCP NAK | 如果 DHCP 服务器收到 Request 请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配 IP 地址,则向 DHCP 客户端发送 NAK 应答报文,通知用户无法分配合适的 IP 地址。 |
DHCP Release | 当 DHCP 客户端不再需要使用分配 IP 地址时,就会主动向 DHCP 服务器发送 RELEASE 请求报文,告知服务器用户不再需要分配 IP 地址,请求 DHCP 服务器释放对应的 IP 地址。 |
DHCP Decline | 当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),则会向 DHCP 服务器发送 Decline 请求报文,通知服务器所分配的 IP 地址不可用,以期获得新的 IP 地址。 |
DHCP Inform | DHCP 客户端如果需要从 DHCP 服务器端获取更为详细的配置信息,则向 DHCP 服务器发送Inform 请求报文;目前基本上已经弃用了。 |
正常的工作流程如下:
DHCP 工作过程
DHCP 报文格式
DHCP 服务的 8 种报文的格式是相同的,不同类型的报文只是报文中的某些字段取值不同。DHCP 报文格式基于 BOOTP 的报文格式,如下图所示:
DHCP 报文格式
下面是各字段的说明。
OP : 报文的操作类型。若是 client 送给 server 的封包,设为 1 ,反向为 2。
htype : 客户端的MAC地址类型 ,Ethernet 为 1。
hlen : 客户端的 MAC 地址长度 , Ethernet 为 6。
hops : DHCP 报文经过的 DHCP 中继的数目,默认为 0。DHCP 请求报文每经过一个 DHCP 中继,该字段就会增加 1。没有经过 DHCP 中继时值为 0。
**xid **: 随机生成的一段字符串,两个数据包拥有相同的 xid 说明他们属于同一次会话
secs : DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所消耗的时间,以秒为单位。
flags : 标志位,只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。
**ciaddr **: 客户端的 IP 地址。仅在 DHCP 服务器发送的ACK报文中显示,在其他报文中均显示0
**yiaddr **: DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。
siaddr : 若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。
**giaddr **: 若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。
chaddr : DHCP 客户端的 MAC 地址
sname : DHCP 服务器的名称(DNS域名格式)。在 Offer 和 ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为0。
file : 若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。
options : 允许厂商定义选项(Vendor-Specific Area),以提供更多的设定信息(如:Netmask、Gateway、DNS、等等)。长度可变,格式为"代码+长度+数据"。
列出 options 部分可选的选项:
代码 | 长度(字节) | 说明 |
---|---|---|
1 | 4 | 子网掩码 |
3 | 长度可变,必须是4个字节的倍数。 | 默认网关(可以是一个路由器IP地址列表) |
6 | 长度可变,必须是4个字节的整数倍。 | DNS服务器(可以是一个DNS服务器IP地址列表) |
15 | 长度可变 | 域名称(主DNS服务器名称) |
44 | 长度可变,必须是4个字节的整数倍。 | WINS服务器(可以是一个WINS服务器IP列表) |
51 | 4 | 有效租约期(以秒为单位) |
53 | 1 | 报文类型1: DHCP Discover2: DHCP Offer3: DHCP Request4: DHCP Decline5: DHCP ACK6: DHCP NAK7: DHCP Release8: DHCP Inform |
58 | 4 | 续约时间 |
抓包分析
QEMU 在刚开始运行的时候就会自动运行 DHCP,只要在开始运行 QEMU 之前开启抓包就能抓到 DHCP 的包
打开 wireshark 软件 开启抓包,设定过滤条件为 bootp,只显示 DHCP 相关的包。
运行 QEMU
查看 wireshark ,发现已经抓到了 DHCP 协议 的数据包,已经抓取到的DHCP协议的数据包
其中的 1-6 就对应着上面的工作流程的那 6 个过程。
我们也可以点开封包详细信息然后和上面的 DHCP 的报文格式做对比
点开 DHCP Discover 数据包, 从下图可以看出,DHCP 属于应用层协议,它在传输层使用 UDP 协议,目的端口是 67。
DHCP Discover 数据包
当然还有回复 DHCP 服务器响应请求的数据包,如下图所示:
DHCP 服务器响应请求的数据包
其他的一些选项对照着上面的报文格式做对比,就可以很容易的了解 DHCP 协议的工作过程了。
DHCP : 网络世界身份的获取的更多相关文章
- 网络协议 16 - DNS 协议:网络世界的地址簿
[前五篇]系列文章传送门: 网络协议 11 - Socket 编程(下):眼见为实耳听为虚 网络协议 12 - HTTP 协议:常用而不简单 网络协议 13 - HTTPS 协议:加密路上无尽头 网络 ...
- CDN百科 | 假如没有CDN,网络世界会变成什么样?
很多人都知道CDN是内容分发加速,所谓内容分发,就是将本来位于源站的内容分发到全国各地的节点,方便用户去就近访问所需的内容.随着移动互联网.云计算等一代代技术变革,CDN已经成为了缓解互联网网络拥塞. ...
- linux系统设置静态IP,DHCP网络服务,DNS
一.设置静态IP及DHCP网络服务 kk@yuanqiangfei:~$ cat /etc/network/interfaces # This file describes the network i ...
- 【转】XP系统远程桌面连接2012R2提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证
一.背景 因对方客户的服务器是内网的,需要操作更新服务器的数据库表信息,因此远程对方客户办公司的电脑远程服务器:但是在远程桌面连接出现问题. 二.错误问题 错误问题:“远程计算机需要网络级别身份验证, ...
- C# 网络编程之webBrowser获取网页url和下载网页中图片
该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试瞎子啊网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识.正则表达式实现浏览.获取url. ...
- Windows XPSP3通过网络级身份验证方式连接Windows Server 2008远程桌面
远程桌面大大方便了大家的日常管理工作,Windows Server 2008同样秉承这一优秀特性,并引入网络级身份验证(NLA)作为远程桌面连接的默认身份验证方式. 网络级身份验证 (NLA) 是一种 ...
- XP远程连接Win10,提示【远程计算机需要网络级别身份验证,而您的计算机不支持该验证】
最近电脑安装了Win10系统,在办公室可以通过其他电脑远程,但是回去后使用自己的电脑(XP系统)进行远程提示失败, 提示[远程计算机需要网络级别身份验证,而您的计算机不支持该验证],然后上网查找资料, ...
- VMware空虚拟机通过网络安装系统时获取不到IP地址情况(基于Linux的DHCP服务器)
当虚拟机提示no DHCP or proxyDHCP offers were received时 1.dhcp服务配置错误(留意句尾分号“ :”) 2.dhcp服务未启动(用 systemctl s ...
- Centos7(Linux)网络配置,自动获取ip地址
Centos7.0 Vmware 网络桥接配置,利用DHCP自动获取ip地址 首先要将Vmware10.0.3设置为桥接模式. CentOS 7.0默认安装好之后是没有自动开启网络连接的! cd / ...
随机推荐
- 2017常见的50道java基础面试题整理(附答案)
1.作用域public,private,protected,以及不写时的区别 答: 区别如下: 2.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是 ...
- make clean,make distclean与make depend的区别
make clean仅仅是清除之前编译的可执行文件及配置文件. 而make distclean要清除所有生成的文件. Makefile 在符合GNU Makefiel惯例的Makefile中,包含了一 ...
- libev
libev是一个**事件驱动库**,它需要循环探测事件是否发生,在Linux上实际是封装了epoll等系统调用. 其循环过程由ev_loop( )函数设置,循环体是ev_loop结构. //创建事件循 ...
- Linux命令速查手册
Others make 通过外部编译器的,比如linux中的gcc集来编译源码 获取Makefile文件的命令触发编译 curl -X GET/POST -I 获取head curl有cache 查看 ...
- js framework comparation
starting a new project:(finance project for p2p -- like lending club, or prosper ) ,we considering a ...
- JS push对象
var zoom = page.maps.maps._map.getZoom(), centerPoint = page.maps.maps._map.getCenter(); data = $(&q ...
- Monitor Minio server with Prometheus
转自:https://blog.minio.io/monitor-minio-server-with-prometheus-4ed537abcb74 Prometheus is an open sou ...
- Linq中left join之多表查询
using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...
- java System.arraycopy()
package study.stage2; import java.util.Arrays; /** * Created by Sandy.Liu on 2017/7/19. */public cla ...
- 对HTML中的文字的修饰
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...