初始DNS服务器地址是哪里来的?

DNS 是互联网中非常重要的一个系统。任何主机、设备,要想访问网络,几乎都需要先通过 DNS 服务器,查询主机的 IP 地址,然后才能与目标主机通信。通常情况下,我们都是无需为主机或设备设置 DNS 服务器地址的,那么那些 DNS 服务器地址究竟是哪里来的呢?难道是厂商事先在计算机里面埋的静态地址么?如果是这样的话,如果 DNS 服务器的 IP 地址改变了要如何处理呢?这里我们就通过 Wireshark 抓包,分析一下计算机的初始 DNS 服务器地址到底是哪里来的。

手机在启动之后,首先会通过DHCP协议,来获得自己的IP地址。如下图:


DHCP

在 DHCP 协议中,需要分配 IP 地址的设备发送一个广播包,也就是 DHCP Request,如图中的第 31 号包所示,其中包含有一个 Transaction ID。由此可见 DHCP 协议是运行于 UDP 之上的。DHCP Request 广播由请求分配 IP 地址的设备的 UDP 68 号端口发出,发向广播的 UDP 67 号端口,如下图:


然而 DHCP 协议不仅仅用于分配 IP 地址,如上图的第 32 号包的 DHCP Request 的 Parameter Request List option 如下:


可见 DHCP 还会被用于,获取子网掩码、域名以及域名解析服务器的地址等信息。

局域网中的 DHCP 服务器在收到 DHCP Request 消息之后,会发出一个 DHCP NACK 作为响应。如 32 和 33 号包。

设备又发送了一个 DHCP Discover 包,这个包的内容与前面的 DHCP Request 包大同小异。DHCP 服务器在收到 DHCP Discover 包之后,将响应一个 DHCP Offer 包,在这个包中将携带有为设备分配的IP地址,可用的域名服务器地址等信息,如第 37 号包:


对于我们这个 case,设备被分配的 IP 地址为 192.168.23.2 ,DHCP 为设备提供了 3 个域名解析服务器地址,分别为 192.168.130.33, 192.168.130.31,和 114.114.114.114,这些域名解析服务器 IP 地址按照优先级进行排列。

后续的DNS请求,我们可以看到,都是发向 192.168.130.33 的,如下图:


由此可见,计算机的域名解析服务器的地址,通常都是来自于 DHCP 服务器的。

Done。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: lwIP(轻量级IP协议栈)是一个用于嵌入式系统的开源TCP/IP协议栈。在lwIP中,我们可以使用DHCP(动态主机配置协议)来获取DNS(域名系统)服务器的地址。 要使用DHCP获取DNS服务器地址,我们需要进行以下步骤: 1. 初始化lwIP协议栈: 首先,我们需要在嵌入式设备中初始化lwIP协议栈。这可以通过调用lwIP提供的初始化函数来完成。 2. 设置网络接口: 在初始化lwIP协议栈之后,我们需要设置网络接口,这可以通过调用lwIP提供的接口函数来完成。在设置网络接口时,我们可以指定使用DHCP作为IP地址DNS服务器的配置方式。 3. 启用DHCP客户端: 接下来,我们需要启用lwIP中的DHCP客户端。这可以通过调用lwIP提供的DHCP客户端函数来完成。 4. 获取DNS服务器地址: 一旦DHCP客户端启用成功,在lwIP中,它将自动与DHCP服务器进行通信,获取分配给设备的IP地址、子网掩码和DNS服务器地址等网络配置信息。我们可以通过访问lwIP中的相应数据结构来获取DNS服务器地址。 5. 使用DNS服务器: 在获取到DNS服务器地址之后,我们就可以将其用于设备的DNS解析了。lwIP提供了DNS客户端函数,我们可以使用这些函数向DNS服务器发送解析请求,并获得相应的IP地址。 需要注意的是,以上步骤是基于lwIP协议栈的一般用法。具体使用方法可能因不同的应用需求和设备平台而有所不同,因此在实际应用中,可能需要查阅lwIP的文档和示例代码来进一步了解和使用特定的函数和配置选项。 ### 回答2: 在使用lwIP库进行网络开发时,可以通过Dynamic Host Configuration Protocol(DHCP)来获取DNS服务器。下面是一些使用lwIP库获取DNS服务器的步骤: 1. 首先,确保lwIP库已经正确地配置和初始化。可以包括在系统中包含lwIP库并进行相应的初始化函数调用。 2. 在代码中,使用lwIP的API函数来启用DHCP功能。一般情况下,可以使用以下代码片段来启用DHCP: ``` dhcpc_start(netif); ``` 这将在指定的网络接口(netif)上启动DHCP客户端。 3. 当DHCP客户端成功获取到IP地址时,可以通过以下代码来获取DNS服务器的配置信息: ``` dns_getserver(num_dns, &ip_addr); ``` 这将返回第num_dns个DNS服务器的IP地址,存储在`ip_addr`变量中。 4. 接下来,可以使用lwIP的其他相关API函数来处理和使用所获取的DNS服务器IP地址。这可能包括将其设置为系统的默认DNS服务器,或使用它进行DNS查询等。 请注意,上述步骤仅为获取DNS服务器的基本过程。在实际使用中,可能还需要处理一些错误情况、超时和其他特定的要求,以确保正常地获取到DNS服务器的IP地址。 ### 回答3: 在LWIP中,要使用DHCP获取DNS服务器,可以按照以下步骤进行操作: 1. 首先,配置LWIP库以使用DHCP。这可以通过在lwipopts.h文件中设置LWIP_DHCP为1来完成。这将启用LWIP库中的DHCP功能。 2. 接下来,在主应用程序的初始化代码中,创建一个与LWIP库关联的网络接口。可以使用函数netif_add()来完成这一操作。确保在调用netif_add()之前设置好LWIP库的ip、netmask和gateway。 3. 在网络接口关联后,可以注册一个回调函数来处理DHCP过程中的事件。可以使用函数dhcp_start()来启动DHCP过程,并将回调函数注册到网络接口。回调函数将在DHCP过程中触发不同的事件,例如IP地址DNS服务器地址的获取。 4. 在回调函数中,可以使用netif_ip_addr_get()函数来获取分配给设备的IP地址。类似地,可以使用dhcp_supplied_dns()函数来获取DHCP服务器提供的DNS服务器地址。将这些地址存储在适当的变量中,以便在需要时使用。 5. 最后,在应用程序的其他部分中,可以使用存储的DNS服务器地址来配置设备或执行其他与网络通信相关的任务。 需要注意的是,DHCP过程可能需要一些时间来完成,因此在操作DNS服务器之前,确保DHCP过程已经完成并且DNS服务器地址已经获取。 以上是使用LWIP库通过DHCP获取DNS服务器的基本步骤。根据具体的应用需求和网络环境,还可以进一步配置其他参数和处理其他事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值