도메인 이름 시스템(DNS)에 대해 논의한다
DNS는 다른 응용 프로그램을 지원하는 클라이언트/서버 응용 프로그램이다
DNS는 애플리케이션 계층의 호스트 이름을 네트워크 계층의 IP 주소에 매핑하는 데 사용된다
entity를 식별하기 위해 TCP/IP 프로토콜은 인터넷으로의 호스트 연결을 고유하게 식별하는 IP 주소를 사용한다
그러나 사람들은 숫자 주소 대신 이름을 사용하는 것을 선호한다
그래서 주소에 이름을 매핑하거나 이름에 주소를 매핑할 수 있는 시스템이 필요하다
명확하게 하기 위해 컴퓨터에 할당된 이름은 신중하게 선택해야 한다
즉, 주소가 고유하므로 이름이 고유해야 한다
각 주소를 고유한 이름으로 매핑하는 name space는 flat 또는 계층적 두 가지 방법으로 구성할 수 있다
Label
Domain Name
레이블이 null 문자열로 종료되면 FQDN(fully qualified domain name)이라고 합니다.
FQDN
전체를 나타낸다
부분을 나타낸다
도메인 name space에 포함된 정보를 저장해야 한다
하지만, 컴퓨터 한 대에 그렇게 많은 양의 정보를 저장하는 것은 매우 비효율적이고 신뢰할 수 없다
해결책은 DNS 서버라고 불리는 많은 컴퓨터들 사이에 정보를 분배하는 것이다.
첫 번째 단계에 따라 전체 공간을 여러 도메인으로 나눈다
즉, 루트를 독립시키고 서브트리들을 생성한다
이러한 방식으로 생성된 도메인은 매우 클 수 있으므로 DNS를 통해 도메인을 더 작은 도메인으로 분할할 수 있다
DNS
primary server
secondary server
primary 서버와 secondary서버는 둘 다 해당 서비스 영역에 대해 신뢰할 수 있다
secondary 서버를 하위 권한에 두는 것이 아니라 데이터에 대한 중복성을 만들어 한 서버가 고장 날 경우 다른 서버가 클라이언트를 계속 지원할 수 있도록 하는 역할
또한 서버는 특정 영역에 대한 primary 서버이고 다른 영역에 대한 secondary 서버일 수 있다
primary 서버는 디스크에서 모든 정보를 로드하고 secondary 서버는 primary 서버에서 모든 정보를 로드한다
secondary가 primary에서 정보를 다운로드할 때 zone transfer이라고 한다
DNS는 서로 다른 플랫폼에서 사용할 수 있는 프로토콜이다
인터넷에서 도메인 name space(트리)는 generic 도메인, country 도메인, inverse 도메인의 세 가지 다른 섹션으로 나뉜다
generic 도메인은 일반 동작에 따라 등록된 호스트를 정의한다
트리의 각 노드는 도메인 name space에 대한 index인 도메인을 정의한다
트리를 보면, 일반 도메인 섹션의 첫 번째 레벨은 14개의 가능한 레이블을 허용한다는 것을 알 수 있다
이러한 레이블은 표에 나열된 조직 유형을 나타낸다
이름을 주소에 매핑하거나 주소를 이름에 매핑하는 것을 name address resolution이라고 한다
클라이언트는 name 서버로부터 재귀 응답을 요청할 수 있다
즉, 서버가 최종 답변을 제공하기를 기대한다
서버가 도메인 네임에 권한이 있는 경우, 서버는 데이터베이스를 확인하고 응답한다
서버가 권한이 없는 경우, 서버는 요청을 다른 서버(일반적으로 상위 서버)로 보내고 응답을 기다린다
상위 항목이 권한이 있는 경우 응답하고, 그렇지 않은 경우 다른 서버로 쿼리를 전송한다
쿼리가 최종적으로 해결되면 응답은 요청 클라이언트에 도달할 때까지 되돌아간다
매핑을 반복적으로 수행할 수 있다
서버를 되돌아 가며 도메인 네임을 처리할 수 있는 서버를 찾을때 까지 반복해서 쿼리를 보낸다
서버가 처리할 수 있으면 IP주소로 쿼리에 응답한다
클라이언트가 동일한 쿼리를 여러 서버에 반복하므로 이 프로세스를 반복 프로세스라고 한다
DNS에는 쿼리 및 응답이라는 두 가지 유형의 메시지가 있다
쿼리 메시지는 헤더와 질문 레코드로 구성된다
응답 메시지는 헤더, 질문 레코드, 답변 레코드, 권한 있는 레코드 및 추가 레코드로 구성된다
쿼리 메시지와 응답 메시지 모두 헤더 형식이 동일하다
헤더는 12바이트이다
identification
flags
이전 섹션에서 보았듯이 DNS에는 두 가지 유형의 레코드가 사용된다
question record는 쿼리 및 응답 메시지의 question section에 사용
resource record는 응답 메시지의 응답, 권한 및 추가 정보 섹션에 사용
DNS는 UDP 또는 TCP를 사용할 수 있다
두 경우 모두 서버에서 사용되는 포트는 53이다
대부분의 UDP 패키지에는 512바이트 패킷 크기 제한이 있기 때문에 UDP는 응답 메시지의 크기가 512바이트보다 작을 때 사용된다
응답 메시지의 크기가 512바이트보다 크면 TCP가 사용된다
DNS에 새 도메인을 추가하는 것은 ICANN에 의해 인증된 registrar를 통해 수행된다 registrar는 요청된 도메인 이름이 고유한지 먼저 확인한 다음 DNS 데이터베이스에 입력한다
수수료가 부과된다
DNS가 설계되었을 때, 아무도 그렇게 많은 주소 변경이 있을 것이라고 예측하지 못했다
DNS에서 새 호스트 추가, 호스트 제거 또는 IP 주소 변경과 같은 변경 사항이 있는 경우 DNS 마스터 file을 변경해야 한다
DNS 마스터 file 동적으로 업데이트되어야 한다
따라서 동적 도메인 이름 시스템(DDNS)은 이러한 요구를 위해 나왔다
DNS는 인터넷 인프라에서 가장 중요한 시스템 중 하나이며 인터넷 사용자에게 중요한 서비스를 제공한다
웹 액세스 또는 전자 메일과 같은 응용 프로그램은 DNS의 올바른 작동에 크게 의존한다
DNS는 여러 가지 방법으로 공격될 수 있다
DNS를 보호하기 위해, IETF는 디지털 서명이라는 보안 서비스를 사용하여 메시지 원본 인증과 메시지 무결성을 제공하는 DNS 보안(DNSEC)이라는 기술을 만들었다