2015. 2. 11.

[Windows Network Programming]도메인 이름 시스템(Domain Name System)

 우리가 Google에 접속하기 위해서는 두 가지 방법을 사용한다. 하나는 브라우저의 주소창에 google.co.kr을 직접 입력하는 방법이다. 다른 하나는 네이버와 같은 검색 사이트에서 google을 검색하여 사이트 링크를 통해서 접속하는 방법이다. 그런데 네이버에 접속하기 위해서는 우리는 naver.com이라고 주소창에 입력한다. 우리는 특정 사이트에 접속하기 위해서 IP 주소를 직접 입력하지 않는다. IP 주소 대신 도메인 이름을 입력한다. 이번에는 도메인 이름이 무엇이고, 이를 어떻게 사용할지 알아보도록 하자.


도메인 이름 시스템(Domain Name System)

 주소창에 IP 주소 74.125.224.17를 입력해보자. 어떤 사이트가 나오는지 확인해보자. 이 사이트는 Google이다. Google이라는 사이트에 접속하기 위해서는 기본적으로 Google의 IP 주소를 알아야 한다. 그런데 이 IP 주소를 외워서 Google에 접속하는 것은 매우 힘든 일이다. 숫자를 암기하는 것도 번거롭고, 숫자를 브라우저의 주소창에 입력하는 것도 귀찮은 일이다. 이런 문제를 해결하기 위해서 도메인 이름이 사용된다.

 도메인 이름이란 IP 주소와 대응하는 이름으로, 사람이 기억해서 사용하기 쉽게 만든 것이다. 그러면 우리는 대부분 도메인 이름을 입력하여 사이트에 접속하는데, 도메인 이름을 입력하면 이를 IP 주소로 변환해주는 역할을 하는 무언가가 필요하다는 생각이 들 것이다. 이런 역할을 하는 것이 바로 도메인 이름 서버(DSN Server, Domain Name System Server)이다. 이 서버는 IP 주소와 도메인 이름 사이의 변환 정보를 가지고 요청에 따라 IP 주소를 알려주는 역할을 한다. 그리고 어느 한 도메인 이름 서버가 모든 정보를 가지고 있지는 않다는 점에서 일종의 분산 데이터베이스이다.


 위 그림은 DNS Server가 어떻게 동작하는지 보여준다. 번호를 따라 살펴보자.
  1. 사용자: "http://www.howstuffworks.com에 접속해야 해."
  2. DNS Server1: "도메인 이름 http://www.howstuffworks.com이 나의 데이터베이스에 저장되어 있지 않네. 내가 다른 DNS Server에 알아볼게."
  3. DNS Server2: "내 cache에 그 데이터가 있어. 그 도메인 이름은 IP 주소 70.42.251.42야."
  4. DNS Server1: "좋아좋아. 이 데이터가 더 요청될지도 모르니깐 나도 그 데이터를 보관해야 겠다."
  5. 사용자: "IP 주소를 알려줘서 고마워."
 이 과정은 DSN Server의 역할과 함께 DSN Server가 분산 데이터베이스라는 점도 보여준다.


윈속에서 IP 주소와 도메인 이름 사이의 변환
 gethostbyname() 함수는 함수의 이름대로 도메인 이름으로 호스트의 IP 주소를 반환한다. msdn에 따르면 Windows Socket 2 애플리케이션 개발자는 gethostbyname() 함수 대신에 getaddrinfo() 함수를 사용하기를 권고하고 있다. 여튼 gethostbyname() 함수는 도메인 이름 -> IP 주소 변환을 사용할 수 있다. 반환형은 hostent의 포인터이다.
 hostent 구조체는 인자로 전달한 도메인 이름을 통해 얻을 수 있는 IP 주소를 저장할 수 있다.

 그러면 IP 주소를 가지고 도메인 이름을 알 수는 없을까? 가능하다. gethostbyaddr() 함수를 사용하면 된다.
 이 함수 hostent 구조체를 사용한다.


IP 주소 <-> 도메인 이름 변환 함수 응용


정리하면

  • 도메인 이름 시스템은 도메인 이름을 통해 IP 주소 정보를 제공한다.
  • HOSTENT 구조체는 도메인 이름, IP 주소를 저장한다.
  • gethostbyname() 함수, gethostbyaddr() 함수를 통해 도메인 이름, IP 주소 정보를 얻을 수 있다.

댓글 없음:

댓글 쓰기