본문 바로가기
프로그래밍/웹, 네트워크

DNS에 대한 설명(디테일 하게....)

by Hwan2 2021. 3. 29.
728x90
반응형

 

 

 

DNS란 무엇일까요??

 

Domain Name System의 약자로 인터넷 주소창에 Host Domain Name을 입력했을 때(ex, naver.com, google.com 등..)

해당 문자를 IP주소로 변환해 주는 시스템을 말합니다.

 

저는 URL창에 Host Domain Name을 입력했을 때 어떤식으로 해당 IP주소를 받아오는지, DNS서버의 구조는 어떻게 되어있는지, 좀 더 효율적인 방법을 위해 어떤걸 사용하는지 등에 대해 상세히 적어보자 합니다.

 

 

1. 기지국 DNS서버 (Local DNS Server)

저희가 URL에 Domain Name을 입력했을 때 해당 IP를 찾기위해 가장먼저 찾는 DNS서버입니다.

기본적으로 컴퓨터의 LAN선을 통해 인터넷이 연결되면, 인터넷을 사용할 수 있게 IP를 할당해주는 통신사(KT, SK, LG 등...) 에 해당되는 각 통신사의 DNS서버가 등록됩니다. 

 

KT를 사용하는 집이면 KT DNS가 되고, SK통신사 사용하는 집이면 SK DNS가 자동으로 셋팅됩니다.

 

 

각 통신사에 대한 DNS서버의 IP주소입니다.

 

그럼 클라이언트는 해당 DNS서버에 묻죠. 

 

예를들어 "hwan.co.kr"이라는 도메인 주소를 입력했따고 했을 때, 다음과 같이 응답합니다.

 

나 : "hwan.co.kr"이라는 도메인 이름의 IP주소좀 알려줘.

 

찾는 도메인 주소가 있다면....

기지국 DNS서버(Local DNS Server) : 해당 IP주소는 1.1.1.100이야.

 

찾는 도메인 주소가 없다면.....

기지국 DNS서버(Local DNS Server) : Root DNS서버에 물어볼께 기다려봐....

 

이렇게 반응하게 됩니다.

 

 

여기서 도메인 네임에 대한 정보를 갖고 있으면서, 해당 도메인 네임에 해당하는 IP주소를 갖고있는 서버를

Authoritative DNS Server라고 합니다. 즉, 모두 다 알고있는 서버를 말하죠.

 

반면에 두개중에 하나만 알고있는 서버를 Non-Authoritative DNS Server라고 합니다.

 

여기서 의문점이들 수 있는 부분이, "도메인 이름을 알고 있으면 IP주소도 알고 있는거 아니냐??"

라고 생각할 수 있는데, 이는 아래 부분에 대한 설명을 보시면 이해가 될 듯 싶습니다.

 

또 한가지, 방금 제가 클라이언트가 DNS서버에게 IP주소 아냐고 묻는다고 했죠?

이때 물어보는 역할을 하는것이 리졸버(Resolver)라고 하는 녀석이 수행하게 됩니다.

리눅스 기준이로 하면 /etc/resolv.conf 라는 경로를 생각하시면 될 것 같습니다.

 

 

 

2. Root DNS Server

위에서 기지국 DNS에게 저희는 처음 해당 도메인 네임이에 대한 IP주소가 있는지 물어봤습니다. 

 

하지만 기지국 DNS서버에 해당 도메인에 대한 IP주소가 없을때는 해당 DNS서버는 Root DNS서버에게 물어보게 됩니다.

 

Root DNS는 최상위 DNS서버로 해당 DNS부터 시작해서 아래 딸린 node DNS서버에게로 차례차례 물어보게 됩니다.

 

트리구조로 되어 있으며 사진은 아래와 같습니다.

 

 

 

요런식으로 구성되어 있죠.

 

모든 DNS서버들은 이 Root DNS Server의 주소를 기본적으로 갖고 있습니다.

그리고 모르는 Domain name이 온다면 Root DNS에게 물어보게 되죠.

 

하지만 Root DNS Server의 목록에도 해당 Domain Name의 IP가 없을 수 있습니다.

 

그럼 Root DNS Server는 저희 기지국 DNS(Local DNS)에게 없다고 전해주죠......

단, 한가지 정보를 실어서 전달해 줍니다.

 

 

3. 최상위 도메인(Top-Level Domain)

Root DNS Server는 저희 기지국 DNS(Local DNS)서버에게 없다고 알려준다고 했습니다.

그와 동시에 이렇게 말하죠.

 

Root DNS Server : 나한탠 해당 도메인 주소가 없다. 대신 hwan.co.kr의 주소중 .kr의 주소를 알고 있으니,

kr DNS주소에게 물어봐라.

 

그럼 저희 기지국 DNS(Local DNS)서버는 kr DNS 서버에게 다시 물어보게 됩니다.

이하 반복.......

 

다음 설명에 앞서 최상위 도메인에 대해 좀 더 알아보도록 하겠습니다.

 

최상위 도메인은 다음과 같이 나뉩니다.

 

1. 국가 코드 최상위 도메인(Country Code Top-Level Domain, ccTLD)

(ex, .kr, .jp, .CN, .US 등.....)

 

2. 일반 최상위 도메인((generic top-level domain, gTLD)

(ex, .com, .net, .org 등.....)

 

이 두개가 대표적이며, 그 밖에 신규 일반 최상위 도메인, 국제화 일반 최상위 도메인 등 다양한 도메인들이 존재합니다.

참고 : ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%B5%9C%EC%83%81%EC%9C%84_%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%AA%A9%EB%A1%9D#%EA%B5%AD%EC%A0%9C%ED%99%94_%EC%9D%BC%EB%B0%98_%EC%B5%9C%EC%83%81%EC%9C%84_%EB%8F%84%EB%A9%94%EC%9D%B8

 

인터넷 최상위 도메인 목록 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

본론으로 돌아와서. 

 

여기서 저희는 다음과 같은 사실을 알 수 있습니다.

 

 

1. "hwan.co.kr" 이라는 주소는 뜯어보면 

 

 

이런식으로 구성되어 있는걸 알 수 있습니다.

 

2. 재귀적으로 순환을 반복한다.

기지국 DNS(Local DNS)에서 Root DNS Server로 도메인 주소를 물으면,

Root DNS Server에서 다 알아서 찾아 주는것이 아니라,

Root DNS Server 자신에 등록되어 있는 최상위 도메인(TLD)에서 해당 도메인에 붙어있는 TLD 주소를 찾아서

기지국 DNS(Local DNS)에게 준다.

그럼 기지국 DNS(Local DNS)는 Root DNS Server에게 받은 TLD Server에게 다시 물어본다.

이하 찾을때 까지 반복한다.

 

 

 

이런식으로 말이죠.

 

이렇게 받아오는 것을 Recursive Query라 합니다.

 

 

4. DNS Cache

위 과정을 통해 저희 PC는 "hwan.co.kr" 의 IP주소를 성공적으로 받아왔다고 가정해 봅시다.

 

그럼 몇 분 후 다시 "hwan.co.kr"에 방문하려고 했을 때, 또다시 위와 같은 과정을 반복해야하는, 

비 효율적인 과정을 반복해야합니다.

 

그렇게 되면 느리기도 하거니와 DNS서버에 부담을 줄 수밖에 없습니다.

 

때문에, 저희 PC에는 DNS Cache라는 Cache를 활용해 Cache안에 자주쓴는 Domain Name 주소를 저장해 놓습니다.

 

이를 확인하는 방법은 Window 기준 다음과 같습니다.

 

cmd -> ipconfig/displaydns

 

 

이런 Cache정보가 수십개 나오게 됩니다.

 

이 정보를 가지고 저희 PC는 찾는 과정 없이 막바로 IP주소를 찾을 수 있게 됩니다.

 

 

5. 마지막으로....

DNS 설명부분에서 누락된 부분이 좀 있습니다.

예를들면 DNS registrar, DNS Registeregistration, DNS NS Rrecord, DNS Spoofing, DNS over TLS 등....

이런 부분들은 너무 Advanced한 내용이고, 모두 설명하기엔 가독성이 많이 떨어질 것이라 판단했습니다.

 

이 글의 목적은 "대략적으로 이렇게 구성되고 돌아가는구나...." 라고 간단히? 보기 위해 작성했습니다.

때문에 좀 더 깊게 아시고 싶으신 분들은 위의 내용들에 대해 구글링 하시면 될 것 같습니다.!!( >_~)

 

나중에 시간되면 DNS Spoofing과 DNS over TLS 부분은 다뤄볼까 합니다.

(사실 저도 디테일하게 잘 모름 ㅎㅎ....)

 

여담으로....

 

전세계 Root DNS Server의 개수는 원래 13개 였는데, 2020년 이후로 1034개가 되었습니다.

원래 멀티캐스트 방식에서 애니캐스트 방식으로 바꿔 이렇게 늘렸다고 합니다.

Root DNS Server는 여기서 확인 가능합니다.

root-servers.org/

 

Root Server Technical Operations Association

Legend IPv6 Enabled Global IPv4 Only Global IPv6 Enabled Local IPv4 Only Local

root-servers.org

 

DNS 서버 통신은 기본적으로 DNS 프로토콜을 사용하며, 해당 프로토콜은 UDP방식입니다.

또한 Default 포트로 53번 포트를 사용하죠.

(중요한 내용인데.... 너무 뒤에다 놨나 싶습니다.....)

 

 

 

무튼 긴 글 봐주셔서 감사합니다. ( _ _ )

 

 

 

 

 

반응형

댓글


스킨편집 -> html 편집에서