计算机网络

自动获取IP

我们的电脑分手动设置IP和自动获取IP,手动设置IP地址当然IP是自己设定的,那么自动获取IP是从哪里得到的IP地址,IP地址又是谁分配的呢。
计算机网络 - (三)电脑如何获取到IP的
一般没有特殊需求大家基本上是设置的 动态获取IP,因为如果自己静态配置的话,容易出错,例如你不小心配置了一个已经被其他人在使用的 IP 地址。所以我们一般选择的是动态获取IP。注意,这里的 IP地址不仅仅是指主机的唯一标识,还指DNS、网关等IP 地址。

客户端请求 ip

可能很多人都知道,是通过DHCP 服务器 来获取 IP 的,如果要给DHCP 服务器发报文来获取IP,必须得知道 DHCP 服务器的IP是多少,自己客户端的源IP 又是多少,当我们电脑刚开机,现在啥也不知道,第一步该如何做呢?如何发送报文呢?

之前我们说过广播和MAC地址的概念,广播这个东西很暴力,向所有局域网中得主机发送消息,告诉所有人,我急需一个 IP 地址。于是,我们发了一个广播通知了所有人。广播的目的 ip 是255.255.255.255,目的端口是 67,为了让别人知道它是来请求一个 ip 的,我们的客户端会把 0.0.0.0作为自己的源 ip,源端口是68 。意在告诉别人:我现在啥也没有,急需一个 ip,哪位老铁能给我提供一个 ip。
计算机网络 - (三)电脑如何获取到IP的
我们把这个请求 ip 的报文称之为discover 报文。

这里发送的报文都是采用 UDP 报文,而不是 TCP 报文

计算机网络 - (三)电脑如何获取到IP的
目的 ip 填255.255.255.255 代表这是一个广播报文,会发给局域网内的所有主机。其他主机收到广播报文之后,会进行判断这个广播报文是否是发给自己的,如果是发给自己的,则进行处理,否则就把这个广播报文丢弃。

这个时候, DHCP 服务器终于收到了我的广播,这个时候问题来了,DHCP 服务器是如何知道我是来请求一个 ip 的呢?

为了解决这个问题,我们需要在报文里做一个标记,告诉 DHCP 服务器我是来请求报文的,于是,啥也没有的我,在报文的源地址里填了 0.0.0.0。当DHCP服务器看到报文的源地址是 0.0.0.0时, 就知道我还没有被分配过 ip,急需一个ip来去冲浪了。
计算机网络 - (三)电脑如何获取到IP的
于是,DHCP服务器赶紧找了一个没有被使用ip地址发给我,包括 ip 地址,子码掩码,网关,ip 的有效期等信息,并且把这个 ip 地址标记为 已使用的状态。DHCP服务器要把IP通过报文发送给需求方,但是源IP是 0.0.0.0,怎么发送呢。通过MAC地址。在 discover报文 中,就会包含它的 MAC 地址了,DHCP 服务器,只需要发一个广播报文就可以了,广播报文的源ip是 DHCP 服务器自己的 ip,源端口是 67 ,目的地址是 255.255.255.255,目的端口是 68
计算机网络 - (三)电脑如何获取到IP的
我们把 DHCP 提供 ip 地址的报文称之为 offer报文。当我们客户主机收到IP地址后就可以上网了

计算机网络 - (三)电脑如何获取到IP的
如果 DHCP 服务器没有在我们所在的局域网里怎么办?这个时候,这个discover 报文 就会通过我们的网关来进行传递,并且会把源 ip 替换成网络的 ip,源端口是 68,这里涉及到 NAT 地址到转换。可以看看我之前写的文章

计算机网络 - (二)NAT的工作基本原理

DHCP 服务器收到报文之后,就可以根据源端口 68 来判断这是一个 discover 请求 报文了。就会把 offer 发给网关,网关再发给我们的主机。

关于租期

在DHCP客户端的租约时间到达 1/2 时,客户端会向为它分配 IP 地址的DHCP服务器发送 request 单播报文,以进行 IP 租约的更新。如果服务器判断客户端可以继续使用这个 IP 地址,就回复 ACK 报文,通知客户端更新租约成功。如果此IP地址不能再分配给客户端,则回复 NAK 报文,通知客户端续约失败。

如果客户端在租约到达 1/2 时续约失败,客户端会在租约到 7/8 时间时,广播发送 request 报文进行续约。DHCP服务器处理同首次分配 IP 地址的流程。

总结

255.255.255.255这个地址一般用来广播的时候使用,而0.0.0.0这个地址可以代表这是一个还没有分配 ip 的主机。

不过0.0.0.0还有其他作用,代表主机还没有分配ip地址只是其中的一个用处。例如:充当默认路由来使用,当一个路由器要发送路由表中无法查询的包时,如果设置了全零网络的路由时,我们就可以把这个包丢给全零网络的路由。

相关文章:

  • 2021-06-02
  • 2022-12-23
  • 2021-05-20
  • 2021-05-19
  • 2021-07-11
  • 2022-01-13
  • 2021-12-05
猜你喜欢
  • 2021-04-08
  • 2022-12-23
  • 2022-12-23
  • 2021-08-20
  • 2021-05-23
  • 2022-12-23
  • 2021-10-24
相关资源
相似解决方案