devFancy BE Developer

DNS

2023-02-08
devfancy

이 글의 정보들은 주로 컴퓨터 네트워킹 : 하향식 접근(7판) 교재를 공부하면서 정리한 내용입니다.

Host name 과 Domain name 차이

  • 예를 들어 devfancy.github.io 일때 devfancy가 호스트 네임, github.io이 도메인 네임이다.

  • 호스트 네임과 도메인 네임을 합치면 FQDN(Fully Qualified Domain Name)이 된다.

  • 즉, DNS 서버의 이름 = host name + domain name 이다.

  • 비유하자면 호스트는 내선번호이고, 도메인은 회사/집의 전화번호이다.

DNS

  • 사람은 www.apple.com 과 같은 호스트 이름을 통해 온라인으로 정보에 접근한다.

  • 웹브라우저는 인터넷프로토콜(IP) 주소를 통해 상호작용한다.

  • 사람은 좀 더 기억하기 쉬운 호스트 이름 식별자를 좋아하지만, 라우터는 고정 길이의 계층구조를 가진 IP 주소를 좋아한다. 이러한 선호 차이를 절충하기 위해 호스트 이름을 IP 주소로 변환해주는 디렉터리 서비스가 DNS(domain name system)의 주요 임무다.

  • DNS는 브라우저가 인터넷 자원을 로드할 수 있도록 호스트 이름과 IP 주소를 매핑해주는 서버로서, 호스트 이름과 IP 주소를 저장하고 있는 분산 데이터베이스다.

    • 예) www.naver.com 의 IP 주소가 222.111.222.111로 되어있는데 사용자가 보기 쉽게 호스트 이름으로 매핑해준다.

    • 쉽게 말하면 웹 사이트를 위한 주소록이라고 생각하면 된다.

  • DNS 는 애플리케이션 계층에 속한다. (예플리케이션 계층 - FTP, HTTP, SSH, SMTP, DNS)

    • 애플리케이션 계층은 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층이다.

    • 그 중 DNS는 TCP/IP 환경에서 IP 주소로 시스템을 구분한다.

분산 계층 데이터베이스

  • 단일 DNS 서버에 있는 중앙 집중 데이터베이스는 서버의 고장, 트래픽양, 먼 거리의 중앙 집중 데이터베이스, 유지관리 등의 문제쟘을 이유로 확장성이 전혀 없다.

  • 이러한 확장성 문제를 다루기 위해 DNS는 많은 서버를 이용하여 계층 형태로 분산시킨다.

  • 루트 DNS 서버 : 1000개 이상의 루트 서버 인스턴스가 전세계에 흩어져 있다. 루트 네임 서버는 TLD 서버의 IP 주소들을 제공한다.

  • 최상위 레벨 도메인(TLD) 서버 : com, org, net, edu, gov 같은 상위 레벨 도메인과 kr, ur, fr, ca, jp 같은 모든 국가의 상위 레벨 도메인에 대한 TLD 서버가 있다. TLD 서버는 책임 DNS 서버에 대한 IP 주소를 제공한다.

  • 책임 DNS 서버 : 인터넷에 접근하기 쉬운 호스트를 가진 모든 기관은 호스트 이름을 IP 주소로 매핑하는 공개적인 DNS 레코드를 제공해야 한다. 대부분의 대학과 큰 기업들은 자신의 기본 책임 DNS 서버와 보조 책임 DNS 서버를 유지하고 구현한다.

DNS query

  • ISP(Internet Service Provider)의 DNS 서버(DNS recursor)가 호스팅하고 있는 서버의 IP 주소를 찾기 위해 DNS query를 날린다.

DNS query의 목적

  • DNS 서버들을 검색해서 해당 사이트의 IP 주소를 찾는데에 있다.

  • IP 주소를 찾을 때까지 DNS 서버에서 다른 DNS 서버를 오가며 에러가 날 때까지 반복적으로 검색한다.

DNS query 기본 동작

  • www.google.com 주소를 검색할 때,

    • [1] DNS 서버가 루트 DNS 서버에 요청한다.

    • [2] .com 도메인 TLD 서버로 리다이랙트 한다.

    • [3] google.com 책임 DNS 서버로 리다이랙트 한다.

    • [4] 최종적으로 DNS 기록에서 www.google.com 에 매칭되는 IP 주소를 찾는다.

    • [5] 찾은 IP 주소를 DNS 서버로 보낸다.

  • DNS query 종류에는 Recursive Query, Iterative Query가 있다.

  • 그림 2.19의 예는 재귀적 질의와 반복적 질의를 사용한다. cse.nyu.edu로부터 dns.nyu.edu로 보내는 질의는 자신을 대신하여 필요한 매핑을 얻도록 dns.nyu.edu에게 요구하므로 재귀적 질의이다.

  • 그러나 다른 세 가지 질의는 모든 응답이 dns.nyu.edu에 직접 보내지므로 반복적 질의다.

  • 이론상, DNS 질의는 반복적이고 재귀적일 수 있다.

  • 그림 2.20의 예에서 모든 질의가 재귀적인 DNS 질의 사슬을 따른다.

  • 일반 질의는 전형적으로 그림 2.19의 형식을 따른다.

  • 요청하는 호스트로부터 로컬 DNS 서버까지의 질의는 Recursive Query(재귀적인 질의)이고, 나머지는 Iterative Query(반복적인 질의)이다.

  • 요청한 호스트에게 매핑 결과를 전달하기 위해 실제로 많은 DNS query 메세지가 필요하다.

  • 그러한 DNS query 전송을 줄이기 위해 DNS 캐싱 방법을 사용한다.

DNS 캐싱

  • 실제 DNS는 지연 성능 향상과 네트워크의 DNS 메세지 수를 줄이기 위해 캐싱을 사용한다.

  • DNS 캐싱의 아이디어는 질의 사슬에서 DNS 서버가 DNS 응답을 받았을 때(호스트 이름을 IP 주소로 매핑하기) 그것은 로컬 메모리에 응답에 대한 정보를 저장할 수 있다.

  • 호스트 이름과 IP 주소 쌍이 DNS 서버에 저장되면 처음 브라우저가 캐싱된 DNS를 확인하고 캐싱된 기록이 없을 때 DNS 질의로 넘어간다.

  • 호스트 이름과 IP 주소 사이 매핑과 호스트는 영구적이지 않기 때문에 특정 기간마다 저장된 정보를 제거한다.

DNS 레코드

  • DNS 레코드는 DNS 서버가 해당 패킷을 받았을 때 어떤 식으로 처리할지를 나타내는 지침을 말한다.

  • DNS 레코드에는 서버가 요청에 응답하는 방법에 대한 다양한 구문과 명령이 포함되어 있다.

  • DNS 레코드가 필요한 이유는 내가 원하는 서버와의 정확한 통신을 하기 위해서는 도메인에 대해서 정확한 레코드 값을 지정해야 하기 때문이다.

DNS 레코드 종류

  • SOA(Start Of Authority) : 도메인의 시작점, 즉 도메인에 대한 선언을 하는 부분이다.

    도메인의 네임서버, 관리자의 메일, 도메인에 대한 타이머 관련된 설정들을 지정해 줄 수 있다.

    SOA가 없다면 다른 레코드는 등록할 수 없다.

  • A(Host) : 주소/호스트 레코드; - 정규화된 도메인 이름/호스트명(FQDN)을 IPv4에 연결한다.

  • AAAA : 주소 레코드; - 호스트를 IPv6에 연결한다.

  • CNAME : 별칭 레코드; - 실제 호스트명(A 레코드)과 연결되는 별칭, 별명을 정의 해주는 레코드이다. 실제 호스트명이 있어야 생성이 가능하다.

Hosts 파일

  • Hosts 파일은 로컬 호스트용 DNS이다. 도메인을 요청하고 DNS 서버로 가기 전에 hosts 파일을 거쳐서 간다. 도메인 주소가 IP 주소로 바뀔 수 있도록 해주는 것이 hosts 파일의 역할이다.

  • 즉 hosts 파일에 매핑한 IP 주소와 도메인은 DNS 서버보다 우선시한다.

  • DNS를 놔두고 hosts 파일이 존재하는 이유는 [1] DNS를 거치지 않고 로컬에서 변환되므로 인터넷 속도가 향상되고, [2] 리소스 사용을 줄이며, [3] DNS 서버의 보안 문제를 예방할 수 있다.

예상 질문

  • DNS는 몇 계층 프로토콜인가요?

  • UDP와 TCP 중 어떤 것을 사용하나요?

  • DNS Recursive Query, Iterative Query가 무엇인가요?

  • DNS 캐싱을 사용하는 이유는 무엇인가요?

  • DNS 레코드 타입 중 A, CNAME, AAAA의 차이에 대해서 설명해 주세요.

  • hosts 파일은 어떤 역할을 하나요? DNS와 비교하였을 때 어떤 것이 우선순위가 더 높나요?

Reference


Comments

Index