Network

Part 3. DNS Server 동작 원리

cwchoiit 2023. 10. 2. 15:55
728x90
반응형
SMALL
728x90
반응형
SMALL

DNS Server를 통해 특정 주소의 IP Address를 알아낸다고 했는데, 그럼 DNS Server는 어떻게 IP Address를 저장하고 관리할까?

우선, 임의의 서버 호스트가 본인의 IP Address를 www.example.com이라는 주소로 등록하고 싶다고 요청을 한다. 이 요청과 등록의 과정은 아래에서 더 자세히 살펴보자.

 

그럼 DNS Server랑은 어떻게 통신할까?

당연히 DNS Server도 Server이기 때문에 호스트이고 호스트와 통신을 하려면 주소가 필요하다. 이 DNS Server의 주소는 컴퓨터에 네트워크를 연결하는 순간 해당 컴퓨터에 DNS Server IP가 바로 할당된다. 그래서 모든 컴퓨터의 운영체제는 인터넷이 연결된 순간 DNS Server와 통신이 가능하게 된다.

이건 통신사가 제공하는 DNS Server와 연결되는 것인데 내가 원하는 DNS Server로 바꿀 수도 있다. 이는 Public DNS Server를 이용하면 된다. 

그럼 이제 인터넷이 연결된 호스트는 Part 2에서 언급했던 hosts 파일과 연결된 DNS Server를 통해 특정 주소에 대한 IP를 얻어내고 해당 주소를 가지는 호스트와 통신을 하게 된다. 이것이 동작원리이다.

 

DNS Internal

본 페이지의 개요에서 DNS Server라는 특정 서버와 임의의 호스트가 연결되는 원리를 알아보았는데, 그럼 과연 DNS Server는 단 한대만 존재할까? 아니다. DNS Server는 수십만 대가 있고, 각 서버마다 역할 또한 다르다. 

 

도메인 구조가 생각보다 여러 파트로 나뉜다.

cwchoiit.tistory.com.이라는 주소가 있으면 이 주소가 네 파트로 나뉜다.

위 그림에서 각 영역별로 담당하는 DNS Server가 다 다르다.

그러나 명확한 한 가지는 있다. Root DNS Server는 Top level DNS Server의 리스트를 가지고 있고 Top level DNS Server는 Second DNS Server의 리스트를 가지고 있고 Second level DNS Server는 Sub DNS Server 리스트를 가지고 있고 모든 호스트의 연결된 DNS Server는 최소한 Root DNS Server의 주소는 반드시 알고 있다.

 

이러한 구조를 알고 있는 상태에서 만약 내가 cwchoiit.tistory.com. 에 접속하고자 한다면 과정은 아래와 같다.

1. 내 컴퓨터(호스트)는 Root DNS Server에게 해당 주소를 물어본다.

2. Root DNS Server는 호스트에게 ". com"이라는 Top level을 관리하는 Top level DNS Server의 IP를 준다.

3. 호스트는 Top level DNS Server에게 해당 주소를 물어본다.

4. Top level DNS Server는 "tistory"라는 Second level을 관리하는 Second level DNS Server의 IP를 준다.

5. 호스트는 Second level DNS Server에게 해당 주소를 물어본다.

6. Second level DNS Server는 "cwchoiit"라는 Sub level을 관리하는 Sub level DNS Server의 IP를 준다.

7. 호스트는 Sub level DNS Server에게 해당 주소를 물어본다.

8. Sub level DNS Server가 cwchoiit.tistory.com. 의 실제 IP 주소를 알려준다.

 

이러한 세부적인 과정을 거쳐 최종적으로 원하는 IP를 돌려받고 해당 호스트와 통신하게 된다.

 

 

도메인 이름 등록 과정과 원리

위 그림을 통해 간단하게 도메인 등록 과정과 원리를 살펴보자. 사실 크게 중요한가 싶긴 하다만(?) 알고 나니 좀 더 기분이 좋아지긴 했다.

 

일단 최초에 등록자(Register)11.22.33.44라는 IP Address를 example.com이라는 주소로 등록하고 싶다고 가정해 보자. 

그럼 등록 대행자(Registrar)에게 (gabia.com 같은) 해당 IP를 알려주어야 한다. 등록 대행자는 자신들이 가지고 있는 DNS Server에 해당 IP를 example.com으로 등록하고 그 정보를 ICANN이라는 기관에 알려준다. 이 기관은 Root DNS Server의 모든 리스트를 가지고 있고 Root DNS Server에게 이렇게 말한다.

 

"이 example.com이라는 주소를 등록할 건데 너는 Root니까. com을 관리하는 Top level DNS Server에게도 이 사실을 알려줘!"

 

그럼 ICANN의 Root DNS Server들 중 하나가 Top level DNS Server의 주소를 알려주고 그 Top level DNS Server가 example이라는 Second level domain을 가지는 DNS Server의 주소를 가지게 된다. 그 DNS Server는 바로 등록대행자가 가지고 있는 DNS Server가 된다. 

 

1. 그러니까 Root DNS Server는. com을 관리하는 Top level DNS Server의 주소를 가지게 되고 2. .com을 관리하는 Top level DNS Server는 example을 관리하는 Second level DNS Server의 주소를 가지게 되고 3. Second level DNS Server는 곧 등록대행자가 가지고 있는 DNS Server인데 이 서버가 example.com의 실제 IP 주소를 가지고 있게 되는 구조다.

 

이런 식으로 등록을 완료하게 되면 이제 특정 호스트에서 example.com에 접속하기 위해 해당 호스트의 운영체제가 가지고 있는 DNS Server에게 물어본다. 그렇게 물어보면 위 1 - 8까지의 과정을 거쳐 해당 사이트에 접속하게 된다.

 

 

 

A / NS / CNAME Record

위 그림에서 보면 A, NS라는 키워드가 사용되었는데 그 부분을 알아보자.

우선 위 그림에서 example.com A 11.22.33.44 example.com NS a.lana-servers.net 이런 한 줄 한 줄이 눈에 보일 것이다. 

이런 한 줄을 "레코드"라고 한다. 

 

A는 IP Address를 의미하고 NS는 Name Server를 의미하는데 레코드 타입이 NS인 경우 해당 주소를 저장한 Name Server가 무엇인지 알려주는 레코드가 되는 것이다.

 

쉽게 말해

example.com A 11.22.33.44라는 A 레코드는 example.com의 IP가 11.22.33.44라는 것을 의미한다. 

example.com NS a.lana-servers.net이라는 NS 레코드는 example.com이라는 주소를 저장한 네임서버가 a.lana-servers.net이라는 것을 의미한다. 

 

CNAME은 canonical name의 약자로, 그냥 별명이라고 생각하면 된다.

www.example.com CNAME example.com 이렇게 되어 있으면, www.example.com은example.com과 같다는 것을 의미한다. 

 

 

 

nslookup

한 번 실제로 example.com이라는 주소가 어떤 IP Address를 가지는지 DNS Server를 통해 알아보고 싶다면 터미널에 아래와 같은 명령어를 이용하자.

nslookup example.com

실제로 명령어를 입력해보면 다음과 같이 결과가 도출된다. 이는 우리 호스트의 DNS Server에게 example.com의 주소가 무엇인지를 물어보는 명령어이다.

사진과 같이 93.184.216.34라는 결과를 얻게 된다.

 

그 위 Server, Address는 DNS Server의 정보다.

또한, Non-authoritative answer는 위에 작성했다시피 어떤 주소의 실제 IP Address를 알기 위해 꽤나 번잡한 과정을 거쳐 알게 되는데 매번 이렇게 알아내기엔 비효율적이다. 그래서 DNS Server의 시스템도 cache를 사용한다.

그 cache로부터 알아내는 경우 Non-authoritative answer라고 하는것이다.

 

그럼 cache 말고 직접 물어보고 싶을 땐 어떻게 할까? DNS Server에게 물어보겠다고 명시적으로 입력해 주면 된다.

그러나 example.com을 최종적으로 알려주는 DNS Server를 모르기 때문에 먼저 그 server를 알아야 한다.

그 server를 알기 위해 아래와 같이 입력한다.

nslookup -type=ns example.com

-type=ns 옵션을 추가하면 DNS Server의 정보를 위 사진과 같이 알려준다. 

Non-authoritative answer 섹션에 nameserver = b.iana-servers.net. / a.iana-servers.net. 을 확인할 수 있다. 

이제 cache를 사용하는 게 아니라 저 서버를 통해 해당 주소를 직접 알아내보자.

nslookup example.com a.iana-servers.net

결과로부터 Non-authoritative answer 부분이 없어진 것을 확인할 수 있다. 이는 cache를 사용해서 주소의 IP를 알아낸 게 아니라 직접 DNS Server를 통해 알아냈기 때문에 해당 섹션이 사라졌음을 확인할 수 있다.

 

 

728x90
반응형
LIST

'Network' 카테고리의 다른 글

Part 6. Dynamic VS Static IP address  (0) 2023.10.02
Part 5. Port forwarding  (0) 2023.10.02
Part 4. Router  (0) 2023.10.02
Part 2. hosts file  (0) 2023.10.02
Part 1. DNS / DNS Server  (0) 2023.10.02