본문 바로가기
데이터 통신

[데이터 통신과 네트워킹] 응용층(DNS)

by IT 정복가 2022. 11. 9.
728x90

도메인 이름 시스템(DNS)

다른 응용 프로그램을 도와주기 위해 만들어짐

DNS의 목적

1. 사용자는 파일 전송 클라이언트에 호스트 이름을 전달

2. 파일 전송 클라이언트는 DNS 클라이언트에 호스트 이름을 전달

3. 각 컴퓨터는 부팅이 된 후 하나의 DNS 서버의 주소를 알고 있으며, DNS 클라이언트는 알고 있는 DNS 서버의 IP 주소를 이용하여 파일 전송 서버의 이름을 제공하는 질의와 함께 메시지를 DNS 서버로 송부

4. DNS 서버는 원하는 파일 전송 서버의 IP 주소로 응답

5. DNS 서버는 파일 전송 클라이언트에 IP 주소를 전달

6. 파일 전송 클라이언트는 파일 전송 서버에 접근하기 위해 수신된 IP 주소를 사용

이름 공간(Name Space)

유일한 이름을 대응시키는 이름 공간은 두 가지 방법으로 구성

1. 단층적 이름 공간(flat name space)

2. 계층적 이름 공간(hierarchical name space)

단층적 이름 공간
- 이름은 주소에 할당됨.
- 이름은 구조적이지 않은 문자의 연속
- 중앙에서 전체를 관리해야 하기 때문에 인터넷과 같은 거대한 시스템에서 사용할 수 없음.

계층적 이름 공간
- 각 이름은 여러 부분으로 나뉘어 만들어짐.
- 첫 번째 부분은 기관의 성격을 나타내고, 두 번째 부분은 기관의 이름, 세 번째 부분은 기관 내의 부서를 나타내는 식으로 구성
- 이 경우 이름 공간을 할당하고 관리하는 기관을 분산시킬 수 있음
- 중앙 기관(central authority)은 기관의 성격과 이름을 정의하는 이름의 일부분만을 할당하고, 이름의 나머지 부분을 할당하는 책임은 해당 기관에게 주어짐
- 각 기관은 그 이름에 접두사나 접미사를 붙여 호스트나 자원을 정의
- 한 기관 내의 관리자는 이름의 일부가 같더라도 전체 이름이 다르기 때문에 동일한 접두사나 접미사가 다른 기관 내에서 사용되었는지에 대해 걱정할 필요가 없음

예를 들어, 두 기관이 자신들의 컴퓨터 하나에 caesar라는 이름을 부여했다고 가정
- 첫 번째 기관은 중앙 기관으로부터 first.com이 주어지고, 두 번째 기관은 second.com의 이름이 주어짐
- 이 기관들이 각각 그들이 이미 받은 이름에 caesar라는 이름을 더하여 만든 결과인 ceasar.first.com와 ceasar.second com은 2개의 구별 가능한 이름이며, 개개 이름은 고유한 의미를 갖음

도메인 이름 공간

- 계층적 이름 공간을 갖기 위해서 도메인 이름 공간(domain name space)이 만들어짐

- 트리는 레벨 0(root)에서 레벨 127까지로 128 레벨만을 갖음

레이블

- 트리의 각 노드는 레이블(label)을 가지는데, 이것은 최대 63 문자로 구성되는 스트링

- 루트 레이블은 널 스트링(empty string)
- 다른 레이블을 가질 수 있도록 하여 도메인 이름의 유일성을 보장

도메인 네임과 레이블

도메인 이름

- 트리의 각 노드는 도메인 이름을 가짐

- 전체 도메인 이름(domain name)은 점(.)으로 구분되는 레이블의 연속
 
- 도메인 이름은 항상 노드에서 루트 방향으로 읽으며, 마지막 레이블은 루트의 레이블인 널(mull)임
 
- 널 스트링은 아무것도 없는 것을 말하므로 완전한 도메인 이름은 항상 점으로 끝나게 됨
- 만약 레이블이 널 스트링으로 끝나면 완전 도메인 이름(FQDN, fully qualified domain name)이라고 함
- 이름은 항상 널 레이블로 끝나야 하는데, 이것은 아무것도 없음을 의미하므로 레이블은 항상 점(.)으로 끝남
- 만약 레이블이 널 스트링으로 끝나지 않으면 이를 부분 도메인 이름(PQDN, partially qualified domain name)이라고 함
- PQDN은 노드로부터 시작하나 루트에 도달하지는 않고, 이는 해석한 이름이 클라이언트와 동일한 사이트에 속해 있을 때 사용
- 여기서 변환기(resolver)는 FQDN을 생성하기 위해 서픽스(suffix)라는 나머지 빠져 있는 부분을 제공

 

도메인

도메인은 도메인 이름 공간의 부분 트리(subtree)

도메인들


DNS 서버

루트 서버(root server)

- 전체 트리로 구성되는 영역의 서버

- 자신의 권한을 다른 서버들에게 위임하고 자신은 이러한 서버들에 대한 참조만을 유지

일차 및 이차 서버
일차 서버(primary server)
- 자신이 권한을 갖는 영역에 대한 파일을 저장한 서버
- 영역 파일에 대한 생성, 관리, 갱신에 대한 책임을 갖음

이차 서버(secondary server)
- 다른 서버(일차 또는 이차 서버)로부터 영역에 관한 완전한 정보를 받아서 로컬 디스크에 파일을 저장하는 서버
- 영역 파일을 생성하지도 않고 갱신하지도 않음
- 갱신이 필요하면 이는 반드시 일차 서버에서 수행된 후, 이차 서버로 갱신된 버전을 보내게 됨

인터넷에서 DNS

DNS는 서로 다른 플랫폼에서 사용될 수 있는 프로토콜

인터넷에서 도메인 이름 공간(트리)은 일반 도메인(generic domain), 국가 도메인(country domain), 역 도메인(inverse domain)이라고 하는 세 가지로 분류

(그러나 인터넷의 급속한 성장으로 인해 IP 주소를 부여할 때 호스트의 이름을 찾기 위해 사용될 수 있는 역 도메인을 추적하는 것은 매우 어려운 일이 되었고, 역 도메인은 지금 사용되지 않음)

 

일반 도메인

일반적인 특성에 따라 등록된 호스트를 정의

일반 도메인

 

국가 도메인

두 문자로 국가의 약자(예를 들어 us는 United States)를 표시

국가 도메인


변환

이름-주소 변환(name-address resolution) : 이름(domain name)을 주소(IP address)로 매핑 시키는 것

- DNS는 클라이언트-서버 응용으로 설계

- 주소를 이름으로, 혹은 이름을 주소로 매핑시키고자 하는 호스트는 변환기(resolver)라고 불리는 DNS 클라이언트를 호출
- 변환기는 매핑 요청(mapping request)을 보내기 위해 가장 가까운 DNS 서버에 접속하고, 만약 서버가 정보를 가지고 있다면 변환기를 충족시킴
- 그렇지 않으면, 서버는 변환기에게 다른 서버들을 알아보게 하거나 정보를 제공하도록 다른 서버에 요청
- 변환기가 매핑을 받으면 그것이 진짜 해답인지 오류인지 응답을 분석하며, 결국 요청했던 프로세스에게 결과를 전달

- 변환은 재귀 변환반복 변환이 있음

 

재귀 변환

 

반복 변환

- 자신이 직접 관리하지 않는 질의 요청이 있을 경우 질의에 응답 가능할 것으로 보이는 NS(이름 서버) 목록을 응답


캐싱

- 서버는 자신의 도메인에 있지 않은 이름에 대한 질의를 받을 때마다 서버 IP 주소에 대한 데이터베이스 검색을 하며, 이 검색 시간이 줄어들수록 효율성은 높아짐

- DNS는 이를 위해 캐싱(Caching)이라는 메커니즘을 사용
- 서버가 다른 서버에게 매핑 정보를 요청하고 응답을 수신하면, 이 정보를 클라이언트에게 전달하기 전에 캐시 메모리에 저장
- 서버는 응답에 ‘인증할 수 없다(unauthoritative)’라는 표시를 하여 보냄
- 만약 서버가 오랫동안 캐시 정보를 가지고 있다면 클라이언트에게 오래된 매핑 정보를 보낼 수도 있으며 이를 보완하기 위해,

1) 권한 있는 서버가 매핑 정보에다 수명(TTL, time-to-live)이라는 추가적인 정보를 제공 : 서버가 전달하는 매핑 정보가 수초 동안의 수명을 갖음

2) 서버가 캐시하고 있는 각 매핑에 대해 TTL 카운터를 갖도록 DNS가 요구하는 것 : 각각의 매핑마다 일정시간 동안만 존재하도록 함


DNS 메시지

호스트에 대한 정보 검색을 위해 질의와 응답의 두 가지 메시지를 사용

- DNS 질의 및 DNS 응답에 관련되어, 단일 기본 구조를 갖지만, 여러 용도로 전달

- DNS 메세지 용도 : 전체 DNS의 원활한 동작을 위한 주고받기, 복사 등
- 질의 : 도메인네임에 대한 상세 정보를 요청 (DNS 쿼리)
- 응답 : 질의에 대한 상세 정보의 응답 (DNS 응답)
- 영역 전달 : 영역과 관련된 자원 레코드 집합을 다른 네임 서버로 복사하는 것
- 통지 (notification)
- 동적 갱신 (dynamic update)
- 용도별로, DNS 클라이언트 및 서버 간에, 또는 DNS 서버들(네임서버) 간에, 전달됨

 

DNS 메시지 구분

- DNS 메세지는 크게, 질의메세지(Query) 또는 응답메세지(Response)로 구분

 

DNS 메시지 기본 포맷

 

- 5가지 영역으로 구분 가능 = (Header) + (질의, 응답, 책임, 부가정보)

질의 영역: 가변 길이
 
- 질의 영역은, 1 이상의 질의/문의 레코드들로 구성됨
1. 질의 메세지, 응답 메세지 모두에 존재할 수 있음
2. , 영역 내 자원 레코드 항목(TTL, 레코드 길이, 자원 데이터)들은, DNS 응답 메세지에 만 있고, DNS 질의 메세지에는 없음

응답, 책임, 부가정보 영역: 가변 길이

- DNS 응답 메세지에만 존재하는 영역들 임 : 가변 길이
1. 응답 영역 (DNS Answer Section)
2. 책임 영역 (Authority Section)
3. 부가정보 영역 (Additional Section)
- 포맷 형식이 공통됨 : 1 이상의 자원 레코드 (Resource Record)들로 구성
 


레지스트라(Registrar)

새로운 도메인에 대한 DNS 등록 방법

- 이것은 ICANN에 의해 공인된 영리 업체인 레지스트라(registrar)를 통해 진행
- 레지스트라는 요청된 도메인 이름이 유일한 이름인지를 검증한 뒤, 이를 DNS 데이터베이스에 입력(요금이 부과)
- 오늘날 수많은 레지스트라가 존재하며, 이들의 이름과 주소는 다음 사이트를 통해 제공

- 기관은 등록을 위해 서버의 IP 주소와 이름이 필요
- 예를 들어, 서버의 이름이 ws이고, IP 주소가 200,200,200.5인 wonderful이라고 명명된 새로운 영리 기관은 레지스트라 중의 한 곳에 다음과 같은 정보를 제공해야 함


DNS의 보안

공격자는 DNS 서버에 과도하게 많은 요구(Flood)를 하여 멈추게 하려고 시도할 수 있음 → 이런 유형의 공격은 서비스 거부 공격(denial-of-service attack)으로 준비를 통해 방지 가능

- DNS를 보호하기 위해 IETF는 전자서명(digital signature)이라는 보안 서비스를 사용하여 메시지 출처 인증 및 메시지 무결성을 제공하는 DNS 보안(DNSSEC, DNS security)이라는 기술을 고안
- 그러나 DNSSEC은 DNS 메시지의 기밀성을 제공하지 못함

- DNSSEC 사양에 서비스 거부 공격에 대한 특별한 보호도 없음

- 그러나 캐싱 시스템은 어느 정도의 공격에 대해 상위 수준의 서버를 보호

 

728x90