一、动机
Socket库的gethostbyname
函数会请求操作系统向DNS服务器发送查询消息(即某域名对应的IP地址是什么)。
显然,要向DNS服务器发送消息,得先知道DNS服务器的IP地址(有2种方式)。
①手动设置过DNS服务器的IP地址;
②自动获得DNS服务器地址。
那么计算机是如何自动获得DNS服务器地址的呢?这就要让DHCP来大显身手了!
二、动态主机配置协议(DHCP)
1.DHCP(Dynamic Host Configuration Protocal)的作用
常用于给主机动态分配IP地址。
DHCP提供即插即用联网的机制,即允许一台计算机加入新的网络时自动获取IP地址。
再通俗地解释一遍:当张三买了一台新笔记本,用网线将笔记本和网口连接时,该计算机就自动获取了IP地址。
DHCP是怎么实现这一个功能的呢?
2.DHCP的工作原理
(0)预备知识
DHCP属于应用层协议,使用UDP协议提供的服务,采用客户/服务器方式工作。
(1)工作过程
1)需要IP地址的主机在启动时就向DHCP服务器广播
发送发现消息。
说明:
①广播的IP地址结构:子网号+主机号全1。
②上述提到的网口可以通俗理解为路由器的一个端口,对应于1个子网。
综合①和②,那么就有了广播IP地址。
③操作系统内部的网络控制软件(也叫协议栈)根据广播地址把发送消息(内容大意:亲爱的DHCP服务器,施舍给小弟1个IP地址吧:))向子网中所有计算机进行广播。(当然了,消息实际是从网卡经网线传输出去的。)
PS:如果计算机可以使用自动获得IP地址功能,那么接入的子网中有DHCP服务器。
2)只有DHCP服务器才响应此广播信息。
响应过程:
DHCP服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息(说明分配过IP地址了);若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。
广播消息:
向所在子网广播“DHCP提供”消息,包括该计算机的IP地址和相关配置。
3)计算机收到“DHCP提供”消息后,广播“DHCP请求”信息
4)DHCP服务器广播“DHCP”确认消息
对该过程进行拟人化描述:
①张三(新笔记本)向自己所在的村子(子网)敲锣打鼓地呼喊“村长(DHCP服务器)在哪啊?给我分配套房(IP地址)呗”;(对应上述1
)
②只有村长才打理这一声呼喊,并将预分配房的消息通过村里的大喇叭传出去; (对应上述2
)
③张三听到消息后,满意地点点头,然后呼喊“感谢村长!我就要那套房啦!”;(对应上述3
)
④村长得知后,就在自己的小本本上(DHCP服务器的数据库)记录了这一分配,并广播“m78号房就是你张三的了!”。(对应上述4
)
这时候小伙伴就要问了,这不是主机自动获得IP地址吗?那主机怎么自动获得DNS服务器IP地址呢?
PS:由上述的“广播”也知道DHCP协议是基于UDP协议的。
(2)自动获得DNS服务器IP地址
1)前言
张三已经有了IP地址了,那么他下一步就要上网冲浪了。
而张三打开浏览器,输入网址(URL)进行冲浪。浏览器就得调用gethostbyname
函数(请求将URL中的域名转化为IP地址),而这是DNS服务器的工作。
作为新时代负有责任的村长大大(DHCP服务器)当然在提供给张三IP地址的同时,要告诉他DNS服务器IP地址啊。否则,张三只有IP地址,没法将域名转化为目标IP地址,冲不了浪啊。
2)结论
当计算机选择自动获得DNS服务器IP地址时,DHCP服务器不仅为它分配主机IP地址还告诉它DNS服务器IP地址。
3.说明
上述内容掩盖了DHCP的一些细节,比如,DHCP服务器分配给主机的IP地址是临时的。但抓住DHCP工作原理的核心部分才是关键!