DNS(Domain Name System)

 

네이밍은 분산 시스템에서 사용자와 시스템 간의 인터페이스 역할을 하며, 이름을 통해 복잡한 리소스 관리 문제를 단순화하고, 유연성과 가독성을 제공하는 핵심 기술이다.

 

분산 시스템에서는 파일, 호스트, 서비스와 같은 리소스에 접근하기 위해 식별자(identifier)나 참조(reference)가 필요한데,

 

네임 서비스는 이러한 이름을 실제 식별자나 주소로 변환(Resolve)하는 역할을 수행한다.

 

 

이름을 통해 리소스와 물리적 위치(주소) 간의 바인딩을 유연하게 변경하는 방식으로

사용자가 입력한 이름을 시스템이 이해하는 식별자나 주소로 변환하여, 복잡한 분산 환경에서도 효율적이고 편리한 리소스 접근을 지원한다. 

(ex. DNS는 도메인 이름을 IP 주소로 변환.)

 

 

 

 

 

이것은 URL 요청 과정에서 DNS가 작동하는 과정이다.

 

위와 같은 이미지에서 URL로부터 리소스를 접근하는 과정 (Composed naming domains)은 다음과 같다.

 

  1. 사용자가 웹 브라우저에서 http://www.cdk3.net:8888/WebExamples/earth.html 같은 URL에 접근하면,
    먼저 도메인 네임(www.cdk3.net)을 IP 주소로 해석하기 위해 DNS 서버에게 질의(DNS lookup)한다.
  2. DNS 응답으로 138.37.88.61(IP 주소)를 획득하고, URL에 포함된 포트 번호(8888) 및 경로(WebExamples/earth.html)를 통해 해당 서버가 제공하는 웹 리소스(파일)에 접근할 수 있다.
  3. 이제 IP 주소를 이용해 실제 네트워크 단에서 이 패킷을 어디로 전송할지 MAC 주소를 알아내기 위해 ARP를 사용한다. ARP 쿼리로 대상 IP에 해당하는 이더넷 MAC 주소(2:60:8c:2:b0:5a 예시)를 알아낸다.
  4. 이렇게 DNS를 통한 도메인네임→IP 변환, ARP를 통한 IP→MAC 변환이 단계적으로 이루어져 최종적으로 소켓을 통해 해당 서버의 파일에 접근할 수 있게 된다.

 

정리하자면, URL 속 이름은 DNS를 통해 IP로, IP는 ARP를 통해 MAC으로 해석되며, 이 일련의 과정 덕분에 사용자는 단순한 텍스트 기반 이름(도메인명)으로 원하는 리소스에 도달할 수 있다.

 

 

 

 

 

DNS는 클라이언트(호스트)와 DNS 서버 간 이름 해석 시 두 가지 대표적인 질의 처리 방식을 제공한다.

 

 

반복 탐색(Iterative Resolution)

클라이언트가 DNS 서버에 질의하면, 해당 서버는 자신의 캐시나 권한영역에 정보가 있을 경우 바로 응답하고,

없으면 “이 다음 DNS 서버에게 물어봐라”라는 식으로 다른 DNS 서버 주소를 클라이언트에게 알려준다.

 

클라이언트는 이를 바탕으로 직접 다른 DNS 서버에게 계속 질의해가며 최종 IP 주소를 얻는다.

즉, 클라이언트가 스스로 여러 DNS 서버를 순회하며 IP 주소를 찾는 방식이다.

장점은 부하 분산과 응답 속도 향상이며, 클라이언트가 DNS 조회 과정을 주도한다.

 

 

 

재귀 탐색(Recursive Resolution)

클라이언트가 DNS 서버에 요청하면, 그 DNS 서버가 다른 DNS 서버들과 직접 통신하며

최종 결과(IP 주소)를 찾아 클라이언트에게 돌려준다.

 

클라이언트 입장에서는 한 번의 요청으로 결과를 얻게 되며, DNS 서버가 중간 탐색 과정을 모두 대신 수행한다.

서버 부담이 커질 수 있지만, 클라이언트 관점에서는 간편하다.

 

간단하게, DNS 서버가 대신 다른 DNS 서버에게 질의하여 최종 결과를 클라이언트에게 반환하는 방식이다.

 

 

 

 

 

 

DNS는 인터넷에서 핵심적인 역할을 하는 분산형 데이터베이스 시스템으로, 중앙 집중식이 아닌 전 세계적으로 분산된 계층적 구조를 통해 관리된다.

도메인 이름의 계층 구조는 인터넷의 관리 체계를 반영하며, 각 계층은 서로 다른 주체에 의해 유지된다.

 

이를 통해 DNS는 사용자가 입력한 도메인 이름을 신속하게 IP 주소로 변환하여 실제 통신이 가능하도록 매핑한다.

 

 

또한, DNS는 이전에 조회했던 도메인과 IP 주소 매핑 결과를 일정 시간 동안 서버나 클라이언트에 캐싱해두어 반복 요청 시 빠르게 응답할 수 있다.

 

 

 

 

DNS 이름 해석 알고리즘은 도메인 이름을 IP 주소로 변환하는 과정을 단계적으로 진행한다.

 

먼저, 클라이언트나 DNS 서버는 자체 캐시에 해당 도메인 이름에 대한 IP 정보가 있는지 확인한다.

 

만약 캐시에 정보가 있다면 즉시 해당 IP를 반환하여 빠르게 응답하고

캐시에 정보가 없다면, 상위 DNS 서버나 권한 있는 DNS 서버에 질의한다.

 

이 과정에서 상위 DNS 서버는 요청한 도메인 정보가 없을 경우 다른 DNS 서버를 안내하거나,

자신이 가지고 있는 IP 주소를 반환한다.

 

 

마지막으로, 반환받은 IP 주소를 통해 사용자는 대상 서버(예: 웹 서버)에 접속한다.

이때 해당 IP 주소는 일정 기간 동안 캐시에 저장되며, 이후 동일한 도메인 요청 시 더 빠르게 응답할 수 있게 된다.

 

 

 

 

 

 

 

DNS는 3개의 계층으로 구성되어 있으며, 각각의 역할이 명확하게 나뉘어 인터넷에서 효율적인 이름 해석을 지원한다.

 

 

루트 DNS 서버(Root DNS Server)

인터넷 DNS 체계의 최상위에 위치하며, TLD(Top-Level Domain) 서버의 위치 정보를 제공한다.

 

TLD DNS 서버(Top-Level Domain DNS Server)

.com, .net, .org, .kr 등의 최상위 도메인에 대한 정보를 관리하고,

해당 TLD 하위 도메인에 대한 권한 있는 DNS 서버의 위치를 알려준다.

 

권한 있는 DNS 서버(Authoritative DNS Server)

특정 도메인(예: www.example.com)에 대한 정확한 IP 매핑 정보를 가지고 있다.

 

 

 


이와 함께 캐싱(Caching) 메커니즘은 DNS 서비스의 효율성과 속도를 높이는 핵심이다.

 

 

로컬 또는 ISP DNS 서버는 도메인-주소 매핑 결과를 일정 시간(TTL) 동안 캐시에 저장하여 

동일한 도메인 요청 시 상위 서버까지 질의할 필요 없이 빠르게 응답할 수 있도록 한다.

 

 

TTL이 만료되면 캐시가 삭제되고, 재요청 시 최신 정보를 다시 상위 DNS 서버에서 받아온다.