IP 分配我们平时应该接触比较少。还记得在大学的时候,刚入学第一件事就是赶紧交网费。交网费时会有一个步骤,网管会让你提供 MAC 地址,然后把 IP 地址和 MAC 地址绑定,这也就是博主在隔壁宿舍无法通过网线上网的原因。
其实,如果你有相关的知识积累,可以用命令行自己配置 IP 地址。当然,能不能通信就看你的知识储备量了。
除了命令行配置外,我们平时应该对于 IP 分配应该都是用的 "拿来主义"。无论是在学校还是在办公室,都会有网络管理员把分配好的 IP 给你,直接使用就可以了。但是有时候也会好奇,网管是怎么分配 IP 的呢?难不成通过命令行一个个配置?这时候就要用到动态主机配置协议(DHCP)。
IP66在线查IP地址位置、IP应用场景、IP风险画像:https://www.ip66.net/?utm-source=LJ&utm-keyword=?1146
动态主机配置协议
这个协议的工作原理是怎样的呢?我们就拿一台机器新加入一个网络为例,来走一遍 DHCP 的工作流程。
当一台机器新加入一个网络时,肯定一脸懵逼,啥情况也不知道,只知道自己的 MAC 地址。没人理你怎么办?那不管三七二十一,先吼一声,告诉所有人,我来了,有人吗?这时候的沟通基本靠"吼"。这一步,我们称为 DHCP Discover。
新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址是 255.255.255.255。广播包封装在 UDP 里面,UDP 封装在 BOOTP 里面。在这个广播包里,新人大喊:我是新来的(Boot Request),我的 MAC 地址是 xxx,我还没有 IP,谁能给我个 IP 地址?格式就像下面这样:
这时候,网络里的 DHCP Server 就相当于这个局域网的管理员。他知道来了一个"新人",需要给它分配一个 IP 地址,这个过程就是 DHCP Offer。同时,DHCP Server 保留为此机器提供的 IP 地址,从而不会再将相同的 IP 地址分配给其它的机器。而 DHCP Offer 的格式就像下图,里面有给新人分配的地址。
DHCP Server 仍然使用广播地址作为目的地址,因为,此时请求分配的新人还没有自己的 IP 地址。如果一个局域网中有多个 DHCP Server,这台新机器会收到多个 DHCP Offer。
它会选择其中一个 DHCP Offer,一般是最先到达的那个,并且会向网络发送一个 DHCP Request 广播数据表,包中包含客户端的 MAC 地址、接受分配的 IP 地址、提供此 IP 的 DHCP 服务器地址等,并告诉所有的 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其他 DHCP 服务器撤销它们提供的 IP 地址,以便提供给下一个 IP 请求分配者。新人广播包格式如下:
此时,由于还没有得到 DHCP Server 的最后确认,新机器仍然使用 0.0.0.0 为源 IP 地址、255.255.255.255 为目标地址进行广播。
当 DHCP Server 接收到新机器的 DHCP Request 之后,会广播返回给新机器一个 DHCP ACK 消息包,表明已经接受新机器的选择,并将这一 IP 地址分配信息和其他配置信息都放入该广播包,发给新机器。DHCP ACK 格式如下:
新机器收到 DHCP ACK 后,会检测分配的 IP 地址是否能够适应,如果不能使用,它就会给 DHCP Server 发出 DHCP Decline 消息,通知 DHCP Server 禁用这个 IP 地址,然后新机器就开始新的地址申请过程。
在新机器使用 IP 租期超过 50% 时,DHCP Client 会以单播形式向 DHCP Server 发送 DHCP Request 报文来续租 IP 地址。如果 DHCP Client 成功收到 DHCP Server 发送的 DHCP ACK 报文,则按相应时间延长 IP 地址租期;如果没有收到 DHCP Server 发送的 DHCP ACK 报文,则 DHCP Client 继续使用这个 IP 地址。
在新机器使用 IP 租期超过 87.5% 时,DHCP Client 会以广播形式向 DHCP Server 发送 DHCPRequest 报文来续租 IP 地址。如果 DHCP Client 成功收到 DHCP Server 发送的 DHCP ACK 报文,则按相应时间延长 IP 地址租期;如果没有收到 DHCP Server 发送的 DHCP ACK 报文,则 DHCP Client 继续使用这个IP地址,直到 IP 地址使用租期到期时,DHCP Client 才会向 DHCP Server 发送 DHCP Release 报文来释放这个 IP 地址,并开始新的 IP 地址申请过程。