DNS(Domain Name System)

Domain name -> IP 주소로 변환
웹사이트에 접속 할 때 사용자는 외우기 어려운 IP 주소 대신 도메인 이름 사용
-> 사람이 읽을 수 있는 도메인 이름(www.~)을 IP주소로 변환해 해당 IP 주소로 접속하는 시스템(과정)

  • 상위 기관에서 인증된 기관에게 도메인을 생성하거나 IP 주소로 변경할 수 있는 권한 부여


DNS 구성요소

1. Domain Name Space
Domain Name Space는 DNS가 저장 관리하는 계층적 구조를 의미

  • 최상위에 루트 DNS 서버가 존재하고 그 하위로 인터넷에 연결된 모든 노드가 연속해서 이어진 계층 구조(폴더 구조와 비슷)
    = 규칙(방법)으로 도메인 이름 저장을 분산

제목 없음

  • 계층적 도메인 레벨
    • Domain Name Space의 트리 구조는 최상위 레벨부터 순차적으로 계층적 소속 관계를 나타냄
    • 하위 조직의 네임 스페이스를 할당하고 관리하는 방식은 각 하위 기관의 관리 책임자에게 위임

    • ex)
      ttaehee.kr 도메인은 kr 도메인을 관리하는 Name Server에 등록되어있음
      www.ttaehee.kr을 만들기 위해서 가비아(kr 도메인을 관리하는 네임 서버의 하위기관)에 가서 도메인 레코드에 하위 도메인을 추가하면 됨
      www.ttaehee.kr은 ttaehee.kr을 관리하는 Name Server에 등록
      blog.ttaehee.kr을 생성하기 위해서는 ttaehee.kr 도메인을 관리하는 Name Server의 레코드만을 수정함으로써 가능
      => 이러한 위임 구조는 호스트의 증가에 대한 관리가 효율적으로 이루어짐

    • AWS 같은 호스팅에서 가비아에서 구매한 도메인을 사용하려면?
      AWS route53에 생성된 네임서버를 가비아 도메인에 추가해야함
      (= 해당 도메인에 대한 IP 주소를 route53 네임서버에서 찾으라는 말)
      route53에서는 해당 인스턴스나 버킷 등으로 연결되어있음
      => 가비아에서 해당 도메인에 대한 IP 주소찾기 요청이 왔을때, route53으로 돌려보내 route53과 연결된 인스턴스나 버킷을 통해 ip주소를 찾을 수 있음
      Amazon Route 53이 도메인의 트래픽을 라우팅하는 방법


2. Name Server(= DNS Server)
(DNS 서버와 같은 말, 그런데 리졸버 서버 등 시스템 안에서 다른 역할을 하는 서버도 있어서 의미전달 위해 네임 서버)
도메인 이름(문자열) <-> IP(일련의 숫자)의 상호변환 기능이 있는 서버

  • 문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 IP 주소로 변환시키기 위해서는 Domain Name Space의 트리 구조에 대한 정보 필요, 이러한 정보를 가지고 있는 서버
  • 데이터베이스 역할(저장, 관리), 찾아주는 역할, 요청 처리 응답 구현
  • 해당 도메인 이름의 IP 주소를 찾음
    • 권한 있는 DNS 서버는 IP 주소와 도메인 이름을 매핑
    • 권한 없는 DNS 서버는 질의를 통해 IP 주소를 알아내거나 캐시함


  • DNS서버 종류
    • Root DNS 서버 : ICANN이 직접 관리하는 절대 존엄 서버
      • TLD DNS 서버 IP 주소를 저장하고 안내하는 역할
      • 전 세계에 13개의 Root DNS 서버가 구축(패킷의 실질적인 크기 제한으로 인해 루트 DNS 서버 수를 13개 서버 주소로 제한하도록 결정)
    • TLD(Top-Level Domain) DNS 서버 : 도메인 등록 기관이 관리하는 서버
      • Authoritative DNS 서버의 주소를 저장하고 안내하는 역할
      • 도메인 판매 업체(가비아 등)의 DNS 설정이 변경되면 도메인 등록기관으로 전달 -> 어떤 도메인이 어떤 판매업체에서 구매했는지 알수 있음
    • SLD(Second-Level Domain) DNS 서버 (= Authoritative DNS 서버) : 실제 개인 도메인과 IP 주소의 관계가 기록(저장, 변경)되는 서버
      • 일반적으로 도메인/호스팅 업체의 네임서버
      • 개인 DNS 구축해도 이 경우
    • 권한 없는 DNS 서버 (Resolver 서버, Recursive 서버, Recursor)

=> 브라우저는 캐시가 저장된 Recursive 서버 사용
  실제 Name Server를 설정하는 곳은 Authoritative 서버


3. Resolver
= Recursive DNS Server = Local Server(of ISP) = Recursor
권한없는 DNS 서버, 수많은 Name Server에 접근하여 사용자로부터 요청 받은 도메인의 IP 정보를 조회
ex)
ISP(통신사) DNS : KT/LG/SK (대표적)
Public DNS 서버(구글 DNS, 클라우드플레어) : 브라우저 우회 용도로 많이 쓰임)

  1. 웹브라우저(DNS Client) 요청을 하나의 Name Server로 전달
  2. NS로부터 정보(도메인 이름과 IP 주소)를 받아
    (NS에 정보가 없으면 Resolver가 다른 NS에게 요청을 보내 정보를 받아옴)
  3. 클라이언트에게 제공


  • 단말에 구현하는 것은 무리라 보통은 Resolver가 구현된 NS의 IP 주소만을 파악
  • 스터브 리졸버(Stub Resolver)
    • 수 많은 네임 서버의 구조를 파악할 필요없이 리졸버가 구현된 DNS 서버의 IP 주소만 파악
    • 도메인에 대한 질의를 받은 스터브 리졸버는 설정된 DNS 서버로 DNS Query(질의)를 전달하고 DNS 서버로부터 최종 결과를 응답 받아 웹 브라우저로 전달하는 인터페이스 기능만을 수행


DNS 동작방식

제목 없음

  1. Web browser : 이전에 방문한 적 있는지 확인(브라우저 캐시, OS캐시, 라우터 캐시 등)
    없으면 Web browser -> DNS Server(Local DNS) : 도메인의 IP주소 요청
    DNS Query, “www.ttaehee.kr의 IP 주소 알려주세요!”

  2. Local DNS : 캐시 데이터가 있는지 확인
    없으면 Local DNS -> 최상위 기관에서 관리하는 DNS Server(Name Server(Root DNS)) : 요청
    DNS Query, “.kr 이라는 도메인 있나요?”

  3. Root DNS -> Local DNS : 응답
    DNS Response, “한국 국가 도메인 입니다 kr 도메인을 관리하는 네임서버의 이름과 IP 주소를 알려드릴 테니 거기에 물어보세요”

  4. Local DNS -> .kr Namer Server : 요청
    DNS Query, “ttaehee.kr의 IP 주소를 알고 계신가요?”

  5. .kr NS -> Local DNS : 응답
    DNS Response, “네 가비아로 가세요”

  6. Local DNS -> 가비아 NS : 요청
    DNS Query, “ttaehee.kr의 IP 주소를 알고 계신가요?”

  7. 가비아 NS -> Local DNS : 응답
    DNS Response, “12.345.678.900 으로 가세요!”
    이 때, Local DNS는 해당 정보를 캐시로 기록

  8. Local DNS -> Web browser : 응답
    DNS Response, “12.345.678.900 으로 가세요!”


DNS Query

DNS 클라이언트와 DNS 서버는 DNS 쿼리를 교환

제목 없음

  • Recursive Query(재귀적 질의)
    결과물(IP주소)를 돌려주는 작업
    • Local DNS 서버가 여러 DNS 서버에 차례대로 (Root DNS 서버 -> com DNS 서버 -> naver.com DNS 서버) 요청하여 그 답을 찾는 과정
  • Iterative Query(반복적 질의)
    다른 DNS 서버에게 쿼리를 보내어 응답을 요청하는 작업
    • Recursive 서버가 권한 있는 NS들에게 반복적으로 쿼리를 보내서 결과물(IP 주소)를 알아냄
    • Recursive 서버에 이미 IP 주소가 캐시 되어있다면 이 과정은 건너뜀

=> Recursive 쿼리를 받은 Recursive 서버는
Iterative 하게 권한 있는 네임 서버로 Iterative 쿼리를 보내서
결과적으로 IP 주소를 찾게 되고 해당 결과물을 응답


Domain name

  • kr : 각 국가별 사용을 위해 정의한 도메인으로 ISO 3166 [4]에서 정의하는 국가 코드에 기반함
  • com : 기업과 같은 상용 조직을 위한 도메인
  • edu : 교육 기관들을 위한 도메인
  • net : 네트워크 서비스 제공자와 관련된 시스템을 위한 도메인
  • org : 다른 TLD에 속하지 않는 비정부 단체를 위한 도메인
  • int : 국제 협약에 의해 만들어짂 조직을 위한 도메인
  • gov : 본래 정부 기관이나 단체를 위한 도메인이었으나, 현재 미국의 주 정부를 비롯한 연방 정부만 등록하도록 결정
  • mil : 미국 국방성 관련 기관에서 사용하도록 정의한 도메인
  • arpa : IP 주소를 도메인 이름으로 매핑하기 위해 사용되는 특수 도메인



Reference
https://hanamon.kr/dns%EB%9E%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D%EA%B9%8C%EC%A7%80/
https://ja-gamma.tistory.com/entry/DNS%EA%B0%9C%EB%85%90%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC
https://gentlysallim.com/dns%EB%9E%80-%EB%AD%90%EA%B3%A0-%EB%84%A4%EC%9E%84%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AD%94%EC%A7%80-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/
https://velog.io/@wook2pp/%EA%B0%80%EB%B9%84%EC%95%84%EC%97%90%EC%84%9C-%EA%B5%AC%EB%A7%A4%ED%95%9C-%EB%8F%84%EB%A9%94%EC%9D%B8-Amazon-Route-53%EC%97%90%EC%84%9C-%ED%98%B8%EC%8A%A4%ED%8C%85%ED%95%98%EA%B8%B0

업데이트: