programing

getaddrinfo()는 DNS 조회를 어떻게 합니까?

yellowcard 2023. 10. 2. 13:53
반응형

getaddrinfo()는 DNS 조회를 어떻게 합니까?

getaddrinfo() 는 소켓을 생성하고 연결하기 전에 사용해야 하는 기능입니다(즉, 호출).socket()그리고.connect()어떻게 하는 것입니까?getaddrinfo()처음부터 DNS 서버와 통신을 합니까?

의 완전한 출처를 어디서 볼 수 있습니까?getaddrinfo()?

짧은 대답은 "시스템에 묻습니다"이며, 이는 다시 DNS 조회 방법과 사용할 서버를 알고 있습니다.

getaddrinfo()에 의해 문서화되어 있습니다.getaddrinfo(3)C 라이브러리 기능이라는 뜻의 수동 페이지입니다.또한 POSIX 기능이므로 표준 "소스"가 없습니다. POSIX를 준수하는 운영 체제의 각 표준 C 라이브러리는 자체 버전을 구현합니다.어느 쪽이든 해당 기능의 출처는 다른 기능과 OS API를 호출하기 때문에 그다지 계몽적이지 않을 수 있습니다. 실제 DNS 메커니즘에 도달하기 위해서는 훨씬 더 깊이 구멍을 뚫어야 하기 때문입니다.DNS 프로토콜 자체에 대한 설명서를 읽는 것이 좋습니다.

호출할 필요가 없습니다.getaddrinfo()소켓을 만들거나 연결하기 전에.stackoverflow.com 과 같은 도메인 이름을 69.59.196.211과 같은 IP 주소로 변환하는 데 사용됩니다.IP 주소를 알고 있으면 해당 주소로 바로 연결할 수 있고 사용할 필요가 없습니다.getaddrinfo().getaddrinfo()는 DNS 프로토콜을 사용하여 IP 주소를 사용하여 구성된 네임 서버와 대화합니다.

glibc 소스 코드는 여기 있습니다.

유닉스 시스템에 /etc/nswitch.conf 파일이 있습니까?그렇다면 "hosts" 항목은 호스트 이름을 IP 주소로 해결하기 위한 검색 순서를 제공합니다.시스템에 /etc/resolv.conf 파일이 있습니까?그렇다면 사용할 DNS 서버를 지정합니다.

보시다시피 getaddrinfo()는 꽤 많은 작업을 수행할 수 있으며 시간이 걸릴 수도 있습니다!

getaddrinfo()가능성이 높습니다.connect()을(를) 백그라운드에서 호출합니다. 그러나 이는 이미 쿼리할 호스트의 주소를 쿼리하기 위해 연결해야 하는 DNS 서버의 IP 주소를 알고 있습니다.

getaddrinfo()"www.somehost.com "을 IP 주소에 매핑하려는 경우에만 필요하며, 호출을 위한 프라이머로 필요하지 않습니다.connect().

당신은 아마도 완전한 소스 코드를 찾을 수 있을 것입니다.getaddrinfo()여기(다른 곳 중)에서 찾을 수 있는 glibc 소스에서.

그것이 당신을 위해 상황을 분명히 해주길 바랍니다.

getaddrinfo() 소스는 libc 구현에 있습니다.

glibc와 uclibc-ng는 구성에 사용합니다(glibc 확장, uclibc-ng는 glibc API를 따르려고 합니다).

muls에는 약간의 차이점이 있습니다(예: 이름 쿼리)./etc/resolv.conf모두 병렬로 처리하고 응답이 먼저 도착하는 경우 모두 허용하며 최대 3개의 네임 서버만 지원합니다.

Android는 항상 매우 다릅니다. 기본적으로 사용하지만 (댓글을 달아) 사용하도록 구성할 수 있습니다.하지만 오래된 리니지OS를 확인해보니 이 파일이 보이지 않습니다.resolv_private.h 에는 더 많은 구성 옵션(예: 재시도 간격 5초)이 있습니다.

DNS 프로토콜(UDP) http://www.freesoft.org/CIE/Topics/77.htm 을 사용하고 있습니다.

언급URL : https://stackoverflow.com/questions/2157592/how-does-getaddrinfo-do-dns-lookup

반응형