DNS와 작동원리


DNS에 대해 알아보자.


DNS는 Domanin Name System의 약자로, IP주소를 도메인으로 변환하고 도메인을 IP주소로 변환함으로써 통신하게 하는 시스템입니다.
온라인 상의 네트워킹을 하는 모든 단말은 IP주소를 갖고 있고 이 IP를 통해 서로 통신합니다.

  • 참고: IP주소는 인터넷에 내 IP라고 검색하면 확인할 수 있습니다.

IP주소는 숫자로 되어있기 때문에 이를 하나씩 기억하고 사용하기란 매우 불편합니다. 그래서 IP주소에 도메인 네임을 붙여서 통신하게 합니다. 네이버에 접근할 때, IP주소가 아닌 www.naver.com 이라고 치는 것처럼 말이죠.
여기서 naver.com이 네이버의 도메인입니다. 도메인의 IP주소는 nslookup명령어로 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 $ nslookup naver.com

Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: naver.com
Address: 125.209.222.142
Name: naver.com
Address: 125.209.222.141
Name: naver.com
Address: 210.89.160.88
Name: naver.com
Address: 210.89.164.90

결과에 대한 IP주소로 접근 시, 네이버로 접속되는 것을 확인할 수 있습니다. 정리하면, 사용자가 www.naver.com을 치면 DNS 서버는 도메인에 해당하는 IP주소를 찾고 IP주소로 서버에 접속하게 되는 것이죠.

동작원리

구체적인 DNS 동작원리를 살펴보겠습니다.

  1. 사용자가 www.example.com을 주소창에 입력합니다. 서버에 접근하는 행위는 요청(request)이라고 표현합니다.
  2. 가장 먼저, Local DNS 정보를 확인합니다. Local DNS에 정보가 없으면 도메인을 DNS루트 이름 서버에 질의합니다.
  3. DNS루트 이름 서버로부터 .com 도메인을 관리하는 TLD(Top-Level Domain) 서버 정보를 전달받고, TLD 서버에 다시 질의하게 됩니다.
  4. TLD 서버로부터 example.com 정보를 관리하는 도메인 서버 정보를 받고, 해당 서버로 부터 도메인에 ip주소를 취득하게 됩니다.
  5. IP주소로부터 응답받고 웹브라우저에 페이지를 표시합니다.

이처럼 루트 도메인 서버부터 차례대로 질의하며 도메인의 IP주소를 취득하는 것을 쿼리라고 합니다.

서버에 질의하기 전 Local DNS 먼저 확인을 하는데, 이 정보는 /etc/hosts에서 확인 가능합니다.

1
2
3
4
5
6
7
8
9
10
11
$ vi /etc/hosts

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost

우리가 127.0.0.1 또는 localhost라고 둘 다 사용가능했던 것도 Local DNS에 등록되어 있었기 때문입니다. 또한 우리가 특정 IP를 도메인으로 접속하고 싶다면 /etc/hosts에다 등록하면 됩니다. 단, 본인 PC에 한정되서 사용 가능합니다.

1
2
3
4
5
6
7
8
9
10
11
12
$ vi /etc/hosts

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
123.45.67.78 naver.com

이처럼 naver.com 도메인을 Local DNS에 특정 IP로 등록해 놓으면, naver.com을 서버에 질의하기 전에 먼저 확인하므로, 네이버 페이지가 아닌 내가 설정한 IP주소로 접속하게 됩니다. 신기하죵?ㅎㅎ

앞서 로트 도메인/최상위 도메인(Top-Level Domain)을 언급했는데, 이 내용은 도메인 생성 규칙과 연관되어 있습니다. naver.com의 경우 com이 최상위 도메인입니다. 가장 오른쪽 레이블이 최상위 도메인이며, 도메인 naver.com은 최상위 도메인에 포함됩니다. 오른쪽에서 왼쪽으로 갈수록 그 범위가 좁아집니다. 예를들어, 네이버 지도는 네이버 서비스 중 하나이므로 map.naver.com으로 나타냅니다. 루드 도메인은 어떤 값을 지칭하는 것은 아니고 모든 도메인의 시작점으로 보시면 됩니다.

서브 도메인

아직 설명하지 않은 www는 서브 도메인입니다. 서브 도메인이란, 메인 도메인에서 파생된 도메인으로 map.naver.com에서 naver가 메인 도메인, map이 서브 도메인이 됩니다. 다중의 웹서비스를 만들 때 주로 사용합니다. www의 경우, 메인 도메인 페이지로 접속하게 하는 서브 도메인이라고 보면 됩니다.

CNAME

CNAME은 하나의 도메인에 또다른 도메인을 추가하는 것입니다.
예를 들어 살펴보겠습니다.

123.45.67.89 -> test.com
test.com -> test2.com

위의 경우처럼, 하나의 IP주소에 test.com도메인이 있음에도, test2.com을 추가해 test2.com 도메인으로부터 123.45.67.89의 응답을 받는것입니다. CNAME은 보통 기존의 도메인을 대체할 때 사용합니다. 예를 들어 AWS에서 인스턴스를 생성하면 인스턴스 도메인 주소는 amazonelinux~.com 이런식으로 되는데 이 주소를 보통 그냥 사용하지 않고 CNAME을 통해서 웹페이지에 적합한 도메인이름을 붙입니다.

Comments