DHCP服务
0x0 why we use DHCP
- 静态配置ip的缺点,
- 由单一管理员配置过于繁琐
- 由用户自己配置容易产生冲突(两个用户配置了相同的IP地址)
0x1 what is DHCP
- Dynamic Host Configuration Protocol(动态主机配置协议)
- 是一种能够为网络中的主机提供TCP/IP配置的应用层协议。
- DHCP基于C/S模型,Client能够从DHCP Server获取到IP地址及其他参数,从而降低手工配置带来的工作量和出错率。
- DHCP是从BOOTP(Bootstrap Protocol)协议发展而来.
0x2 how to DHCP
- 分配方式
- 自动分配(获得永久的IP地址) (不常用)
- 动态分配(获得一个存在租期的IP地址) (常用)
- 手工分配(管理员分配一个固定的地址给某个终端) (偶尔使用比如给打印机分配一个固定的IP)
- 协议报文
- DHCP discover:广播包,用于发现局域网内的所有DHCP服务器
- DHCP offer:单播或者广播包,dhcp服务器把可以分配给用户的IP地址放在其中发给用户
- DHCP request:广播包,回应第一个DHCP的Offer,拒绝其他的DHCP包
- DHCP ACK:模式与offer包一样,设备只有在收到ACK后才能的获得IP地址
- 租期相关问题
- 一共有两次租期请求
- 第一次在租期达到50%的时候使用单播包进行请求
- 第二次在租期达到7/8的时候使用广播包进行请求
- 只有在用户收到了DHCP服务器的ACK请求后才能算是续租完成
- 当续租成功后,租期还原为一天(初始租期)
0x3 DHCP中继的一些补充
- 背景:每个网段使用一个DHCP服务器不合理,应该多个网段的DHCP服务器使用同一个DHCP服务器
- 将广播包变成单播包,单播包变成广播包
0x4 DHCP报文补充
0x4-1 DHCP报文详情
- 以太网包头+IP包头+UDP包头+DHCP报文->DHCP工作在应用层
- DHPC包为啥使用67和68号UDP端口?
- DHCP在传输层被UPD封装,68为客户端端口,67为服务器端口
- 报文结构分析
- OP:表示报文的类型
- 1表示客户端请求报文
- 2表示服务器响应报文
- htype:表示硬件地址的类型。对于以太网,该类型的值为“1”
- hlen:表示硬件地址的长度,单位是字节。对于以太网,该值为6
- Hops:跳数。客户端设置为0,每经过一个中继加一。
- xid:事务ID,由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应,客户端用它对请求和应答进行匹配。
- secs:获得IP地址或IP地址续借后所使用了的秒数。
- bootp flags:
- 0:客户端请求服务器以单播形式发送响应报文
- 1:客户端请求服务器以广播形式发送响应报文
- ciadd:客户端的IP地址。。
- yiaddr:(你自己的)或客户端的IP地址。
- siaddr:表明DHCP协议流程的下一个阶段要使用的服务器的IP地址。
- giaddr:该字段表示第一个DHCP中继的IP地址。
- chaddr:该字段表示客户端的MAC地址。
- sname:该字段表示客户端获取配置信息的服务器名字
- file:该字段表示客户端的启动配置文件名。
- options:该字段表示DHCP的选项字段,至少为312字节,格式为”代码+长度+数据”。DHCP通过此字段包含了服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。
0x4-2 例子
- DHCP_ACK包
0x5 冷知识
- DHCP的request包和ack包一定是广播吗?
- 不一定,是否为广播由bootp flags字段决定。这个字段在客户端发送discover包的时候就已经决定了
bootp flags为0为单播 bootp flags为1为广播
- 不一定,是否为广播由bootp flags字段决定。这个字段在客户端发送discover包的时候就已经决定了