Search
Duplicate

[Network] DNS

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
CS Interview
Scrap
태그
9 more properties

1. DNS (Domain Name Service) 란?

사람이 알아볼 수 있는 문자로 만들어진 도메인을 컴퓨터가 처리할 수 있는 IP주소로 변환해주는 시스템.
인터넷 호스트에 대한 하나의 식별자를 host name 이라고 합니다. (예시 → www.naver.com )
사람의 입장에서는 숫자보다 문자를 사용하는 것이 더 편하기 때문에 Domain Name을 이용하여 Host들을 식별합니다.
하지만 컴퓨터가 명령을 처리를 하기 위해서는 IP주소를 알고 있어야 상대방 장비와의 연결이 가능하기 때문에
DNS 를 사용하여 사용자가 입력한 호스트명을 해당하는 IP주소로 변환합니다.
www.google.co.kr.을 친다고 해봅시다. 그렇다면 첫번째로 수행되는 DNS는 로컬 DNS 서버입니다.
로컬 DNS 서버은 캐시처럼 자주 사용하는 도메인에 대한 IP주소를 준비해놓고 있다가 사용자가 해당 도메인을 검색한다면
루트, 최상위 도메인,, 등 에게 질의를 할 필요없이 바로 제공해 줄 수 있습니다.
※ 로컬 DNS IP 주소를 확인하는 방법 : 명령 프롬프트 창 > ipconfig -all
과거에는 컴퓨터마다 host.txt. 파일을 가지고 있어 모든 컴퓨터의 host nameIP 주소가 저장되어 있었습니다.
Client는 FTP를 이용해 접근해서 hosts 파일을 다운로드 및 적용하였습니다.
90년대 초반 Web 서비스 사용자가 폭발적으로 증가하면서 Internet에 연결된 Host 숫자가 크게 늘어났고
네트워크 트레픽이 증가하고 호스트 이름을 짓기가 어려워지는 문제가 발생하여 현재는 분산 데이터베이스를 이용합니다.
도메인이 워낙 많기 때문에 전 세계 모든 조직의 도메인정보를 갖고 있는 DNS 서버는 존재하지 않습니다.
각 조직은 자신들의 도메인 정보를 관리하는 DNS서버를 자체적으로 운영하고,이러한 수 많은 도메인의 DNS 서버들이 상호 연동되어 있는  Domain Name Space를 구성하게 됩니다.

2. DNS의 질의방법

• 반복적 질의

1) 로컬 DNS에게 요청 (해당 도메인의 IP주소를 알고 있는지)
2) 로컬이 해당 정보를 가지고 있지 않다면 루트 DNS 서버에게 요청 → 최상위 DNS 서버(TLD)는 알고 있을 거라고 알려준다
3) 로컬 DNS는 다시 최상위 DNS 서버에게 질의함 알고 있냐고. → 책임 DNS 서버는 알고 있을 꺼라고 알려준다
4) 로컬 DNS는 책임 DNS 서버에게 알고 있냐고 물어봄 -> 해당 IP 주소를 알려준다
5) 로컬 DNS는 받아온 정보를 사용자에게 최종적으로 알려준다
6) 자신의 DNS 레코드에 저장 하여 나중에 나중에 똑같은 요청이 들어오면 신속한 처리를 하도록 한다

• 재귀적 질의

1) 로컬 DNS에게 요청
2) 로컬이 해당 정보를 가지고 있지 않다면 루트 DNS 서버에게 요청
3) 루트 DNS 서버는 모르기 때문에 최상위 DNS 서버에게 요청
4) 최상위 DNS 서버도 모르기 때문에 책임 DNS 서버에게 요청 → 해당 IP 주소를 알려준다
5) 해당 IP주소를 최상위 DNS → 루트 DNS → 로컬 DNS에게 전달
6) 로컬 DNS는 받아온 정보를 사용자에게 최종적으로 알려준다
7) 자신의 DNS 레코드에 저장 하여 나중에 나중에 똑같은 요청이 들어오면 신속한 처리를 하도록 한다
※ 어플리케이션 계층의 정보중에 Recursion desired 가 1로 되어 있으면 재귀적 질의, 0으로 되어있으면 재귀적 질의를 사용하는 것이다.

3. DNS의 구성 요소

1) 도메인 네임 스페이스 (Domain Name Space)

DNS가 저장,관리하는 계층적 구조
최상위에 루트 DNS 서버가 존재하고, 그 하위로 인터넷에 연결된 모든 노드가 연속해서 이어진계층 구조로 구성되어 있다.
각 레벨의 도메인은 그 하위 도메인에 관한 정보를 관리하는 계층적 구조이다.

2) 네임 서버 (Name Server)

도메인 네임 스페이스의 트리 구조에 대한 정보를 가지고 있는 서버
문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 숫자로 표현된 IP 주소로 변환시켜 주기 위해서는 도메인 네임 스페이스의 트리 구조에 대한 정보가 필요하다.
이러한 정보를 가지고 있는 서버를 네임 서버라고 하고, 도메인 이름을 IP 주소로 변환하는 것을 네임 서비스라고 한다.
리졸버(Resolver)로부터 요청 받은 도메인 이름에 대한 IP 정보를 다시 리졸버로 전달해주는 역할을 수행한다.
Primary Name Server:  해당 도메인을 관리하는 주 네임 서버이다.
Secondary Name Server:  primary 네임 서버의 고장 등의 이유로 동작하지 못하는 경우 이를 대신하여 네임 서버 역할을 수행하는 서버이고 
주기적으로 Primary 네임 서버로부터 정보를 받아와 자신의 정보를 갱신하여 전체 네임 서버의 정보가 일관성 있게 유지 및 관리된다.

3) 리졸버 (Resolver)

클라이언트의 요청을 네임 서버로 전달 / 네임 서버로부터 받은 정보를 클라이언트에게 제공
웹 브라우저와 같은 DNS 클라이언트의 요청을 네임 서버로 전달하고 네임 서버로부터 정보(도메인 이름과 IP 주소)를 받아 클라이언트에게 제공하는 기능을 수행한다.
하나의 네임 서버에게 DNS 요청을 전달하고 해당 서버에 정보가 없으면 다른 네임 서버에게 요청을 보내 정보를 받아 온다.
수많은 네임 서버에 접근하여 사용자로부터 요청 받은 도메인의 IP 정보를 조회하는 기능을 수행할 수 있어야 한다.

4) 스터브 리졸버(Stub Resolver)

리졸버의 단순한 기능만을 지닌 리졸버 루틴을 구현한 것
리졸버의 모든 기능을 PC와 같은 클라이언트 호스트에 구현하는 것은 단말 시스템 자원의 한계에 제약이 있다.
리졸버의 대부분의 기능을 DNS 서버에 구현하고, 클라이언트 호스트에는 리졸버의 단순한 기능만을 지닌 리졸버 루틴을 구현한것이다.
스터브 리졸버는 수 많은 네임 서버의 구조를 파악할 필요 없이 리졸버가 구현된 네임 서버의 IP 주소만 파악하면 된다.
도메인에 대한 질의를 받은 스터브 리졸버는 설정된 네임 서버로 DNS 질의를 전달하고 네임 서버로부터 최종 결과를 응답 받아 웹 브라우저로 전달하는 인터페이스 기능만을 수행한다.