-
TCP/IP 소켓 프로그래밍 - 8장 : 도메인 이름과 인터넷 주소네트워크 2024. 6. 18. 20:09
8장
DNS ( Domain Name System )는 IP주소와 도메인 이름 사이의 변환을 수행하는 시스템이다.
도메인 이름을 IP 주소에 부여해,
기억하기 쉽고 표현하기 좋은 형태의 주소정보를 이용할 수 있다.
인터넷에서 특정 사이트에 접속하는 방법은 2가지가 있다.
- 직접 IP 주소 입력하기. ( 요즘은 ip로 직접 접근하는 것을 막는 경우가 많다. )
- 도메인 이름으로 접속하기
모든 컴퓨터에는 디폴트 DNS 서버의 주소가 등록되어 있으며,
이 디폴트 DNS 서버를 이용해 도메인 이름에 대응되는 IP 주소를 얻는다.
ping 명령어를 치면, 도메인 이름에 해당하는 ip 주소를 알 수 있다. ( ex - ping www.naver.com )
nslookup 명령어를 치면, 디폴트 DNS 서버의 주소를 알 수 있다. ( 리눅스의 경우 server도 쳐줘야 함. )

Default DNS server에서 원하는 도메인 이름에 대한 ip를 찾지 못한 경우 디폴트 DNS 서버는 자신이 모르는 정보에 대해 한 단계 위의 DNS 서버에게 물어본다.
계속 올라가다 보면 ROOT DNS 서버까지 올라갈 수 있다.
DNS는 계층적으로 관리되는 분산 데이터베이스 시스템의 일종이다.
08-2 IP 주소와 도메인 이름 사이의 변환
IP 주소를 직접 사용해 프로그램을 작성하는 것은 문제가 될 수 있다.
IP 주소는 도메인 이름에 비해 상대적으로 변경될 확률이 높기 때문이다.
클라이언트는 도메인 이름을 근거로 IP 주소를 얻어온 뒤 서버에 접속하게 되므로,
서버의 IP 주소에 연연하지 않고 프로그램을 작성할 수 있다.
그래서 IP 주소와 도메인 이름 사이의 변환 함수가 필요한 것이다.
아래 함수는 IP 주소와 도메인 이름 사이의 변환함수이다.
#include <netdb.h> struct hostent * gethostbyname ( const char * hostname ); // 성공 시 hostent 구조체 변수의 주소 값, 실패 시 null 포인터 리턴도메인 이름을 문자열 형태로 전달하면,
hostent 구조체의 변수에 IP 주소 정보가 담겨서 반환 된다.
hostent 구조체는 아래와 같이 정의되어 있다.
struct hostent { char * h_name; // 공식 이름 char ** h_aliases // alias list int h_addrtype; // host 주소 체계 int h_length; // 주소 길이 char ** h_addr_list; // 도메인 이름과 대응되는 모든 IP 주소 정보 }- h_name : 공식 도메인 이름이 담겨져 있다.
- h_aliases : 공식 도메인 이름 이외에 접속할 수 있는 다른 도메인 이름 정보가 적혀있다.
- h_addrtype : 주소 체계, IPv4를 쓰는지 IPv6를 쓰는지에 대한 정보가 담겨져 있다.
- h_length : IP 주소 크기 정보. IPv4의 경우 4, IPv6의 경우 16이 저장된다.
- h_addr_list :
IP 주소를 이용해 도메인 정보를 얻어올 수도 있다.
#include <netdb.h> struct hostent * gethostbyaddr(const char * addr, socklen_t len, int family); //성공 시 hostent 구조체 변수의 주소 값, 실패 시 NULL 포인터 리턴 //addr : in_addr 구조체 변수의 포인터 전달. char 형 포인터는 IPv4이외에도 전달받을 수 있게 하기 위함.아래는 위 함수들을 이용해 예제 코드를 작성, 실행한 결과이다.


'네트워크' 카테고리의 다른 글
TCP/IP 소켓 프로그래밍 - 10장 : 멀티프로세스 기반의 서버 구현 (0) 2024.06.20 TCP/IP 소켓 프로그래밍 - 9장 : 소켓의 다양한 옵션 (0) 2024.06.19 TCP/IP 소켓 프로그래밍 - 7장 : 소켓의 우아한 연결종료 (0) 2024.06.18 TCP/IP 소켓 프로그래밍 - 6장 : UDP 기반 서버/클라이언트 (0) 2024.06.18 TCP/IP 소켓 프로그래밍 - 5장 : TCP 기반 서버/클라이언트 2 (0) 2024.06.17