前面我们介绍了 IP 地址,那么我们的 IP 地址是怎么分配的呢?
DHCP的引入
我们已经知道 IP 地址分为公网 IP 和私有 IP,公网 IP 一般由运营商维护和分配,而私有 IP 是局域网内部的 IP,是需要局域网内部去管理和维护的,当然,我们可以按照所属网段自己去设置,如果是在家里只有几台联网设备还好,如果是在学校或公司,动辄上百台机器,如果由 IT 管理员去设置每台机器的 IP 地址,不仅繁琐,而且容易出现 IP 地址冲突。并且按照我们现有的经验来看,不管是在家里、学校还是公司,都不需要手动设置 IP 地址,而是插上网线(台式机),或者接入 WiFi(手机或笔记本电脑),就可以上网了,IP 地址由系统自动帮我们分配。
这里面用到了自动分配 IP 地址的协议,也就是动态主机配置协议,简称 DHCP,不管是在 Windows 还是 Mac 中都可以看到它的身影:
有了 DHCP,计算机或者智能手机只要连上网络,就能实现 TCP/IP 通信,从而实现了 IP 地址的自动分配和统一管理。
DHCP的工作原理
使用 DHCP 之前,需要先在局域网内假设一台 DHCP 服务器(一般由路由器充当),然后将 DHCP 所要分配的 IP 地址设置到服务器上,此外,还需要将子网掩码、路由控制、DNS 服务器地址等信息也设置到服务器上。
新加入的机器或设备(DHCP 客户端)使用 IP 地址 0.0.0.0 (此时还没有分配IP地址)发送了一个广播包,目标 IP 地址为 255.255.255.255(广播地址)。广播包里包含了该机器的 MAC 地址,请求 DHCP 服务器为其分配 IP 地址。
DHCP 服务器收到广播后会通知新加入机器可用的网络设置(通过 MAC 地址唯一确定),包括 IP 地址、子网掩码、网关等信息,这个通知仍然以广播形式发送,因为这个时候新机器还没有分配 IP 地址。此时,DHCP 就已经将这个 IP 地址标记为已分配,其它机器将无法获取到这个 IP。
新机器拿到 IP 地址后,会给 DHCP 服务器发送一个 DHCP 请求,表示接受这个 DHCP 服务器分配的 IP 地址,此时还是使用广播包,DHCP 服务器收到请求后,会返回给新机器一个 DHCP ACK 消息包,新机器收到消息后,由操作系统完成 IP 地址分配。
当新机器离开这个网段时,会发送 DHCP 解除包让这个 IP 地址回到 DHCP IP 地址池,以便其他新接入设备使用。
注:之所以分成两个阶段,是因为当有多台 DHCP 服务器时,新机器只会选中其中一个服务器分配的 IP 地址,一般是最先到达的那个,客户端发起第二次广播请求,还会告知其他服务器,我已经选择了某一台 DHCP 服务器分配的地址,其他服务器分配的 IP 地址可以回收给其他客户端使用。
一般在家里,大多只有一个以太网/无线局域网网段,连接的机器和设备不多,一台 DHCP 服务器(路由器)就够了。而对于学校或公司来说,可能存在多个网段,如果针对每个网段都设置一台 DHCP 服务器管理和维护起来比较麻烦,这个时候,我们可以借助 DHCP 中继代理对 DHCP 进行统一管理,我们还是假设一台 DHCP 服务器,子网网段上的服务器使用 DHCP 中继代理来替代,DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包后再以单播的形式发送给 DHCP 服务器,服务器收到这个包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包转发给 DHCP 客户端。