携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
本文收录于专栏:《丘山子聊网络协议》。和大家一起聊聊网络协议那些事儿~
简单的 IP 地址配置原来也有这么多门道
一、从一个错误配置的例子入手
我们平时给计算机A配置IP时,如果附近的20台计算机IP是192.168.0.20-192.168.0.40。如果你给计算机A的IP设置为18.188.8.88
,然后你再去测试计算机A与附近其他计算机的连通性,ping它们,你可能会发现,都ping不通啊。
为什么呢?
源IP地址和目的IP地址不是都明确了吗?源IP地址是18.188.8.88
,目的IP地址是192.168.0.20-192.168.0.40中的一个。
因为之前我们说过:
要始终牢记一个原则:计算机网络中的任何一个数据包,像房子一样,必须打牢地基,一层一层建上去,不可能有高层没有低层。
网络层的下面还有数据链路层,需要知道计算机A的MAC地址以及目的主机的MAC地址。如果计算机A与附件这些计算机是同一个网段,那好办,不是有地址解析协议(ARP)吗?将包含目标IP地址的ARP请求广播到局域网络上的所有主机,就能获得目标IP地址对应主机的MAC地址。但是它们不是一个网段的,这种情况下,如果操作系统配置了网关地址,那么操作系统就会将数据包传给网关,否则,数据包就根本发不出去...
二、DHCP 动态主机配置协议
配置IP这么多道理,那么不会配置的计算机小白是不是就上不了网了啊?
其实,有一种自动配置IP地址的协议,叫做动态主机配置协议(Dynamic Host Configuration Protocol) ,也就是我们熟知的DHCP。
除了IP地址,DHCP还可自动配置IP地址的子网掩码、该网络中可使用的DNS服务器的P地址、作为与外部网络的出入口的默认网关IP地址、 地址的租约期限(到期日期)等。 还可配置如时间同步服务器 (NTP 服务器) 的地址。
如上图,当一台计算机连接到网络时,它会向同一网络上的所有设备发送数据包,这称之为DHCP发现。如果存在DHCP服务器,DHCP 服务器使用单播来发送自己的回应报文,并为其分配IP地址等之前提到的信息。至于为什么申请IP地址的计算机还没有完成IP地址的配置,却能够接受单播报文,这给回答解说得比较好:DHCP offer 报文到底是单播还是广播? - 车小胖的回答 - 知乎
但是,如果网络中存在多个DHCP服务器,那么计算机一般会选择最先到达的那个单播报文。
计算机确定好要选择的DHCP Offer单播报文之后,会告诉所有DHCP服务器你选择哪一台DHCP服务器分配的地址,让你没有选择的DHCP服务器收回分配给你的地址。
当DHCP服务器收到计算机的DHCP request 之后,会单播一个DHCP ACK 消息包。至此,IP地址分配完成。
DHCP消息格式 - NE40E V800R010C10SPC500 特性描述 - IP业务 01 - 华为 (huawei.com)
上图是DHCP报文的格式,笔者在此不详细说明了,上面华为的中文文档介绍得很详细。
至于IP地址到达租约期限或者你不用了,DHCP就会将IP地址收回并放入可分配的IP地址池子。
续租很简单,租期达到50%的时候,计算机以单播的方式往DHCP 服务器发送一个DHCP Request,告诉它,我地址快要到期了,需要续租。DHCP服务器会发送一个DHCP ACK告诉你续租成功。如果收到的是DHCP NAK报文,那么就得重新申请了新的IP地址了。如果租期达到87.5%时,仍未收到DHCP服务器的应答,那么就会广播DHCP Request。DHCP服务器会发送一个DHCP ACK告诉你续租成功。如果收到的是DHCP NAK报文,那么就得重新申请了新的IP地址了。
如果很不幸,租期时间到了,还是没有收到服务器的DHCP ACK报文或者DHCP NAK报文,那么客户端只能停用该IP地址,重新申请。