DNS 서버는 호스트 이름을 IP 주소로 확인합니다. 내 말이 맞다면 프로그램은 getaddrinfo()
DNS 서버를 호출한 다음 이를 확인하기 위해 호출하여 호스트 이름을 IP 주소로 확인할 수 있습니다.
SysV init에는 DNS 서버처럼 서비스 이름을 포트로 확인하는 데몬이 있습니까? 독서를 통해서 그렇게 됩니까 /etc/services
? getaddrinfo()
구문 분석을 수행하기 위해 데몬도 호출 됩니까 ?
나는 inetd
읽기가 /etc/services
어떤 소켓을 수신할지 결정하는 것임을 알고 있습니다. 하지만 inetd
서비스 이름을 포트로 확인하는 것 같지는 않습니다. 그렇죠?
감사해요.
답변1
DNS 는 getaddrinfo()
정의된 경우에만 호출됩니다. nsswitch.conf
이 files
항목은 에서 직접 읽습니다 /etc/hosts
.
기본적으로 "네임 서비스 전환" 기능(NSS)을 살펴보고 /etc/nsswitch.conf
아마도동적 로딩"libnss" 루틴. 예를 들어, 에서 언급할 /lib/x86_64-linux-gnu/libnss_files.so.2
때 로드되는 라이브러리가 있을 수 있습니다.files
nsswitch.conf
호스트의 경우 해당 nsswitch.conf
줄은 다음과 같이 읽을 수 있습니다.
hosts: files dns
이는 이름 서비스 확인자에게 "nss_files" 라이브러리(에서 검색됨 /etc/hosts
)를 로드하거나, 실패할 경우 "nss_dns" 라이브러리를 로드하도록 지시합니다. 그것은저것DNS 서버를 호출하는 라이브러리입니다.
서비스의 경우 nsswitch.conf 행은 다음과 같습니다.
services: files ldap
그러면 "nss_files" 라이브러리( 에서 검색됨 /etc/services
)가 로드되고, 로드가 실패하면 "nss_ldap" 라이브러리가 로드됩니다.
이름 확인 방법을 결정하는 다양한 백엔드(file, db, ldap, nis, compat, dns...)가 있습니다.
inet
다음과 같은 항목의 경우
service time
{
...
}
time
NSS 맵에서 조회할 값입니다 services
. files
in을 사용 하면 nsswitch.conf
선이 보일 것입니다.
time 37/tcp timserver
inetd
TCP 포트 37에 바인딩하라고 지시합니다 .