1. DNS 정의
DNS란?
쉽게 이야기하여 인터넷 주소를 이름으로 바꾸어주는 시스템을 말한다.
DNS 필요성
TCP/IP 프로토콜은 개체를 구분하기 위해서 인터넷에서 호스트 연결을 유일하게 식별하는 IP를 사용한다.
하지만 사람들은 주소보다는 이름으로 사용하고자하는 경향이 나타나기 시작하면서 주소를 이름으로 바꾸어주는 시스템이 필요해졌다. 인터넷 규모가 작을때는 호스트 파일(host file)을 사용하여 맵핑이 가능했으나 오늘날에 와서는 규모가 커짐으로써 방대한 역할을 수행하기에는 한계가 있다.
2. 네임서버
도메인은 도메인 네임 공간의 서브트리이다. 도메인 네임은 서브트리의 맨 상위에 있는 노드에 위치한다.
www . google . com .
3차 도메인 2차 도메인 1차 도메인 Root 도메인
영역 (zone)
전체 네임 계층을 하나의 서버에 저장할 수 없기떄문에 여러 서버에 나누어 저장하게 되는데 서버가 책임을 지거나 권한을 가지는 영역을 말한다. 서버는 영역파일 (zone file) 이라는 데이터베이스를 가지며 그 도메인 내의 모든 노드 정보를 여기에 보관한다.
루트 서버
전체 트리를 영역으로 가지는 서버이다. 도메인에 대한 어떤 정보도 가지지 않으며 자신의 권한을 다른 서버에게 이양하고 이러한 서버들에 대하여 참조하는 역할만 수행한다.
(몇 개의 루트 서버가 있으며 각각의 전체네임 공간을 다루고 있다. 서버들은 전세계에 분산되어 있다.)
3. 해석기
해석기 (resolver)
- DNS는 클라이언트/서버 응용으로 설계되었다. 주소를 이름, 혹은 이름을 주소로 매핑하기 원하는 호스트는 해석기라고 불리는 DNS 클라이언트를 호출한다.
- 해석기는 매핑요구를 보내기 위해 가장 가까운 DNS 서버에 접속한다. 만약 서버가 정보를 가지고 있으면 해석기에 대한 응답을 줄 수 있으나, 그렇지 않으며 해석기가 다른 서버를 참조하게 하거나 다른 서버가 이 정보를 제공하도록 요구한다.
- 해석기가 매핑 결과를 수신한 후 제대로 온 것인지 오류가 난 것인지 해석한 다음 최종적으로 그 결과를 요청한 프로세스에 전달한다.
귀환적 해석 (recursive)
- 클라이언트(해석기)는 네임 서버에 귀환적인 응답을 요청할 수 있다.
- 서버가 도메인 네임에 대한 권한을 가진다면 데이터베이스를 찾아본 뒤 응답을 한다. 만약 서버가 권한이 없다면 다른 서버(주로 부모 서버)에게 요청을 하고 응답을 대기한다.
반복적 해석 (iterative)
- 만약 클라이언트가 귀환적 해석을 요청하지 않으면 요청은 반복적으로 진행한다. 서버가 이름에 대한 권한을 가진다면 응답을 보내지만 그렇지 않다면 이 질의에 대한 해석 가능한 서버의 IP 주소를 되돌려준다.
- 이 과정을 반복적이라고 하는데 클라이언트가 다수의 서버에게 같은 질의를 하기 떄문이다.
캐싱 (caching)
- 서버는 자신의 도메인에 있지 않은 이름에 대한 요청이 올때마다 서버 IP주소에 대한 데이터베이스 검색을 요구한다. 시간을 감소시켜 효율을 증가하기 위하여 DNS는 이를 위해 캐싱이라는 절차를 이용하여 캐시 메모리 저장한다
- 캐싱은 주소 해석 속도를 높일 수 있지만 문제점도 가지고 있다. 만약 서버가 오랫동안 캐싱 정보를 가지고 있다면 클라이언트에게 잘못된 매핑 정보를 보낼 수 있다.
- 대부분의 DNS 서버는 네임 분석과정에서 도움이 되는 정보를 저장하는 것뿐만 아니라 "네거티브 캐싱" 기능도 지원한다.
웹 개발을 하다보면 사이트 접속이 안되면 ipconfig /flushdns 입력하고하면 잘되는 경우가 있다.
좋은 개발자가 되기 위해서는 이 명령어를 왜 사용해야하는지 알아야한다.
"아~ 윈도우 OS 같은 경우 DNS 캐시는 OS 내부 DNS 테이블에 저장시키며 삭제해줘야하는구나~~!!"라고 말이다.
캐시는 윈도우 같은 경우 OS에 저장을 한다.
예를 들어 ipconfig /displaydns 를 입력하면 저장된 캐시 정보를 알 수 있다.
C:\>ipconfig /displaydns
Windows IP 구성
safebrowsing.googleapis.com
----------------------------------------
데이터 이름 . . . . . : safebrowsing.googleapis.com
데이터 유형 . . . . . : 1
TTL(Time To Live) . : 108
데이터 길이 . . . . . : 4
섹션 . . . . . . . : 응답
(호스트) 레코드 . . . : 142.250.207.42
데이터 이름 . . . . . : ns1.google.com
데이터 유형 . . . . . : 1
TTL(Time To Live) . : 108
데이터 길이 . . . . . : 4
섹션 . . . . . . . : 추가
(호스트) 레코드 . . . : 216.239.32.10
...
이러한 캐시 정보를 지우기위하여 ipconfig /flushdns를 입력하여 삭제해준다.
삭제 후 확인해보면 로컬을 제외한 이전에 저장되어 있던 정보가 삭제된 것을 확인할 수 있다.
C:\>ipconfig /flushdns
Windows IP 구성
DNS 확인자 캐시를 플러시했습니다.
C:\>ipconfig /displaydns
Windows IP 구성
safebrowsing.googleapis.com
----------------------------------------
데이터 이름 . . . . . : safebrowsing.googleapis.com
데이터 유형 . . . . . : 1
TTL(Time To Live) . : 108
데이터 길이 . . . . . : 4
섹션 . . . . . . . : 응답
(호스트) 레코드 . . . : 142.250.207.42
데이터 이름 . . . . . : ns1.google.com
데이터 유형 . . . . . : 1
TTL(Time To Live) . : 108
데이터 길이 . . . . . : 4
섹션 . . . . . . . : 추가
(호스트) 레코드 . . . : 216.239.32.10
데이터 이름 . . . . . : ns2.google.com
데이터 유형 . . . . . : 1
TTL(Time To Live) . : 108
데이터 길이 . . . . . : 4
섹션 . . . . . . . : 추가
(호스트) 레코드 . . . : 216.239.34.10