DNS(Domain Name System)
- 도메인 이름: 체계적으로 문자로 표현한 호스트 이름
- 도메인 이름을 IP 주소로 변환
IP 주소 체계
DNS 필요성
- 도메인 이름: 문자형으로 표기되는 호스트 이름(일반 사용자가 선호)
- IP 주소: IP 프로토콜에서 호스트 구분을 위하여 반드시 필요
- DNS: 도메인 이름을 이용하여 IP주소로 변환하는 서비스
/etc/hosts 파일
- 인터넷 초기에 수작업으로 관리
- 파일의 내용은 (도메인 이름, IP 주소)의 쌍으로 구성
- 인터넷 보급이 확산되면서 DNS를 이용하여 자동으로 처리
DNS
- 계층구조의 도메인 기반 주소 표기 방법을 위한 분산 데이터베이스 시스템
- 도메인 이름에서 IP 주소를 얻음
해석기
- IP 주소를 원하는 응용 프로그램은 도메인 이름을 매개변수로 해석기 호출함
- UDP를 이용해 DNS 네임 서버에 변환을 요청하여 호스트의 IP주소를 얻음
nslookup 명령
- DNS를 이용해 주소 변환 요구를 수행하는 대화형 프로그램
DNS: 도메인 네임 스페이스, 네임서버, 해석기로 구성
- 도메인 네임 스페이스
- 트리 구조의 네임 스페이스를 비롯해 데이터에 대한 이름 관련 규칙 정의
- 트리에 연결된 호스트는 자원 레코드로 표현
- 자원 레코드: 네임서버과 관리하는 (호스트 이름:IP)에 대한 정보를 표현하는 자료구조
- DNS 서비스는 자원 레코드의 특정 유형 정보를 얻는 과정
네임 서버
- 도메인 트리 구조와 트리에 보관된 자원 레코드를 관리하는 프로그램
- 여러 네임 서버가 구역을 분할해 전체 도메인을 관리함
해석기
- 클라이언트의 요청을 받아 네임서버로부터 정보를 얻어냄
- 하나 이상의 네임서버와 접촉
도메인 네임 스페이스
- DNS가 저장, 관리하는 계층적 데이터베이스
- 최상위에 루트가 존재, 그 아래로 모든 호스트가 트리 구조로 이어짐
- 레이블: 호스트의 이름
- 도메인 이름: 점으로 구분한 호스트 레이블의 연속
도메인 네임 스페이스의 구조
- 계층적인 트리 구조를 지원
- 도메인 이름
- 최하위 호스트의 레이블을 맨 왼쪽에 두고, 상위 노드로 이동하면서 점으로 구분한 레이블 이름을 연속으로 붙임
- TLD(Top Level Domain)
- 도메인
- 도메인 네임 스페이스에서 하부 트리 전체를 의미
- 해당 도메인의 명칭은 하부 트리의 맨 상위에 위치한 호스트의 도메인 이름
- 최상위 도메인의 분류
- net: 네트워크 관련 기관
- com: 상업적 기관
- biz: 비즈니스 목적 회사
- info: 정보 서비스 제공자
- coop: 협동조합
- pro: 전문가 관련 기관
- areo: 항공 관련 기관
- int: 국제 기관
- edu: 교육 기관
- org: 비영리 기관
- museum: 박물관
- gov: 미국 연방정부 기관
- mil: 미국 국방성
- name: 개인
- 도메인 이름
- 하위 호스트의 레이블부터 루트에 이르는 경로에 위치한 모든 호스트의 레이블을 점으로 연결한 것
계층 구조의 네임 서버
- 각 네임서버는 자신의 하부에 위치한 호스트 정보만 관리
- 이웃하는 네임 서버끼지 정보가 필요할 때는 상위 네임 서버의 중개 필요
도메인 영역
- 존: 임의의 네임서버가 관리하는 영역
- 네임 서버 아래 하부 도메인이 없을 때, 도메인 영역과 존이 같다.
- 존에 한 개 이상의 네임 서버가 있고, 네임 서버는 데이터베이스를 관리한다.
자원 레코드
- DNS 네임 서버가 해석기에 반환하는 데이터 형식
- 레코드 유형에 따라 여러 가지가 있다.
- ex) A recode: (호스트 이름:IP주소)
질의 레코드
- DNS 클라이언트가 DNS 서버에 정보를 요청하는 방식
자원 레코드 필드
- Name: 찾고자 하는 가변 길이의 도메인 이름
- Type: 16비트 크기로 자원의 종류
- Class: 프로토콜 패밀리
- TTL: 자원 레코드가 만기까지의 유효 시간을 나타냄
- RD Length: 자원 데이터의 길이를 바이트 단위로 나타냄
- RD: 자원 레코드와 관계된 데이터가 기록
질의 레코드 필드
자원 레코드의 유형
- A(Address): 호스트의 IP 주소를 의미, 도메인 이름을 IP 주소로 변환하는데 사용
- NS(Name Server): 도메인을 관정하는 인증된 네임서버
- CNAME(Canonical Name): 별명이 있는 호스트의 정식 이름
- SOA: 존의 시작
- WKS: 호스트가 제공하는 네트워크 서비스를 정의한다.
- PTR: 도메인 이름을 가리키는 포인터, IP 주소를 도메인 이름으로 변환하는데 사용
- HINFO: 호스트 정보, 호스트가 사용하는 하드웨어와 운영체제에 관한 정보 제공
네임 서버와 해석기
DNS 서비스 과정
- 분산 네트워크 서비스 형태
- 인터넷에서 여러 네임 서버가 유기적으로 동작
해석기
- 도메인 이름과 호스트 주소 정보를 원하는 응용 프로그램은 해석기에게 요청
- 해석기는 DNS 서버와 접촉하는 DNS 클라이언트 역할을 수행
인증 데이터
- 네임 서버가 하나면 이 서버가 DNS에 관한 모든 정보를 관리
- 네임 서버의 부담을 줄이기 위하여 캐시 정보 활용
- 인증 데이터: 해당 데이터를 직접 관리할 책임이 있는 네임 서버로 부터 받은 정보
- 캐시 데이터: 이전 요청에 의하여 호스트가 보관하던 정보
- 캐시 데이터를 오래 보관하면 클라이언트에 다른 정보를 전달할 염려가 있음
- 해당 정보의 인증 서버가 TTL이라는 정보를 제공하여 초과된 정보는 자동으로 무효 처리하고 인증 서버에 다시 정보를 요청해서 캐시 데이터 갱신
존
- 존은 자원 레코드에 포함된 인증 데이터의 집합체로 정의됨
- 포함하는 영역
- 존에 포함된 최상위 호스트(ex: mit.edu)
- 존에 속하는 모든 호스트의 전체 자원 레코드 집합체(ex: lcs.mit.edu, archiles.mit.edu, ...)
- 위임 서브 존: 자신의 존에 속하지만 인증이 위임된 경우
- info.mit.edu의 name server 자체는 info.mit.edu 안에 있을 수 있다.
글루 데이터
- 위임된 서브 존의 네임 서버에 접근할 수 있도록 해주는 권한
- ex) dns.mit.edu가 info.mit.edu에 대한 DNS 정보를 액세스 할 수 있는 권한
- ex) test.info.mit.edu의 호스트 정보를 얻고자 하는 경우
- mit.edu에 대한 정보를 구한다.
- info.mit.edu를 관리하는 네임 서버의 IP주소를 알면 간단히 처리
- info.mit.edu의 네임 서버가 서브존 도메인 내부에 위치하여 IP 주소를 얻기 곤란한 경우에 글루 데이터가 필요
요청의 처리
-
질의 요청
-
질의 요청에 포함되는 사항
- 인증 데이터 필요 여부
- 필요하면 상위 계층에 질의
- 필요 없으면 캐시 사용 가능
- 질의 처리 방법 = {Recursive|Iterative}
- recursive: 해석기가 최초로 접속을 시도한 네임 서버가 질의 요청을 추적, 관리
- iterative: 요청을 받은 네임서버가 다른 네임서버의 포인터 정보 회신
재귀적 처리
-
해석기가 최초로 접속을 시도한 네임 서버가 질의 요청을 추적 관리
-
재귀적 요청을 받은 네임서버가 결과적으로 해석기 역할 수행
반복적 처리
-
로컬 네임 서버 1이 여러 네임서버와 직접 접촉
DNS 프로토콜
Name Server
- DNS host 역할: DNS 요청에 응답
- DNS Client 역할: 해석기를 거쳐 다른 DNS 서버에게 정보 요청
- 캐시 활용
DNS 메시지
- DNS 데이터를 요청하거나, 응답할 때 DNS 메시지를 전송
DNS 메시지 구조
- Header: 12byte, 다른 필드의 사용 여부 확인
- Question: 질의 레코드가 하나 이상, 질의 메시지와 응답 메시지 모두에서 사용
- Answer: 응답 메시지에서만 사용
- Authority: 응답 메시지에서만 사용, 질의의 인증 권한이 있는 서버 정보 제공
- Additional: 응답 메시지로 사용, 해석기에 필요한 추가 정보를 제공
DNS 헤더
- Identification: 요청과 응답이 연관 관계를 표시
- QR: 질의 메시지, 응답 메시지 구분
- OPCODE: 질의나 응답의 종류
- AA: 인증 권한이 있는 네임 서버
- TC: UDP 최대 크기 초과 여부
- RD: 재귀적 응답
- RA: 반복 응답 가능 여부
- Z: 예약 필드
- RCODE: 응답 오류
- QUCOUNT: DNS 메시지의 Question 필드에 있는 질의 요청 개수
- ANCOUNT: 응답용 DNS 메시지에서 Answer 레코드의 개수
- AUCOUNT: 응답용 DNS 메시지에서 Authority 레코드의 개수
- ARCOUNT: 응답용 DNS 메시지에서 Additional 레코드의 개수
UDP의 제한
- 기본
- DNS 메시지가 512바이트 이하일 때
- 해석기와 네임 서버는 UDP 53번 포트로 DNS 메시지 전송
- DNS 메시지가 512바이트 보다 크면 TCP 사용
- TCP 53번 포트 사용
- 미리 512바이트보다 크다는 것을 인지하면 처음부터 TCP 사용
- 사전에 인지하지 못하는 경우는 UDP로 전송하고, 응답 메시지에서 TC=1로 지정하여 TCP 연결
DNS 프로토콜 동작과정
- DNS 서버와 클라이언트가 메시지를 주고받는 사례
- 질의 메시지
- ex) www.korea.co.kr라는 호스트의 IP 주소 찾기
- Header Identification: UDP의 비순서적 전송 방식을 보완하려고 사용
- 플래그 값 0x0100
- QR=0은 질의 메시지, OPcode=0은 표준 질의, RD=1은 재귀적 응답
- 응답 메시지
- Header
- Identification: 질의 메시지와 같다
- 플래그 값 0x08180: QR=1(응답 메시지), OPCode=0(표준 질의), RD=1 (재귀적 질의), RA=1(반복 응답 가능)