请告诉我 DNS 在 Linux 中如何工作,以及命令和调试

请告诉我 DNS 在 Linux 中如何工作,以及命令和调试

我想了解当我们在浏览器中输入一些 URL 时发生的流程,以及如何使用 Linux 命令调试某些功能是否不起作用

答案1

我想了解当我们在浏览器中输入某个 URL 时发生的流程

例如

以及如何调试

最有用的工具可能是

  • tcpdump
  • nslookup或其更现代的等价物hostdig
  • wgetcurl。阅读它们的手册页以找到有用的选项,例如
    • --server-response
    • --debug
    • --verbose
    • --no-dns-cache

不过,您需要首先了解本地名称解析,因为在 DNS 之前可能会使用名称服务(例如本地主机文件,以及在某些罕见设置中,其他网络服务,如 NBNS、YP 等)。我建议先阅读man resolv.conf

答案2

Linux 系统附带了许多系统库,其中包括一个sys/sockets.h用于 C 程序的实现,它实现了伯克利套接字 APIPOSIX标准。POSIX 规范包括以下定义:方法调用getaddrinfo()该函数将主机的 IP 地址返回给需要它的程序。每个编程运行时(例如Pythonperlphp等)实现自己的接口,通过它们调用获取地址信息()但大多数实际上使用内核的方法来实际处理 DNS 请求。

套接字连接涉及许多方法调用,包括 socket()、bind()、connect() 等。请参阅我的回答这里如何协调这些呼叫以建立网络连接。

客户端 DNS 解析故障排除归根结底在于服务器和缓存。服务器将响应它所知道的目标地址,但如果出于某种原因(地理位置、黑名单等)该地址不是您想要的地址,您可以将服务器更改为具有您想要的地址的服务器。如果您连接到具有您想要的地址的服务器,但仍然得到不好的结果,则可能是由主机上的缓存响应或路由器或缓存代理的上游缓存响应引起的。

相关内容