라이브러리
프로그래밍언어, 각종코드, 관련동향, 논문 등의 저장소
IPv6 어플리케이션은 어떻게 IP 주소를 파악하게 되나요?
어플리케이션의 IP 주소 리졸루션 일반적 절차
응용 어플리케이션 프로그램에서는 사용자가 입력한 도메인네임을 우선 IP 주소로 변환하는
절차를 거쳐야 합니다.
인터넷 통신을 위해서는 시스템이 제공하는 Socket API를 사용해야 하는데,
Socket API는 도메인네임을 인식할 수 없기 때문입니다.
그래서 먼저 도메인네임 -> IP 주소로 변환하는 절차를 먼저 수행하여 IP 주소를 파악한 후,
Socket API로 IP 주소를 사용한 접속 절차를 개시할 수 있습니다.
IPv4 DNS 환경에서 IP 주소 변환을 위한 함수 gethostbyname()
IPv4 인터넷 환경에서는 이 도메인네임 -> IP 주소 변환을 위해 gethostbyname()을
호출합니다.
gethostbyname() 함수
struct hostent *gethostbyname(const char *);
gethostbyname()은 도메인네임을 인자로 하여 호출하면 IPv4 주소를 hostent 구조체로
반환합니다.
IPv6 DNS 환경에서 IP 주소 변환을 위한 함수 getaddrinfo()
IPv6에서는 이 함수외에 새로운 함수를 새로 정의하였습니다.
getaddrinfo() 함수는 IPv6 환경에서 도메인네임에 대한 IPv4 주소와 IPv6 주소를 파악하여
반환하는 기능을 제공합니다.
getaddrinfo() 함수
int getaddrinfo(const char *nodename, const char *servname,                const struct addrinfo *hints, struct addrinfo **res);
getaddrinfo() 함수는 지정된 도메인네임을 인자로 받아, AAAA 타입과 A 타입 DNS 질의를
모두 수행한 후에 도메인네임에 설정된 모든 IPv4 주소, IPv6 주소 목록을 어플리케이션으로
반환하는 기능을 기본적으로 제공합니다.
NOTE!: 도메인네임에 대해 한번의 DNS 질의로 IPv4 주소와 IPv6 주소 모두 응답받지는 못함
DNS는 도메인네임에 대한 별도의 리소스레코드로 속성정보(attribute information)을 표시
ftp.examp.co.kr. 180 IN A 192.0.2.200
ftp.examp.cp.kr. 180 IN AAAA 2001:cd5:f::200
위와 같이 설정된 경우 ftp.examp.co.kr 도메인네임에 대한 IP 주소는 A 타입 DNS 질의와
AAAA 타입 DNS 질의의 2번의 DNS 질의를 통해서만 모두 파악 가능
어플리케이션은 getaddrinfo() 함수를 호출하면서, 모든 형태의 IP 주소, IPv4 주소 only, 또는
IPv6 주소 only 등으로 원하는 형태의 주소 타입을 지정하여 호출할 수 있습니다.
Ref Docs:RFC3493 "Basic Socket Interface Extensions for IPv6", 6. Library Functions
RFC3493은 POSIX의 IPv6 지원을 위해 확장된 Socket API에 대한 정보를 제공
Socket API과 함께 어플리케이션이 도메인네임의 IP 주소 변환 관련 라이브러리 함수에
대한 정보도 제공.
현재 출시되고 있는 IPv6 시스템 OS 또는 개발용 라이브러리에서는 이 함수를 구현하고
있으며, IPv6 어플리케이션은 이 함수와 IPv6 지원 Socket 함수를 사용하여 개발된
통신 프로그램입니다.
NOTE!: getaddrinfo()와 같은 IPv6 지원 함수는 IPv4와 IPv6 모두에 적용
IPv6 지원 함수는 IPv6만을 위한 것이 아니라 IPv4와 IPv6 까지 지원 확장된 함수를 의미
IPv6 지원 Socket의 경우도 PF_INET6를 사용, IPv6를 추가 지원
IPv6 어플리케이션은 IPv4와 IPv6 통신 모두 가능한 어플리케이션을 의미함
NOTE!: getaddrinfo() 함수가 무조건 처음부터 DNS 질의를 하는 것은 아님
getaddrinfo() 함수가 DNS 질의를 수행하는 것은 사실이지만 무조건 처음부터 DNS 질의를
하는 것은 아님
Unix 및 Linux 계열 호스트 환경에서는 /etc/nsswitch.conf 파일의 설정 내용에 따라 동작
/etc/nsswitch.conf 파일의 내용 중 "host"에 대한 설정내용이 동작에 영향을 끼침
host dns files
위와 같이 지정된 경우, 먼저 DNS 질의를 하고 그 응답이 실패한 경우, 호스트 내부의
/etc/hosts와 같은 파일에 설정된매핑정보를 검색
host files dns
위와 같이 지정된 경우, 먼저 호스트 내부의 /etc/hosts와 같은 파일에 설정된
매핑정보를 검색하고, 여기에서 실패한 경우에 DNS 질의 수행 
 
  Comments,     Trackbacks