CS

[네트워크] DNS란?

Cat* mozza 2022. 9. 27. 04:01

이번에 네트워크 수업을 들을 수 있었으면 더 좋았겠지만, 언젠간 공부하게 될테니 미리 하나 알아가는 느낌으로 DNS에 대해 좀 알아보기로 했다.

 

"What is DNS?"

IP 주소 = Internet Protocol Address

IP는 Internet Protocol의 줄인말로, 네트워크에서 정보를 주고받는 통신에 대한 규약이다. 우리가 흔하게 IP라고 하는 것이 규약을 뜻하는 것은 아닐테니 정확한 용어로 IP주소라고 해야한다. IP 주소는 IP 통신에 필요한 고유 주소를 말하며, 중복되지 않아야 한다.

쉽게 말하자면, 전화에 비유할 수 있을 것 같다. 전화를 하기 위해 두가지가 전제된다고 생각하면 되는데, 먼저 받는 대상의 전화번호가 먼저 있다. 이를 통해 다른 사람에게 접근할 수 있는 것이다. 그리고 두번째로 이 전화번호는 대상에게 유일하게 부여된 번호이다. 다른사람과 똑같은 번호를 가질 수는 없다. IP 주소도 마찬가지라고 생각하면 된다.

 

DNS = Domain Name System

그렇다면, DNS는 무엇일까? 앞에서 살펴본 IP 주소의 단점에서부터 시작해야 한다. 만약에 우리가 한 네트워크에 접속을 해야한다 했을 때 10자리가 넘는 숫자를 외워가며 접속을 해야하고, 숫자가 하나 틀릴 때마다 잘못 접속을 하게 되어 IP 주소를 다시 확인해야한다면 매우 불편할 것이다. 따라서 이를 해결하기 위해 해당 호스트나 도메인의 IP 정보를 저장하여 도메인 이름을 통해 사용자가 IP주소에 접근할 수 있게 하고 그 반대 또한 가능하게 제공하는 시스템을 DNS라고 한다. 즉, IP 주소들을 도메인 이름으로 저장한 전화번호부라고 생각할 수 있다. 네이버의 IP 주소는 숫자로 이루어져 있겠지만, 도메인은 naver.com이 되는 것이다.

 

DNS Server

DNS 서버가 한가지만 존재한다면 간단하겠지만 도메인의 숫자가 너무 많아지고 하나의 DNS 서버에 모든 정보를 저장하기에는 효율이 나오지 않아 계층화해서 순차적으로 서버를 내려가며 도메인을 처리한다.

 

도메인 서버는 크게 4가지로 구분할 수 있다.

1) Recursive DNS Server (= Local DNS Server = DNS recursive resolver)

- 사용자가 가장 먼저 접근하게 되는 DNS 서버

- 도메인과 IP 주소의 관계를 직접적으로 기록/저장/변경 하지는 않으나 일정기간(TTL(time to live))동안 캐시의 형태로 저장해둠 (= 네임 스페이스 권한이 없는 서버(나머지 서버들은 다 권한이 있는 서버임))

- 만약 리커서 캐시에 도메인이 저장되어 있으면 굳이 root를 찾아가지 않아도 되게 함.

(캐시는 자주 사용하는 데이터나 값을 임시 저장해두는 저장소로 빠른 성능을 제공한다)

- ex) 대표적으로 KT/LG/SK와 같은 ISP(통신사) DNS, 브라우저 우회 용도로 많이 쓰는 구글 DNS, 클라우드플레어와 같은 Public DNS 서버

 

2) Root DNS Server

- ICANN이 직접 관리하는 가장 상위 계층의 서버

- TLD DNS 서버 IP들을 저장해두고 안내하는 역할을 함.

 

3) TLD(Top Level Domain) DNS Server

- TLD는 .com .org .kr과 같은 부분을 뜻함(.(dot)이 계층의 증거)

- 도메인 등록 기관이 관리하는 서버

- Authoritative DNS 서버 주소를 저장해두고 안내하는 역할을 함.

 

4) Authoritative DNS Server (= Name Server = DNS Server = Second Level Domain Server)

- 실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버

 

사진 출처 https://gentlysallim.com/dns%EB%9E%80-%EB%AD%90%EA%B3%A0-%EB%84%A4%EC%9E%84%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AD%94%EC%A7%80-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/#

결국은 (캐시가 없다면) 상위 서버부터 순차적으로 서버를 돌며 IP주소를 찾는 것이다. (Iterated Query 기준)

1. 브라우저에 도메인을 검색

2. Local DNS 서버에 캐시가 없다는 것을 확인한 후

3. Local DNS 서버에서 Root 서버에게 어디로 가야하는지 알려달라고 요청을 함

4. 루트 서버에서 TLD를 보고 TLD DNS 서버를 안내해주고

5. Local DNS 서버에서 특정 TLD 서버에게 다시 요청을 하고

6. TLD 서버는 네임서버가 있는 것을 확인한 후에 네임서버를 안내함

7. Local DNS 서버는 네임서버에게 요청을 하고 네임서버는 IP 주소를 반환

8. Local DNS 서버는 이를 캐시로 저장하면서 브라우저에게 IP주소를 안내하고

9. 브라우저는 호스팅 서버에 웹사이트를 출력하라고 요청하는 것이다.

 

참고자료

-https://gentlysallim.com/dns%EB%9E%80-%EB%AD%90%EA%B3%A0-%EB%84%A4%EC%9E%84%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AD%94%EC%A7%80-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/

-https://hanamon.kr/dns%eb%9e%80-%eb%8f%84%eb%a9%94%ec%9d%b8-%eb%84%a4%ec%9e%84-%ec%8b%9c%ec%8a%a4%ed%85%9c-%ea%b0%9c%eb%85%90%eb%b6%80%ed%84%b0-%ec%9e%91%eb%8f%99-%eb%b0%a9%ec%8b%9d%ea%b9%8c%ec%a7%80/