"인터넷"이라는 환경을 사람들은 당연하게 사용하고 이미 구축되어있는 것들에 궁금증을 가지지 않는다.
심지어 개발자인 나 조차도 어떻게 인터넷을 사용하는지 숨겨져있는 곳에 관심을 갖지 않았고 당연히 모르고있었다.
그 중 리눅스에서 도메인네임을 ip와 포트로 변경하는 것에 대해 알아보자.
우리는 www.tistory.com 이라는 도메인주소를 알고있다. 하지만 그 서버의 ip를 기억하지는 못한다. 이렇게 도메인을 ip로 변경해주는 역할을 누가 하고있는 것일까?
리눅스에서는 먼저 /etc/nsswitch.conf 라는 파일에 hosting하는 방법에 대해 명시하고있다.
hosts: files dns
명시되어있는것을 보았을때 우리는 file을 확인하고, dns를 확인해서 도메인주소를 ip로 변경한다는 의미를 확인할 수 있다.
hosts가 명시되어있는 파일은 linux에서 /etc/hosts 라는 파일이다.
기본적으로는 localhost만 기록이 되어있는데 이 파일을 수정하면 원하는 도메인주소를 ip로 변경할 수 있다.
그 외의 대부분의 도메인 주소들을 ip주소로 알려주는 곳은 DNS서버이다.
그리고 linux 에서는 /etc/resolv.conf 라는 파일에 dns 서버의 ip를 가지고있다.(참고로 dns 서버는 주로 통신사에서 가지고 있다.)
결국 해당 ip로 우리는 도메인 네임을 보내고 그 도메인 네임을 바탕으로 ip주소를 가져와서 특정 ip에 접속하는 시스템이라고 볼수있다.
실제적으로 함수와 구조체를 가지고 설명을 구체적으로 해보겠다.
#include <netdb.h>
struct hostent * gethostbyname(const char *name);
struct hostent{
char *h_name; //호스트 공식 이름
char **h_aliases; // 호스트 알리아스명
int h_addrtype; //주소타입
int h_length; //주소길이
char **h_addr_list; //ip주소 배열
#define h_addr haddr_list[0]
}
위에서 gethostbyname 이라는 함수는 도메인 주소를 입력으로 받아서 ip주소등의 정보를 알려주는 함수이다.