电脑在没有申请IP地址的之前,网络运营商是怎么知道哪台电脑要申请IP地址的?
在电脑连接到网络时,它会发送一个广播请求,称为DHCP Discover消息,以寻找可用的DHCP服务器。这个消息会被网络中的所有DHCP服务器接收到,并且其中一个DHCP服务器会回复一个DHCP Offer消息,提供一个可用的IP地址及其他网络配置信息。然后电脑会回复一个DHCP Request消息,告诉DHCP服务器它接受了这个提供的IP地址和配置信息。最后,DHCP服务器会发送一个DHCP Acknowledge消息,确认电脑已经获得了指定的IP地址和配置信息。这样,电脑就成功地获得了一个IP地址,并且可以在网络上进行通信了。
对我们这些平常普通使用电脑,并没有什么问题,但是对于大企业,比如google,如果他们的IP地址是动态的,你会发现,今天你上google搜索,明天它就访问不了,因为他的IP地址变了,导致我们用原来的IP地址范问不到了。
就像你动不动就换电话号码,其他朋友怎么联系得到你?
可能你想问,那我平常跟朋友聊微信,我的IP地址变了,怎么还能跟他说话?
那是因为,你在微信上给别人发消息,其实是你发消息给服务器,服务器再把这消息发给你朋友, 即你→服务器→朋友。
你的IP地址确实会随意变动,但是,你发的消息是发给腾讯服务器的,它的IP地址可没有改变。你不知道你朋友的IP地址也没关系,只要你朋友上微信,服务器就知道它的IP了,这样,服务器就能给你朋友发消息。结果就是你朋友就能收到你发给他的消息了。
在电脑尚未申请IP地址之前,网络运营商是无法确定哪台电脑需要申请IP地址的。因为网络运营商的DHCP服务器会负责为连接到网络上的设备动态分配IP地址,而设备在连接网络时会自动发送DHCP请求,然后DHCP服务器就会回复相应的IP地址信息给设备,完成IP地址的分配。因此,该过程需要电脑进行主动请求或交互。具体流程如下:
当设备连接到网络上时,它会先发送DHCP Discover广播请求,尝试获取IP地址。
DHCP服务器收到Discover请求后,会向设备发送DHCP Offer响应,告诉设备可用的IP地址、子网掩码、网关和DNS服务器等信息。
设备会收到多个DHCP Offer响应,如果有多个DHCP服务器在同一局域网内运行的情况下,会选择其中一个DHCP服务器提供的IP地址。
设备选择一个DHCP Offer响应,然后向该DHCP服务器发送DHCP Request请求,请求使用这个IP地址。
DHCP服务器收到DHCP Request后,会回复DHCP ACK响应,告诉设备可以使用该IP地址。如果DHCP服务器无法提供该IP地址,会回复DHCP NACK响应。
设备接收到DHCP ACK响应后,会开始使用分配的IP地址,并向DHCP服务器发送DHCP请求,以获取其他网络配置信息。
代码示例:
使用Python的scapy库发送DHCP请求:
from scapy.all import *
# 构造DHCP Discover包
dhcp_discover = Ether(dst='ff:ff:ff:ff:ff:ff')/ \
IP(src='0.0.0.0', dst='255.255.255.255')/ \
UDP(sport=68, dport=67)/ \
BOOTP(chaddr=RandString(12, '0123456789abcdef'))/ \
DHCP(options=[('message-type', 'discover'),
'end'])
# 发送DHCP Discover包
sendp(dhcp_discover, iface='eth0')
参考资料: