진짜 개발자
본문 바로가기

CS(Computer Science)/Network

Network - Application 계층) DNS 프로토콜

728x90

DNSDNS란 도메인을 IP로 변환하거나 IP를 도메인으로 다시 변경해주는 것을 말한다

          DNS가 없다면 우리가 외우고 있는 naver.com 등은 소용이 없고

          naver.com IP를 외우고 다녔어야 한다.

           - DNS 메시지를 전달하기 위해 하위 트랜스포트 계층의 프로토콜을 이용하므로

 어플리케이션 계층 프로토콜이다.


    역할

1) 호스트 별칭

- 복잡한 호스트네임을 가진 호스트는 하나 이상의 별명을 가질 수 있다 예를들어, relay1.west-coast.enterprise.com 이라는

 호스트는 enterprise.com과 www.enterprise.com 같은 2개의 별칭을 가질 수 있다.


2) 메일서버 별칭 


3) 부하 분산

- 같은 Domain에 대해서 여러 IP 지정이 가능하다 따라서 같은 도메인에 대하여 사용자가 질의를 할 경우

  DNS서버는 IP를 회전시켜가며(번갈아가며) 알려준다 


특징

- HTTP , FTP , SMTP 등과 달리 사용자가 직접 요청하는 프로토콜이 아니다.

  예를 들어 사용자가 브라우저에서 naver.com을 검색하는 경우 브라우저가 

   DNS서버에게 naver.com를 IP로 변경해달라고 요청한다.


    PORT

  - UDP/53 = 평소에 사용

    - TCP/53 = 딱 두가지 경우에만 TCP 사용

                    1) 전송 데이터가 512Byte 이상일때

                    2) Zone transfer (존 영역을 전송하는 경우)


    구조

1) ROOT DNS 서버

2) 최상위 도메인 DNS 서버

3) 책임 DNS 서버


    동작과정 - naver.com 를 찾는다고 가정

1) DNS Client(웹 브라우저등) 로컬 DNS에게 www.naver.com을 질의한다

2) 로컬 DNSRoot DNS에게 www.naver.com을 묻는다

3) Root DNScom을 인식하고 com을 관리하는 최상위 도메인 DNS 서버의 IP로컬 DNS에게 알려준다

4) 다시 로컬 DNScom도메인을 관리하는 최상위 도메인 DNS서버에게 www.naver.com을 질의한다

5) 최상위 도메인 DNS서버naver.com을 인식하고 naver.com을 관리하는 

    책임DNS 서버의 IP를 로컬 DNS에게 알려준다

6) 로컬 DNS책임 DNS서버에게 www.naver.com을 질의하고 

7) 책임 DNS서버에서 www.naver.com 호스트에 대한 IP를 알려준다

8) 로컬 DNSDNS Client에게 www.naver.comIP를 알려준다


    DNS 캐싱

- 위 그림에서 Local DNS는 질의에 대해서 DNS Server로 부터 응답을 받을 때마다 

  DNS정보(호스트네임과 IP주소쌍)를 저장한다

  이때 다시 클라이언트로부터 같은 질의가 Local DNS에게 도착한다면 해당 도메인에 대한 책임이 없더라도

        해당 호스트네임에 대한 IP를 응답한다  


    SERIAL NUMBER

dns영역 파일에 레코드를 추가하거나 삭제를하면 serial number가 증가하게된다

master dns,  salve dns가 있을때 이 serial number를 확인하고 자신보다 높은 숫자라면 최신정보로 인지하여 

해당 dns로부터 레코드들을 받아온다


    명령어

1. 캐시 삭제 - ipconfig /flushdns

2. 캐시 확인 - ipconfig /displaydns

3. DNS레코드를 도메인 네임 시스템에 질의 nslookup

set type=all

naver.com


레코드와 메시지

- 각 DNS서버들은 호스트네임을 IP주소로 매핑하기 위한 자원 레코드를 저장한다

- DNS는 요청에 대해 하나 이상의 레코드를 가진 메시지로 응답한다


자원레코드 구조 - Name, Value, Type, TTL

1) Type = A : Name은 HostName, 

  Value는 호스트 네임에대한 IP주소

ex) naver.com, 145.34.1.2, A

=> DNS서버가 어떤 호스트 네임에 대한 책임 DNS서버이면 그 호스트네임에 대한 Type A 레코드를 포함한다


2) Type = NS : Name은 도메인, 

    Value는 도메인 내부의 호스트에 대한 IP를 얻을 수 있는 방법을 아는 책임 DNS 서버의 호스트 네임

ex) naver.com, dns.naver.com, NS

=> 서버가 호스트네임에 대한 책임서버가 아니라면 그서버는 호스트 네임을 포함하는 도메인에 대한 Type NS레코드를 포함


     *예를 들어 naver.com 도메인 내부의 호스트에 대한 IP를 아는 책임 DNS 서버를 알고있는 서버의 경우

다음의 두 레코드를 포함한다

1) naver.com, dns.naver.com, NS  

=> naver.com의 하위 도메인들은 모르므로 하위 도메인을 관리하는 책임 서버를 안다 따라서 NS

2) dns.naver.com, 145.34.1.2, A    

=> naver.com의 하위 도메인들을 관리하는 서버의 IP는 알고있으므로 A


3) Type = CNAME : Name은 별칭 HostName

    Value는 정식 HostName

ex) naver.com, relay1.bar.naver.com, CNAME


4) Type = MX : Name은 별칭 HostName,

    Value는 정식 메일서버 네임

ex) naver.com, mail.naver.com, MX



도메인 등록 과정

https://galid1.tistory.com/422