호우동의 개발일지

Today :

article thumbnail

DNS: 인터넷의 디렉터리 서비스


호스트 이름(host name)

  • 호스트의 식별자 중 하나
    • 호스트는 IP 주소(IP address)로도 식별됨
    • 예시 : www.facebook.com, www.google.com …

  • 사용 이유(장점)
    • 호스트 이름은 기억하기 쉬워 사용자가 편리함

  • 단점
    • 호스트 이름은 인터넷에서의 호스트 위치에 대한 정보를 거의 제공하지 않는다.
    • 호스트 이름은 라우터가 처리하는데 어려움이 있다.
      ← 가변 길이의 알파뉴메릭 문자로 구성되어 있기 때문

 

 


DNS가 제공하는 서비스


인터넷 디렉터리 서비스(DNS)가 필요한 이유

  • 라우터와 사람의 차이로 인해 호스트 이름을 IP 주소로 변환해 주는 서비스 필요
    인터넷 DNS(domain name system)의 주요 임무
    • 사람은 기억하기 쉬운 호스트 이름 식별자를 좋아함
    • 라우터는 고정 길이의 계층구조를 가진 IP 주소를 좋아함

 


DNS란?

  • DNS 서버들의 계층 구조로 구현된 분산 데이터베이스
  • 호스트가 분산 데이터베이스를 질의하도록 허락하는 애플리케이션 계층 프로토콜
  • DNS 서버는 주로 BIND 소프트웨어를 수행하는 유닉스 컴퓨터이다.
    • BIND → Berkeley Internet Name Domain

  • DNS 프로토콜은 UDP상에서 수행되고 포트 번호 53번을 사용
  • 다른 애플리케이션 프로토콜들이 사용자가 제공한 호스트 이름을 IP 주소로 변환하기 위해 사용
    • 사용자가 제공한 호스트 이름 → HTTP, SMTP, FTP 등

 

HTTP에서의 DNS 수행 과정

  • 사용자 호스트에서 수행되는 브라우저(HTTP 클라이언트)가 URL을 요청할 때
    → 사용자의 호스트가 HTTP 요청 메시지를 웹 서버로 보내기 위해 IP주소를 얻어야 함

  • 수행 과정
    1. 같은 사용자 컴퓨터 DNS 애플리케이션 클라이언트 측을 수행
    2. 브라우저 URL로부터 호스트 이름을 추출
    3. 추출한 호스트 이름을 DNS 애플리케이션의 클라이언트 측에 넘김
    4. DNS 클라이언트는 호스트 이름에 대한 IP 주소를 가진 응답을 받음
    5. 브라우저가 DNS로부터 IP 주소를 전달받음
    6. 브라우저는 해당 IP 주소와 그 주소의 80번 포트에 위치하는
      HTTP 서버 프로세스로 TCP 연결을 초기화

 

DNS 사용으로 인해 발생하는 추가 지연

  • DNS는 DNS를 사용하는 인터넷 애플리케이션에게 추가 지연을 준다.
  • But, 원하는 IP 주소는 가까운 DNS 서버에 캐싱되어 있음
    → 평균 DNS 지연뿐만 아니라 DNS 네트워크 트래픽 감소에 도움을 줌

 


DNS: 클라이언트-서버 패러다임을 통한 주요 네트워크 기능

  • DNS 프로토콜은 클라이언트-서버 구조로 통신하는 종단 사이에서 수행
  • 통신하는 종단 시스템 사이에서 DNS 메시지를 전달해야 함
    → 하위 종단 트랜스포트 프로토콜에 의존 → DNS는 애플리케이션 계층 프로토콜

  • DNS의 역할은 웹 파일 전송, 전자메일 애플리케이션과는 다름
    • DNS는 사용자가 직접 상호작용하는 애플리케이션이 아님
    • DNS는 핵심적인 인터넷 기능을 제공한다.
      • 사용자와 다른 애플리케이션을 위해 호스트 이름을 하위 IP 주소로 변환
      • 네트워크 가장자리에서 클라이언트-서버를 이용하여
        이름-주소 사이의 변환 프로세스를 구현

 

 


DNS가 제공하는 중요한 추가 서비스


호스트 에일리어싱(host aliasing)

  • 복잡한 호스트 이름을 가진 호스트는 하나 이상의 별명을 가질 수 있다.
  • 예시 - relay1.west-coast.enterprise.com 같은 호스트의 경우
    • enterprise.com이나 www.enterprise.com 같은 2개의 별칭을 가질 수 있음
    • relay1.west-coast.enterprise.com를 정식 호스트 이름이라고 함
      • 정식 호스트 이름(canonical hostname)

  • DNS는 제시한 별칭 호스트 이름에 대한 정식 호스트 이름을 얻기 위해 이용 가능

 


메일 서버 에일리어싱(mail server aliasing)

  • 전자 메일 주소는 기억하기 쉬운 것이 좋음
    → But, 메일 서버의 호스트 이름은 더 복잡함

  • DNS는 별칭으로부터 정식 호스트 이름을 얻기 위해 메일 애플리케이션에 의해 수행
  • MX 레코드는 기업의 메일 서버와 웹서버가 같은 호스트 이름(별칭)을 갖는 것을 허용
    • 예 : 기업 웹 서버와 메일 서버 둘 다 enterprise.com이라고 부를 수 있음

 


부하 분산(load distribution)

  • DNS는 중복 웹 서버 같은 여러 중복 서버 사이에 부하를 분산하기 위해서 사용 가능
    • 인기 사이트는 여러 서버에 중복되어 있음
      → 각 서버가 다른 종단 시스템에서 수행되고 다른 IP 주소를 갖는다.

  • 중복 웹 서버의 경우, 여러 IP 주소가 하나의 정식 호스트 이름과 연관됨
    • DNS 데이터베이스는 이런 IP 주소 집합을 갖고 있음

  • 클라이언트가 주소 집합으로 매핑하는 호스트 이름에 대한 DNS 질의
    → 서버가 IP 주소 집합 전체를 가지고 응답

  • DNS 순환 방식
    • 각 응답에서의 주소는 순환식으로 전송
    • DNS의 순환 방식은 중복 서버들 사이에서 트래픽을 분산하는 효과를 낸다.
      ← 클라이언트는 주소 집합 내부의 첫 번째 IP 주소로 HTTP 요청 메시지를 보내기 때문

    • 해당 방식은 전자메일에서도 사용되어 여러 메일 서버에 동일한 별칭을 가질 수 있음

 

 


DNS 동작 원리 개요

  • 호스트 이름을 IP 주소로 변환하는 서비스에 초점을 맞춰 설명

호스트 이름을 IP 주소로 변환하는 과정

가정

  • 사용자 호스트에서 실행되는 어떤 애플리케이션이 호스트 이름을 IP 주소로 변환
    • 어떤 애플리케이션 → 웹 브라우저나 메일 클라이언트

 

변환 과정

  1. 그 애플리케이션은 변환될 호스트 이름을 명시하여 DNS 측의 클라이언트 호출
  2. 사용자 호스트의 DNS는 네트워크에 질의 메시지를 보낸다.
    • 모든 DNS 질의와 응답 메시지는 포트 53 UDP 데이터그램으로 보내짐

  3. 사용자 호스트의 DNS는 요청한 매핑에 해당하는 DNS 응답 메시지를 받는다.
    • DNS 응답 메시지를 받기 전에 수 밀리 초 ~ 몇 초의 지연이 걸린다.

  4. 이제 매핑은 호출한 애플리케이션으로 전달된다.

 

변환 과정 해석

  • 사용자 호스트의 호출한 애플리케이션 관점에서
    DNS는 간단하고 직접적인 변환 서비스를 제공하는 블랙박스와 같음
    • 블랙박스 구성
      • DNS 서버뿐만 아니라, DNS 서버와 질의를 하는 호스트 사이에서
        어떻게 통신하는지를 명시하는 애플리케이션 계층 프로토콜로 구성되어 있다.

  • DNS의 간단한 설계로 모든 매핑을 포함하는 하나의 인터넷 네임 서버를 생각할 수 있음
    • 이러한 중앙 집중 방식에서의 클라이언트와 DNS 서버의 동작
      • 클라이언트는 모든 질의를 단일 네임 서버로 보냄
      • DNS 서버는 질의 클라이언트에게 직접 응답

    • 이 방식은 간단하지만 수많은 호스트를 가진 현대 인터넷에는 적합하지 않음

 


DNS 중앙 집중 방식에서의 단점

  • 서버의 고장 : 네임 서버가 고장 나면, 전체 인터넷이 작동하지 않는다.
  • 트래픽양 : 단일 DNS 서버가 모든 DNS 질의를 처리해야 한다.
    • 수많은 호스트에서 발생한 모든 HTTP 요청과 전자메일 메시지의 처리

  • 먼 거리의 중앙 집중 데이터베이스
    • 단일 DNS 서버가 모든 질의 클라이언트로부터 가까울 순 없다.
      → 매우 심각한 지연을 일으킬 수도 있다.

  • 유지관리 : 단일 네임 서버는 모든 인터넷 호스트에 대한 레코드를 유지해야 한다.
    • 중앙 집중 데이터베이스
      → 거대해지고 모든 새로운 호스트를 반영하기 위해 자주 갱신이 필요함

    • 중앙 집중 데이터베이스에 호스트를 등록 허용하는 것은 인증 문제가 생김

요약

  • 단일 DNS 서버에 있는 중앙 집중 데이터베이스는 확장성이 없다.
    → 결과적으로 DNS는 분산되도록 설계됨

  • DNS는 분산 데이터베이스가 인터넷에 잘 구현된 사례

 

 


분산 계층 데이터베이스

DNS 분산 계층
DNS 분산 계층

  • DNS는 많은 서버를 이용하고, 이를 계층 형태로 구성하며 전 세계로 분산 시킴
    → 확장성 문제를 해결하기 위해

  • 어떠한 단일 DNS 서버도 인터넷에 있는 모든 호스트에 대한 매핑을 갖지 않는다.
    → 대신, 모든 호스트에 대한 매핑은 DNS 서버 사이에 분산된다.

 


계층으로 구성된 세 유형의 DNS 서버

  • 루트 DNS 서버 : 루트 네임 서버는 TLD 서버의 IP 주소들을 제공
    • 1000개 이상의 루트 서버 인스턴스가 전 세계에 흩어져있음
    • 루트 서버들은 13개의 다른 루트 서버 복사체
      • 12개의 다른 기관에서 관리됨
      • 인터넷 할당 번호 관리기관에 의해 조정됨

  • 최상위 레벨 도메인(TLD) 서버 : 책임 DNS 서버에 대한 IP 주소를 제공
    • TLD를 지원하는 네트워크 인프라는 크고 복잡함

    • 종류
      • com, org, net, edu, gov 같은 상위 레벨 도메인
        • 베리사인 글로벌 레지스트리 서비스사는 com TLD에 대한 서버 담당
        • 에듀코즈사(Educause)는 edu TLD에 대한 TLD 서버를 담당

      • kr, uk, fr, ca, jp 같은 모든 국가의 상위 레벨 도메인에 대한 TLD 서버
        • 서버 클러스터라고도 함

  • 책임 DNS 서버
    • 인터넷에 접근하기 쉬운 호스트를 가진 모든 기관은
    • 호스트 이름을 IP 주소로 매핑하는 공개적인 DNS 레코드를 제공해야 함
      • 인터넷에 접근하기 쉬운 호스트 → 웹 서버와 메일 서버

    • 기관의 책임 DNS 서버는 이 DNS 레코드를 가지고 있다.
      • 기관은 이 레코드를 갖도록 자신의 책임 DNS 서버의 구현을 선택 가능
      • 또한 일부 서비스 제공자의 책임 DNS 서버에 이 레코드를 저장하도록 비용 지불

    • 대학과 큰 기업들은 자신의 기본 책임 DNS 서버와 보조 책임 DNS 서버를 유지 및 구현

 


로컬 DNS 서버

  • 루트, TLD, 책임 DNS 서버들은 모두 DNS 서버들의 계층 구조를 가진다.
  • DNS의 또 다른 중요한 형태는 로컬 DNS 서버이다.
    • 로컬 DNS 서버는 서버들의 계층 구조에 엄격하게 속하지 않는다.
      But, DNS 구조의 중심에 있음.

    • ISP들은 로컬 DNS 서버(또는 디폴트 네임 서버)를 갖는다.
      • 여기서의 ISP는 대학이나 주거지역 ISP와 같은 ISP이다.
      • 이 ISP는 로컬 DNS 서버로부터 IP 주소를 호스트에게 제공
        • 네트워크 상태 창에 접근하여 로컬 DNS 서버의 IP 주소를 결정할 수 있음
        • 호스트의 로컬 DNS 서버는 대체로 호스트에 가까이 있다.

  • 기관 ISP에서 로컬 DNS 서버는 호스트와 같은 LAN상에 있을 수 있다.
  • 주거지역 ISP는 전형적으로 몇 개의 라우터 범위 안에서 호스트로부터 떨어져 있음
    • 호스트가 DNS 질의를 보냄
      → 이 질의는 먼저 프락시로 동작하는 로컬 DNS 서버에 전달
      → 그 로컬 DNS 서버는 이 질의를 DNS 서버 계층으로 전달

 


DNS 서버 상호 작용 예시

  • TLD 서버가 호스트 이름에 대한 책임 서버를 알 때
  • 가정
    DNS 서버 상호작용 과정
    DNS 서버 상호작용 과정

    • 호스트 cse.nyu.edu가 gaia.cs.umass.edu의 IP주소를 원한다.
    • cse.nyu.edu에 대한 NYU의 로컬 DNS 서버 → dns.nyu.edu
    • gaia.cs.umass.edu에 대한 책임 DNS 서버 → dns.umass.edu

  • 과정
    1. 호스트 cse.nyu.edu가 먼저 자신의 로컬 DNS 서버 dns.nyu.edu에게
      DNS 질의 메시지를 보냄
      • 질의 메시지에는 변환되어야 하는 호스트 이름이 포함된다.
      • 변환되어야 하는 호스트 이름 = gaia.cs.umass.edu

    2. 로컬 DNS 서버는 그 질의 메시지를 루트 DNS 서버에게 전달
    3. 루트 DNS 서버는 edu를 인식하고,
      edu에 대한 책임을 가진 TLD 서버의 IP 주소 목록을 로컬 DNS 서버에게 보낸다.
    4. 로컬 DNS 서버는 질의 메시지를 TLD 서버로 보낸다.
    5. 이후 TLD 서버는 umass.edu를 인식
      → dns.umass.edu로 이름 지어진 책임 DNS 서버의 IP 주소로 응답

    6. 로컬 DNS 서버는 직접 dns.umass.edu로 질의 메시지를 보내고,
      gaia.cs.umass.edu의 IP 주소로 응답

  • 해당 과정에서 하나의 호스트 이름 매핑을 얻기 위해 발생한 DNS 메시지
    → 질의 메시지 4번과 응답 메시지 4번, 총 8번 보내짐
    • 질의 전송을 줄이기 위해 DNS 캐싱 방법을 사용

 


DNS 서버 상호 작용 예시

  • TLD 서버가 호스트 이름에 대한 책임 서버를 모를 때
  • 일반적으로는 TLD 서버가 호스트 이름에 대한 책임 서버를 알지 못함
  • 대신, TLD 서버는 호스트 이름에 대한 책임 DNS를 아는 중간 DNS 서버만 알고 있음
  • 가정
    • A 대학교가 대학에 대한 DNS 서버, 즉 dns.umass.edu를 갖고 있다.
    • A 대학교의 각 학과도 자신의 DNS 서버를 가지고 있다.
      • 각 학과 DNS 서버가 학과 안의 모든 호스트를 책임진다고 가정

  • 과정
    1. 중간 DNS 서버 dns.umass.edu가 cs.umass.edu로 끝나는 호스트에 대한 질의를 받음
    2. dns.cs.umass.edu의 IP 주소를 dns.nyu.edu로 전달
      • dns.cs.umass.edu는 cs.mass.edu로 끝나는 모든 호스트에 대한 책임을 가짐

    3. 로컬 DNS 서버 dns.nyu.edu는 책임 DNS 서버에게 질의를 보냄
      • 책임 DNS 서버는 로컬 DNS 서버에게 원하는 매핑 결과를 돌려주는 역할

    4. 다음, 로컬 DNS 서버는 요청한 호스트에게 그 매핑 결과를 전달

  • 이 경우에는 전체 10번의 메시지를 보내게 된다.

 


재귀적 질의와 반복적 질의

  • TLD 서버가 호스트 이름에 대한 책임 서버를 알 때의 과정
    → 재귀적 질의와 반복적 질의를 사용한다.

    • 일반 질의의 전형적인 형식
      • 요청하는 호스트로부터 로컬 DNS 서버까지의 질의 → 재귀적 질의
      • 나머지 → 반복적 질의

  • 재귀적 질의(recursive query)
    • css.nyu.edu로부터 dns.nyu.edu로 보내는 질의는
      자신을 대신하여 필요한 매핑을 얻도록 dns.nyu.edu에게 요구

  • 반복적 질의(iterative query)
    • 모든 응답이 dns.nyu.edu에게 직접 보내진다.

  • 이론상, DNS 질의는 반복적이고 재귀적일 수 있다.
    • 모든 질의가 재귀적인 DNS 질의를 보여주는 예시

모든 질의가 재귀적으로 구성

 

 


DNS 캐싱(caching)

  • DNS는 지연 성능 향상과 네트워크의 DNS 메시지 수를 줄이기 위해 캐싱 사용

DNS 캐싱의 아이디어

  • 질의 사슬에서 DNS 서버가 DNS 응답을 받았을 때,
  • DNS 서버는 로컬 메모리에 응답에 대한 정보를 저장할 수 있다.
    • 예시
      • 로컬 DNS 서버 dns.nyu.edu가 임의의 DNS 서버로부터 응답을 받을 때
        → 응답에 포함된 정보를 저장할 수 있다.

        • 호스트 이름과 IP 주소 쌍 등이 정보로 저장됨
        • 이후, 다른 호스트 이름으로부터 같을 질의가 DNS 서버로 도착
          → DNS 서버는 호스트 이름에 대한 책임이 없어도, 원하는 IP 주소 제공 가능

    • 호스트 DNS와 IP 주소 사이의 매핑과 호스트는 영구적인 것이 아님
      → DNS 서버는 일정 기간 이후에 저장된 정보를 제거
      • 일반적으로 2일로 설정

  • 로컬 DNS 서버는 또한 TLD 서버의 IP 주소를 저장할 수 있다.
    → 로컬 DNS 서버가 질의 사슬에서 루트 DNS 서버를 우회하게 한다.
    • 이 동작은 자주 일어남