오래 못 할 짓 하지 않기

[ 네트워크 ] 7. Application layer : DNS 본문

3학년 2학기/네트워크 (Network)

[ 네트워크 ] 7. Application layer : DNS

쫑알bot 2024. 9. 19. 15:59
728x90

DNS
Domain Name System

사람을 식별하기 위해서는

 

- 주민등록번호

- 이름

- 기타 등등

이 필요하다.

 

 

그렇다면 인터넷을 통해 Host와 Router를 식별하기 위해서는 어떻게 해야할까?

 

➡️ IP 주소 / Port num / Name 등등이 필요하다.

 

이를 위해 우리는 DNS 라는 시스템을 이용한다.

 

📌 특징

1. 서버들의 계층구조로 구현된 분산 데이터 베이스

2. DB ↔️ 호스트 간 소통할 수 있는 Application Protocol 

 

- 분산하는 이유

1 ) Single point of Failure

= 중앙 DNS가 터지면 아무것도 안 됨

 

2) Traffic volume

3) Distance Centralized database

4) 유지/보수

 

📌 작동 방식

- 한 유저가 www.abc.edu로  들어가려고 한다.

 

1. DNS application 을 통해 DNS 클라이언트로 호출

2. Browser 가 Hostname (www.abc.edu)을 가져오고 DNS 서버에 보낸다.

3. DNS 서버에서 Hostname 관련 쿼리를 받는다.

4. 해당 Hostname에 대한 IP 주소가 있으면 그에 응답한다.

 

 


DNS 분산/구조

 

 

 

주소가 날라오면 Root DNS 서버에 가장 먼저 요청 ➡️ 그와 관련된 집합 A를 받는다.

> A에서 내가 찾으려고 하는 주소 TLD(Top Level Domain ) 를 요청 ➡️ 그와 관련된 B를 받는다.

> ... B에서 내가 찾으려고 하는 주소를 찾는다. ➡️ 존재한다면 해당 주소를 Client가 응답으로 받는다.

 

 

* root DNS 도메인은  ICANN  이라는 곳에서 관리한다.

 

 


 

TLD는 다음과 같이 General 로 있는 gTLD가 있고

국가를 식별해주는 ccTLD가 있다.

 

 

책임 서버

: 기관은 자신들의 DNS를 갖고있고, 이 기관은 Hostname -> IP를 매핑하는 DNS record를 제공한다.

 


 

DNS resolution

 

📌 Iterated query

ex) engineering.nyu.edu에서 gaia.cs.umass.edu로 요청

 

1. [ Local DNS Server ] 에 자신이 변환하려고 하는 HostName을 담아 Request

2. Local DNS Server ➡️ root DNS 서버에 전달.

3. root DNS 서버에서 .edu 받고 그에 대한 TLD 서버 주소 목록으로 응답 ➡️ Local DNS Server

4. (.edu를 받은) TLD 서버에 nyu.edu로 Request

5. TLD 서버에서 nyu.edu 를 받고, 그에 대한 Authoritative DNS 서버 주소로 응답 ➡️ Local DNS Server

6. Local DNS Server는 방금 받은 Authoritative DNS 서버로 Request

7. 최종 gaia.cs.umass.edu 의 IP 주소 응답

8. 해당 IP로 접속

 

- root , TLD , Authoritative Server끼리는 서로 Interaction 이 없고, Local DNS랑만 연결되어있다.

 

*엄밀히 따지면 5번에서는 책임 DNS서버가 아니라

  책임서버와 TLD 서버 사이에 회사에서 만든 서버와 요청을 한 번씩 주고 받는다.

 

 

 

https://min-h-study-review.tistory.com/388

 

📌 Recursive query

 

- 여기에선 높은 계층 (= root DNS server)가 책임져야 하는 것들이 많다.

 

- root같이 중요한 정보를 담고있는 Server를 지키는 게 중요하기 때문에, Local DNS server가 움직이는 게 더 낫다.

 

 

예제)

 

 

답 ⬇️

 


DNS Caching

실제로는 위와 같이 DNS server에서 소통하는 과정을 줄이기 위해 Caching 을 사용한다.

따라서, Cache에 저장된 Hostname이라면, 로컬 DNS Server가 책임이 없는 Hostname이어도 주소를 제공할 수 있다.

 

- 하지만 Cache entries는 TTL (time to live)이 지나면 사라진다.

- TLD server들은 주로 Local DNS에 저장된다. ( 따라서, root name server는 거의 방문 안 함 )


 

DNS Record 

: DNS는 Resource record를 저장하고 있는 분산형 DB이다.

 

Resource Record의 Format은 다음과 같다.

 

RR은 4가지 타입이 있고, 각 타입별로 Name, Value에 들어가는 값이 다르다. ( ttl은 모두 같음 )

 

📌Type A : ( { hostname } , { IP addr } , A , { ttl } )

- Name = hostname

- Value = IP address

 

 

📌Type NS : ( { domain } , { hostname  } , NS , { ttl } )

- Name = domain

- Value = 해당 Domain에 대한 IP주소를 얻을 수 있는 hostname ( 아마 책임DNS 주소인 듯)

 

 

📌Type CNAME : ( { Alias name for canonical name } , { Alias name } , CNAME , { ttl } )

- Name = host의 별명 ( Alias name for canonical hostname )

- Value = 별명에 대한 정식 호스트 이름 ( Canonical name )

 

 

📌Type MX : ( { Mailserver Name } , A , { ttl } )

 

- Value = {value} 이름을 갖는 메일 서버의 정식 이름

 


DNS Protocol Message



Message의 헤더는 다음과 같다.

 

- ID : 16bit로 몇 개의 쿼리가 오는지 나타낸다.

 

- Flag

: 1) 해당 메시지가 쿼리(요청)인지 응답인지

  2) Recursion Request를 해야하는지

  3) Recursion Request가 가능한지

  4) 책임 서버로서 IP를 담아서 보내주는지

 

 

그 아래 4개의 필드에서는

 

질문, 답변

책임 ,추가

 

에 대한 개수를 나타낸다  

 

 

 

 

(출처)

한동대학교 고윤민교수님 - 네트워크