본문 바로가기

Golang/etc

tcp/ip -08 DNS

728x90
반응형

DNS (domain name system)

서버 마다 할당 된 ip 주소를 매번 외우는 것이 쉽지 않기 때문에, domain name이라는 사람들이 기억하기 쉬운 이름을 ip 주소에 할당한다. 

 

바로 이 domain name과 ip주소 사이에서의 변환을 수행하는 프로그램이 DNS이다. 

도메인 이름은 해당 서버에 부여된 가상의 주소이므로 실주소로 변환 후 해당 서버에 접속이 가능하다. 

 

* 인터넷 브라우저에 domain name을 입력하면 일어나는 일 

1. 인터넷 브라우저에서 DNS 서버에 접속한다. -> 해당 domain name에 대한 IP정보를 얻어온다. -> 얻어온 실주소를 통해 해당 서버에 접속한다.

 

네트워크를 거대한 인터넷 망에 연결하도록 돕는 것이 gateway

* 데이터를 전송한다고 하면 그 데이터는 무조건 gateway를 통과하여 인터넷으로 나가게 되어있다. 

 

*DNS 서버는 보통 한 네트워크에서 공통으로 하나만 사용한다. 

 

도메인 이름을 통해서 IP주소를 얻어오는 함수 

- struct hostent * getbyhostname(const char * hostname);

-> 성공시 hostent 구조체 변수의 주소 값, 실패 시 NULL 포인터 반환

 

 

struct hostent에 채워지는 주소의 형태

h_name : 공식 도메인 이름

h_aliases : 별칭 도메인 이름 (** 이중포인터)

h_addrtype : 반환된 IP정보가 IPv4인 경우, AF_INET이 반환

h_length: 반환된 IP 정보의 크기, IPv4의 경우 4, IPv6인 경우 16

h_addr_list : IP의 주소정보, 둘 이상의 경우 모두 반환  (** 이중포인터)

 

*이중포인터는 배열을 참조하기 때문에, 캐릭터형 배열의 형태로 여러 주소공간을 저장하고 있다. 

-> 한 domain name에는 여러 IP주소가 할당되어 있을 수 있기 때문에. 

 

 

728x90
반응형

'Golang > etc' 카테고리의 다른 글

tcp/ip -10 멀티프로세스 기반의 서버 구현  (0) 2022.07.12
tcp/ip - 09 소켓 옵션  (0) 2022.07.06
tcp/ip - 07 소켓의 종료  (0) 2022.07.04
golang udp example  (0) 2022.07.03
tcp/ip 05  (0) 2022.07.03