DNS 服务器将主机名解析为 IP 地址。一个程序可以通过调用将主机名解析为 IP 地址getaddrinfo()
,如果我是正确的,它反过来要求 DNS 服务器进行解析。
在 SysV init 中,是否有一些守护进程将服务名称解析为端口,就像 DNS 服务器一样?它通过阅读来做到这一点/etc/services
吗?是否getaddrinfo()
还调用守护进程来执行解析?
我知道inetd
读取 /etc/services
决定要听哪些套接字。但inetd
似乎没有将服务名称解析为端口,是吗?
谢谢。
请注意,
getaddrinfo()
仅在定义 DNS 时才调用nsswitch.conf
它。该files
条目直接从 读取/etc/hosts
。基本上,“名称服务切换”功能(NSS)查看
/etc/nsswitch.conf
然后可以动态加载“libnss”例程。因此,例如,您可能有,这是在中提到/lib/x86_64-linux-gnu/libnss_files.so.2
时加载的库。files
nsswitch.conf
对于主机,该
nsswitch.conf
行可能类似于这将告诉名称服务解析器加载“nss_files”库(它将在 中查找
/etc/hosts
),如果失败,则加载“nss_dns”库。它是调用 DNS 服务器的那个库。对于服务,nsswitch.conf 行的内容可能类似于
这将加载“nss_files”库(将在 中查找
/etc/services
),如果失败则加载“nss_ldap”库。有各种不同的后端(文件、db、ldap、nis、compat、dns...),它们决定了名称的解析方式。
对于
inet
诸如time
在 NSS 映射中查找该值services
。如果files
用于nsswitch.conf
那么它会看到一条线它告诉
inetd
绑定到 TCP 端口 37。