DHCP(dynamic host configuration protocol)动态主机配置协议,用来分配IP地址等网络参数,可以减轻管理员的工作量,还可以避免用户手工配置网络参数时造成的地址冲突。
- dhcp可以为网络终端动态分配IP地址,解决了手工配置IP地址时的各种问题。
- DHCP是一个协议,所以一定会有报文。所以要知道DHCP所有的报文以及内容、了解基本报文的封装过程
- DHCP使用的是UDP 是c/s 客户端和服务端的玩法 一定有端口号 是67和68
下面通过一个简单的模拟过程来分析报文具体过程:
一个PC机器连接一个交换机 后面有两个DHCP服务器。其中DHCP1给这个PC分配的地址是10.1.1.1 DHCP2给这个主机分配的地址是10.1.1.2
以上过程会简单的就是:
1)主机A-------发送DHCP discover 报文(广播)----------dhcp服务器
2) DHCP服务器--------发送DHCP offer报文(单播)---------主机A
3)主机A--------发送DHCP request报文(广播)---------DHCP服务器
4) DHCP服务器------发送DHCP ack报文(单播)---------主机A
主机A发送discover报文,向DHCP服务器请求一个IP地址。
dhcp服务器收到请求后,会给主机A回一个offer报文。offer报文可能很多,主机A只会要第一个。
主机A收到offer报文之后,会发送一个dhcp request报文 请求这个地址的使用。
dhcp服务器给回一个ACK报文,确定主机A可以使用这个地址。
具体过程以及封包
- 原IP为0.0.0.0(刚开始没有IP) 目的IP:255.255.255.255(原因是: 在不知道DHCP服务器地址的前提下 只能选择0.0.0.0和255.255.255.255。 但是如果封0.0.0.0的话发出去之后DHCP服务器不会看 因为交换机和路由器都是转发设备 不是自己的不会看)发255.255.255.255广播地址的话,所有人都要看。 (三层的协议字段是17 因为是UDP)
- 交换机在收到之后百分百转发 两个服务器都收到之后。 一个给分10.1.1.1 一个给分10.1.1.2 。这个时候他们都会给IP主机回offer报文
- 要封一个offer报文(单播发的) 从应用层开始发: 原IP:(服务器1就是1的IP 服务器2就是2的IP) 目的IP是0.0.0.0 目的MAC是PC1 (0.0.0.0 不是必须所有人都要拆开 只有广播是必须拆开的 因为这个时候PC机还没有地址 作为终端设备 想得到一个地址 这个时候即使不是给自己的 看见是0.0.0.0 也会拆开看看有没有UDP的信息 有的话就会留下 没有就丢弃)
- offer报文是两份 offer报文是单播的 PC机是会要第一个offer 其余的都会丢弃
- 客户端收到offer报文之后,会发一个广播的请求报文(因为收到offer的时候,这个IP还不能用 所以还是要发广播) 那广播发出去之后 这两个服务器怎么知道是自己的? 因为每个服务器都有一个身份ID 是自动生成的 这个会在发送offer的时候就放在里面 两个服务器都收到拆开之后 等拆到UDP之上的时候看是不是自己的ID 是就会收下并且给回一个单播 不是就丢弃
- 服务端发送一个单播的ack确定报文 主机只有收到ACK之后才有权使用这个地址
- PC机还会发送一个免费ARP 检测这个地址是否有冲突