도메인 이름 및 IP 주소

도메인 이름 시스템 DNS(Domain Name System)
IP 주소는 기억하고 설명하기 어려우므로 도메인 이름으로 IP 주소를 대체합니다
도메인 이름은 서버에 부여된 가상 주소로, DNS 서버는 가상 주소(도메인 이름)를 실제 주소(IP 주소)로 변환합니다.
모든 컴퓨터에 기본 DNS 서버 주소가 기록되어 있습니다. 기본 DNS 서버를 통해 도메인에 해당하는 IP 주소 정보를 얻을 수 있습니다. 기본 DNS 서버는 모든 도메인의 IP 주소를 알 수 없습니다. 기본 DNS가 해석할 수 없는 요청을 받으면 상급 DNS 서버에 문의합니다. 상급 DNS도 해석할 수 없으면 아까의 동작을 반복해서 상급 DNS 서버, 즉 루트 DNS 서버에 문의합니다.이것은 어느 DNS 서버에 문의하는지 알고 있습니다.도메인 이름을 확인한 후 원래 경로로 돌아가 요청을 시작한 호스트에 IP 주소를 전달합니다.
 
도메인 이름을 사용하는 이유
도메인 이름이 등록되면 영구적으로 변하지 않지만 IP 주소의 변경 확률은 비교적 높기 때문에 도메인 컴파일러를 사용해야 한다. 도메인 이름에 따라 주소를 얻고 서버에 접속해야 한다.
 
도메인 이름으로 IP 주소 가져오기
struct hostent *gethostbyname(const char*name);
함수 성공 시 hostent 구조체 주소 반환 실패 NULL 포인터 반환
사용 시 도메인 이름 문자열만 전송하고 되돌아오는 주소 정보는 구조체에서
hostent 구조체 정의:
struct hostent
{
     char   *h_name;//공식 도메인 이름
     char    **h_aliases;//기타 도메인 이름
     int     h_addrtype;//IPv4인 경우 구성원 값이 AF 인 IP 주소족 정보INET
     int     h_length;//IP 길이(IPv4 구성원 값이 4인 경우), IPv6 구성원 값이 16인 경우
     char    **h_addr_list;//지향 inaddr 구조체 변수 주소의 문자열 포인터 그룹
 };
코드 예:
int i = 0;
struct hostent *host = NULL;
......
host = gethostbyname(argv[1]);
if(!host)
{
	.....
}

printf("official name : %s
", host->h_name); for(i=0; host->h_aliases[i]; i++) printf("aliases %d: %s
", i + 1, host->h_aliases[i]); printf("address type: %s
", (host->h_addrtype == AF_INET)? "AF_INET" : "AF_INET6"); for(i=0; host->h_addr_list[i]; i++) printf("ip addr %d : %s
", i + 1, inet_ntoa(*(struct in_addr)host->h_addr_list[i]))

Hostent 구조체 구성원 haddr_list가 가리키는 그룹 형식은 in 이 아닙니다ddr 구조체의 바늘 수조,char 바늘입니다. 이 구조체는 IPv4만을 위한 것이 아니며, 표준화void 바늘이 정의되지 않았기 때문에char 바늘을 사용했습니다.
 
IP 주소로 도메인 이름 가져오기
struct hostent * gethostbyaddr(const char *addr, socklen_t len, int family);
성공 시 hostent 구조체 변수의 주소를 되돌려주고 실패 시 NULL 포인터를 되돌려줍니다
매개 변수 1: IP 주소 정보를 포함하는 in 전송addr 구조체 주소
매개 변수 2: 첫 번째 매개 변수에 전달되는 주소 정보 바이트 IPv4는 4, IPv6는 16
매개변수 3: 주소 패밀리 정보 전달 IPv4의 경우 AFINET, IPv6에서 AFINET6

좋은 웹페이지 즐겨찾기