-> 블로그 이전

[Network] 애플리케이션 계층 : DNS

2022. 2. 11. 20:48Major`/컴퓨터 네트워크

DNS (Domain Name System)

- 호스트 네임(도메인 네임)을 IP주소로 변환해주거나 IP주소를 호스트네임으로 변환해주는 서비스

- DNS 서버들은 계층구조로 구현된 분산 데이터베이스이다

 


DNS 서비스

(1) 호스트 네임을 IP 주소로 변환

- user가 url창에 호스트 네임을 치면 DNS가 해당 호스트 네임을 IP주소로 변환해준다

  • www.yahoo.com → 202.165.107.50 
  • www.google.com → 142.250.196.132 

 

(2) 호스트 에일리어싱 (Host Aliasing)

- 어떤 사이트의 정식 호스트 네임은 굉장히 복잡하다

  • 그렇기 때문에 외부에는 복잡한 호스트 네임대신 간단한 호스트 네임 :: 별칭을 알려준다

- 호스트 에일리어싱 : user가 입력한 호스트 네임(별칭)을 정식 호스트 네임으로 변환해준다

  • enterprise.com → relay1.west-coast.enterprise.com 
  • www.naver.com → www.naver.com.nheos.com 

 

(3) 메일 서버 에일리어싱 (Mail Server Aliasing)

- (2)와 동일한 방식으로 DNS가 변환해준다

 

(4) 부하 분산 (Load Distribution)

- Request가 많은 웹 서버의 경우 해당 서버를 부하 분산 시킨다

- 여러 IP주소를 정식 호스트네임과 연관되도록 설정할 수 있다

- 동일하게 naver.com 접속해도

  • Request 1은 223.130.200.104로 접속이 되고
  • Request 2는 223.130.200.107로 접속이 되고
  • Request 3은 223.130.195.95로 접속이 된다

>> 이와 같이 user의 DNS 질의에 대해 여러 서버로 분산되어서 접속을 허용한다

 


 

DNS - 분산 계층 DB

- 각 계층은 본인보다 하위 계층의 정보들을 알고있다

 

루트 DNS 서버

- 로컬 DNS 서버에서 user가 질의한 도메인 네임을 모를경우, 루트 DNS 서버에 접촉한다

>> 특정 도메인의 1단계 도메인(TLD)가 무엇인지 알고 있다

 

1단계 DNS 서버 (TLD : Top Level Domain)

- 국가 최상위 도메인(.kr / .jp / .fr / .cn / ...), 일반 최상위 도메인(.com / .net / .org / ...)로 나뉜다

  • 국가 최상위 도메인 :: kr = 한국, jp = 일본, fr = 프랑스,...
  • 일반 최상위 도메인 :: com = 기업, 네트워크 관련 제공자 = net, 기관 or 단체 = org,...

>> 특정 도메인의 2단게 도메인이 무엇인지 알고 있다

  •  

책임 DNS 서버 (Authoritative DNS Server) -- 2단계 + 3단계

- 기관(회사/대학) or 서비스 제공자가 관리한다

- 서버의 호스트 네임과 서버의 IP 주소의Mapping 정보를 보유하고 있다

  • www.google.com ↔ 142.250.196.132 
  • www.naver.com ↔ 223.130.200.104

 


 

로컬 DNS 서버 (디폴트 네임 서버 or 프록시 네임 서버)

- 로컬 네임 서버는 DNS 계층에 속하지 않는다

- 각 ISP(가정 ISP, 회사, 대학)은 각각 로컬 DNS 서버를 가진다

 

host가 DNS 질의를 하면 해당 질의는 로컬 DNS 서버로 전송된다

- 로컬 DNS 서버에 해당 호스트네임에 대한 IP 주소 보유

  • 바로 해당 IP 주소를 host에게 전달해준다

- 로컬 DNS 서버에 해당 호스트네임에 대한 IP 주소 보유 X

  • 즉시 루트 DNS 서버에 해당 호스트 네임에 대한 질의를 전달한다

 

반복적 질의 (Iterative Query)

- 로컬 DNS 서버가 질의에 대한 IP주소를 보유하고 있지 않다고 가정

- User host는 www.google.com로 접속

 

(1)

  • Host → 로컬 DNS 서버 : "www.google.com"의 IP 주소를 물어본다

(2)

  • 로컬 DNS 서버 → 루트 DNS 서버 : "www.google.com"의 IP 주소를 물어본다

(3)

  • 루트 DNS 서버 → 로컬 DNS 서버 : "www.google.com"의 '.com'을 관리하는 서버의 주소를 알려준다
    • 왜냐하면 루트 DNS 서버는 TLD DNS 서버에 관련한 내용만 알고 있다

(4)

  • 로컬 DNS 서버 → TLD DNS 서버 : "www.google.com"의 IP 주소를 물어본다

(5)

  • TLD DNS 서버  로컬 DNS 서버 : "www.google.com"의 'google.com'을 관리하는 서버의 주소를 알려준다
    • TLD DNS 서버는 책임 DNS 서버에 관련한 내용만 알고 있다

(6)

  • 로컬 DNS 서버 → 책임 DNS 서버 : "www.google.com"의 IP 주소를 물어본다

(7)

  • 책임 DNS 서버 → 로컬 DNS 서버 : "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132 

(8)

  • 로컬 DNS 서버 → Host : "www.google.com"의 IP 주소인 '142.250.196.132'를 응답해준다

(9)

  • Host → 웹 서버 : 웹 브라우저가 IP주소로 접속해서 서비스를 Request

(10)

  • 웹 서버 → Host : 웹 페이지를 응답해준다

 

재귀적 질의 (Recursive Query)

- 로컬 DNS 서버가 질의에 대한 IP주소를 보유하고 있지 않다고 가정

- User host는 www.google.com로 접속

(1)

  • Host → 로컬 DNS 서버 : "www.google.com"의 IP 주소를 물어본다

(2)

  • 로컬 DNS 서버 → 루트 DNS 서버 : "www.google.com"의 IP 주소를 물어본다

(3)

  • 루트 DNS 서버 → TLD DNS 서버 : 직접 TLD DNS 서버에게 "www.google.com"의 IP 주소를 물어본다

(4)

  • TLD DNS 서버 → 책임 DNS 서버 : 직접 책임 DNS 서버에게 "www.google.com"의 IP 주소를 물어본다

(5)

  • 책임 DNS 서버 → TLD DNS 서버 : TLD DNS 서버에게 "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132 

(6)

  • TLD DNS 서버 → 루트 DNS 서버 : 루트 DNS 서버에게 "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132

(7)

  • 루트 DNS 서버 → 로컬 DNS 서버 : 로컬 DNS 서버에게 "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132

(8)

  • 로컬 DNS 서버 → Host : "www.google.com"의 IP 주소인 '142.250.196.132'를 응답해준다

(9)

  • Host → 웹 서버 : 웹 브라우저가 IP주소로 접속해서 서비스를 Request

(10)

  • 웹 서버 → Host : 웹 페이지를 응답해준다

DNS 캐싱 (DNS caching)

- query에 대한 response를 받으면(IP 주소) 해당 IP 주소를 본인이 잠시 저장한다

  • 이 캐싱된 정보는 일정시간(TTL)이 지나면 소멸된다

- 일반적으로 로컬 DNS 서버가 TLD DNS Server를 캐싱한다


DNS 레코드

- DNS는 자원 레코드(RR)를 저장하는 분산 DB이다

RR 형식 : (name, value, type, TTL)
  • TTL : RR 레코드의 유효 시간 :: DNS 서버의 캐시에 해당 데이터가 얼마나 오랫동안 저장될 것인가
  • type에 따라 value가 다르다

 

Type = A

- name : 호스트 네임 (도메인 네임)

- value : IP 주소 (IPv4)

  • RR : (google.com, 216.58.220.142, A, 55) 

>> 주어진 호스트에 대한 IP 주소(IPv4)를 알려준다

 

Type = AAAA

- name : 호스트 네임 (도메인 네임)

-value : IP 주소 (IPv6)

  • RR : (google.com, 2404:6800:4004:824::200e, AAAA, 60)

>> 주어진 호스트에 대한 IP 주소(IPv6)를 알려준다

 

Type = CNAME

- name : 별칭 호스트 네임 (Alias)

- value : 정식 호스트 네임 (Canonical)

  • RR : (enterprise.com, relay1.west-coast.enterprise.com, CNAME, 55) 
  • RR : (www.ibm.com, www.ibm.com.cs186.net, CNAME, 55)

 

Type = NS

- name : 호스트 네임 (도메인 네임)

- value : 해당 도메인을 관리하는 네임 서버

  • RR : (naver.com, e-ns.naver.com, NS, 180)
  • RR : (naver.com, ns1.naver.com, NS, 180)
  • RR : (naver.com, ns2.naver.com, NS, 180)

 

Type = MX

- name : 별칭 호스트 네임 (Alias)

- value : 해당 호스트 네임에 대한 메일 교환 서버

  • RR : (naver.com, mx1.naver.com, MX, 180)
  • RR : (naver.com, mx2.naver.com, MX, 180)
  • RR : (naver.com, mx3.naver.com, MX, 180)

>> 일반적으로 DNS 도메인에 대해 2개 이상의 메일 교환 서버가 존재 :: 각 도메인에 우선 순위가 설정


 

DNS 헤더

▶ Identifier (식별자 :: Transaction ID)

- Query 메시지와 Response 메시지 한 쌍을 의미하는 번호 / DNS 메시지를 구별하는 식별자이다

  • Query Message에서 Transaction ID를 포함시켜서 보내면
  • Response Message에서는 해당 Trasaction Id를 그대로 포함시켜서 Response 한다
    • 해당 Query에 대한 Response임을 표시해준다

 

▶ Flags

QR

- 메시지의 종류 (Query or Response)

  • 0 : Query
  • 1 : Response

 

opcode

- Query/Response 종류

  • 0 : 표준 조회
  • 1 : 역조회
  • 2 : 서버 상태 요청

 

AA

- 응답하는 서버가 네임 서버임을 의미

  • Response Message에서 사용된다

 

TC

- 응답의 크기가 UDP 최대 크기인 512byte를 초과해서 512byte로 잘렸음을 나타낸다 (Fragmentation)

 

RD

- Query에 대한 Response 결과를 얻을 때까지 DNS 서버가 반복적 질의를 수행하도록 요청

  • Query Message에서 사용된다

 

RA

- 해당 DNS서버가 반복적 질의 요청을 수행할 수 있음을 의미

  • Response Message에서 사용된다

 

Z(zero)

- 예약 필드로 000으로 지정된다

 

rcode

- Return Code

  • 0 : 에러 없음
  • 1 : 양식 오류
  • 2 : 서버 실패
  • 3 : 이름 에러
  • 4 : 구현되지 않음
  • 5 : 거절
  • 6 ~ 15 : 추후 사용

 

▶ Number of Question Records

- Query Message에 포함된 Query의 개수

 

▶ Number of Answer Records

- Response Message에 포함된 Response의 개수

 

▶ Number of Authoritative Records

- Response Message에 포함된 네임 서버의 개수

 

▶ Number of Additional Records

- Response Message에 포함된 추가적인 정보의 개수

  • IP 주소 / ....

 


DNS 데이터 (Query & Response)

▶ Query Name

- Query/Response Message에서 사용되고, Query/Response에 대한 도메인 네임을 의미

 

▶ Type

- 도메인 레코드의 Type

 

▶ Class

- 프로토콜 패밀리

  • 인터넷의 경우 : IN(1)을 사용한다

 

▶ TTL (Time to Live)

- DNS 서버의 캐시에 해당 Data가 얼마나 오랫동안 저장될 것인지를 나타내는 시각 [초]

 

▶ Resource Data Length / Resource Data

- 각각 RR 데이터의 길이와 레코드와 관련된 Data 존재

Query Message
Response Message