DNS (Domain Name System)
우리는 인터넷을 활용해 많은 자원을 획득하고 사용한다. 인터넷에 연결된 하나의 클라이언트를 host라고 부르며, 인터넷에서 자원을 획득하는 것은 하나의 host가 자원을 가진 다른 host에게 자원을 요청하고, 그에 맞는 응답으로 이루어진다. 이 경우 요청을 위한 주소가 필요한데 그러한 주소를 IP라고 부른다. IP는 종류도 다양하고(IPv4, IPv6), 일련의 숫자들과 영문의 조합으로 이루어져 있으며 사용자가 사용하기에 불편하고 직관적이지 못하다. 위의 문제와 같은 접근성의 불편함을 해소하기 위한 대표적인 예시로 핸드폰에 있는 전화번호부가 있다.계층 구조로 이루어진 전화번호를 쉽게 활용하고 사용할 수 있도록 우리는 전화번호부에 이름을 등록해 그 이름을 가지고 상대방과 연결하고 소통한다.
인터넷에서 전화번호부와 같은 역할을 하는 것이 DNS(Domain Name System)이다.
과거와 현재
Public and Private
host와 host의 연결은 미국 국방부에서 군사 목적으로 TCP/IP를 사용해 계층을 가진 폐쇄형 네트워크를 사용한 것이 인터넷통신의 시초이다. 그 이후 프로토콜의 표준화로 인해 비용이 절감하는 등의 이유로 지금의 공개형 인터넷이 생겼다. 공개형 인터넷에서 사용할 주소를 할당하는 작업을 초기에는 운영체제나 로컬에 저장되어 있는 hosts 파일에 IP를 등록하고, 덮어쓰는 방식으로 사용을 했었다. 하지만 인터넷 사용자수가 기하급수적으로 증가하면서 크기를 감당할 수 없게 되고, 지속적인 업데이트가 불가능 해졌기 때문에 지금의 DNS가 생겨났다.
DNS 작동 방식
계층을 나눠 계층에 맞는 서버에게 요청
DNS가 사용자가 알고 있는 요청 주소(www.naver.com)를 IP(192.1.1.30)로 변환하여 사용되기까지 계층 별로 다른 서버를 거치게 되는데, 서버에 요청하기 전에 로컬 DNS-server에 저장되어 있는 DNS table과 운영체제별로 저장되어 있는 hosts파일을 제일 먼저 확인한다. 그곳에 요청에 대한 정보가 없을 경우 Root-server(.)에게 www.naver.com.(주소에 맨 마지막에는 .이 생략되어 있음) 의 IP정보를 물어보는 요청 Query를 보낸다. 또 정보가 없을 경우 Root-server에서는 요청 주소의 최상위 계층(com)을 확인하고, 최상위 도메인 서버인 TLD-server(com)의 IP를 주소를 알려준다. 그 정보로 다시 로컬 DNS-server는 TLD-server에게 www.naver.com에 대해 묻는 요청을 보낸다. 만약 TLD-server에서도 정보가 없을 경우 TLD-server는 Authoritative-server(naver.com)의 주소를 알려준다. 로컬 DNS-server는 Authoritative-server(naver.com)에게 IP주소에 대한 정보를 요청하는 순차적인 정보탐색과정을 거치는데 이것을 'Recursive Query(재귀적쿼리)'라고 한다.
Authoritative-server(naver.com)는 primary-server와 secondary-server로 (master-slave)로 구성된다.
primary-server는 zone에서 관리하는 모든 레코드들의 최종버전을 관리한다.
secondary-server는 primary-server의 백업서버의 역할을 한다.
주기적으로 자동으로 데이터베이스를 업데이트해서 동기화를 진행하는데, 이런 동기화 작업을 위한 프로토콜을
DNS zone transfers protocol 이라고 한다.
DNS-server 들은 DNS-protocol을 사용하며, UDP로 동작한다.
(dns protocol : http://www.ktword.co.kr/test/view/view.php?m_temp1=2194)
DNS-server의 default port는 53번이다. (자료전송시엔 TCP 53번 port를 활용한다)
Root-server는 기지국(인터넷 통신사 ex. KT, SKT , LG 등등)을 뜻하고, 이미지에 나와 있는 Sub-server(sub-domain)는 Root-server(main-domain)의 하위 주소이며, 일반적으로 개발단계의 페이지 등을 구현하거나 cafe나 mail과 같은 하위카테고리를
분류할때 사용한다.
DNS 캐시처리
모든 서버에서 Cache 처리
DNS Cache는 운영체제에 종속되어 사용되는 캐싱시스템이고 우선 조회되며, 각각의 DNS-server 또한 Cache 처리를 지원한다.
windows의 경우 재귀적쿼리를 통해 얻은 주소들이 DNS Cache에 저장되고, hosts file에 있는 주소와 묶여서 함께 우선 조회된다.
DNS 주의사항
주소 변조 가능성
만약 캐시 된 DNS 주소가 바이러스, 네트워크 오류, 또 다른 이유들로 인해 변조 되서 해킹사이트의 주소로 매핑이 될 경우 해커들의 의도대로 사용자가 피해를 볼 수 있기 때문에 주기적으로 DNS Cache 값을 정리할 필요가 있다. 일반적으로 DNS Cache Table의 TTL(Time To Live)의 제한시간이 존재하고, 시간이 지나면 DNS 매핑 값을 초기화 한다. DNS Cache 정보를 확인하는 방법은 윈도우 기준 터미널에서 ipconfig/displaydns 입력하면 확인할 수 있다.
'개발 > 개발지식' 카테고리의 다른 글
Maven & Gradle (0) | 2023.07.06 |
---|---|
HTTP 특징 및 문제점 그리고 HTTP 2.0 특징 및 개선점 (0) | 2023.04.01 |
Cookie 보안 설정 및 사용 방법 (0) | 2023.03.28 |