DNS 서버의 기본 동작
DNS 서버의 기본적인 동작은 클라이언트에서 조회 메시지를 받고 조회 내용에 응답하는 형태다. 조회 메시지는 다음과 같은 정보를 포함한다.
이름
서버나 메일 배송 목적지(메일 주소에서 @ 뒷부분의 이름)와 같은 이름이다
클래스
네트워크의 종류를 나타낸다. 현재는 인터넷 외의 네트워크가 소멸되었으므로 항상 인터넷을 나타내는 'IN'이 값이 된다.
타입
이름에 어떤 타입의 정보가 지원되는 지를 나타낸다. 타입에 따라 클라이언트에 응답하는 정보의 내용이 달라진다. 대표적인 타입과 용도는 다음과 같다.
타입 | 용도 |
A | IP 주소 조회 |
MX | 메일 배송 목적지 조회 |
PTR | IP 주소에서 이름 조사할 때 |
CNAME | 이름에 닉네임(alias)을 붙일 때 |
NS | DNS 서버의 IP 등록 |
SOA | 도메인 자체의 속성 정보 |
DNS 서버에는 위의 3가지 정보에 대응해 클라이언트에게 응답해야 하는 값을 등록해 두었다. 클라이언트에서 조회 메시지 요청이 오면 해당하는 것을 찾아 클라이언트에게 회답한다. 여기서 해당하는 것은 이름, 클래스, 타입이 모두 일치하는 것을 의미한다.
DNS에 이름, 클래스, 타입, 클라이언트에 회답할 항목은 설정 파일 등에 입력되 있다. 다음 표에서 한 행에 해당하는 것이 리소스 레코드이다.
이름 | 클래스 | 타입 | 클라이언트에 회답하는 항목 |
www.example.com | IN | A | 192.0.0.6 |
email.co.kr | IN | MX | 10(우선순위) mail.email.co.kr(우선순위 메일 서버의 이름), 메일 배송 목적지는 복수의 메일 서버가 등록되 있을 때 어느 메일 서버를 우선 선택해야 하는지를 판단하기 위한 값이다. 작은 값을 우선적으로 선택한다. |
... | ... | ... | ... |
도메인의 계층
위에서 언급한 방식은 조회 메시지를 받은 DNS 서버에 IP가 등록되 있는 경우의 작동 방식이다. 하지만, 인터넷에는 많은 수의 서버가 존재하기 때문에 이들을 한 대의 DNS 서버에 등록할 수 없다. 따라서 조회 메시지를 받은 DNS 서버에 정보가 등록되 있지 않은 경우가 발생한다. 이 경우 다음과 같이 DNS 서버가 동작한다.
DNS 서버에 등록한 정보에는 도메인명 이라는 계층적 구조를 가진 이름이 붙어져 있다. 이 도메인 정보를 서버에 등록하는 데, 한 개의 도메인 정보를 일괄적으로 DNS 서버에 등록한다. 이 때, 도메인 한 개의 정보를 분할해 복수의 DNS 서버에 등록하는 것은 불가능하다. 반대로, 한 대의 DNS 서버에 복수 도메인을 등록할 수는 있다.
한 대의 DNS 서버에 도메인 한 개를 등록한다 해보자. 회사 도메인의 경우 사업부마다 DNS 서버를 두고 사업부마다 따로 도메인에 정보를 등록하는 경우가 있다. 이 때, 서브 도메인을 만들고 각 사업부에 할당할 수 있다. 예를 들어, 회사 도메인이 example.co.kr이라면 서브 도메인은 sub.example.co.kr이다.
인터넷의 도메인도 위와 같이 서브 도메인을 만든 것이다. 예를 들어 www.cyber.co.kr의 kr은 대한민국에 할당된 도메인며 co는 국내의 도메인을 분류하기 위해 설치된 도메인이다.
담당 DNS 서버를 찾아 IP 주소를 가져온다
인터넷에는 수만 대의 DNS 서버가 존재하므로 효율적인 탐색을 위해 다음과 같은 방식을 사용한다. 먼저 하위의 도메인을 담당하는 DNS 서버의 IP를 상위 DNS 서버에 등록한다. 이 상위 DNS 서버의 IP를 다시 상위 DNS 서버에 등록한다. 이런식으로 하면 상위 DNS 서버로 부터 하위 DNS 서버위 IP를 알 수 있고 거기에서 조회 메시지를 보낼 수 있다.
도메인의 구조를 보면 com이나 kr 같은 top-level domain 뒤에 '.'이 하나 더 들어간다. 이 도메인을 루트 도메인이라 한다. 즉, 통상적으로 도메인을 www.exmpale.com 처럼 표기하지만 사실 www.example.com.인 것이다. 루트 도메인의 DNS 서버에 할당된 IP는 점 세계에 13개만 존재하고 변경되지 않으므로 이를 각 DNS 서버에 등록하는 작업은 어렵지 않다. 루트 도메인의 DNS 서버는 복수의 서버가 1대의 서버처럼 운영되고 있기 때문에 IP는 13개지만 실제로는 다수의 서버 기계가 존재한다. 이럼 루트 도메인의 DNS 서버 정보는 DNS 서버 소프트웨어와 함께 설정 파일로 배포되 있다. 이를 설치하면 자동으로 등록된다.
이제 DNS 서버가 원하는 DNS 서버를 찾고 최종 IP를 찾는 과정을 살펴보자.
위 과정에서 1과 10에 해당하는 과정은 아래 과정에서 각각 5, 6에 해당한다. 따라서 아래의 과정과 위의 과정을 조합해 보면 사용자가 url을 입력한 뒤 부터 url의 도메인에 매핑된 IP를 통해 엑세스하는 전체 과정을 알 수 있다.
DNS 서버는 캐시 기능으로 빠르게 회답할 수 있다
위 그림은 DNS 서버의 기본이 되는 동작을 나타낸 것이다. 현실 인터넷과는 다른 부분이 발생할 수 있다. 우선 한 대의 DNS 서버에 여러 도메인 정보를 등록할 수 있으므로 각 도메인에 한 대씩 DNS 서버가 존재한다고 단정할 수 없다. 또 한, 상위 도메인과 하위 도메인이 같은 DNS 서버에 등록되 있는 경우도 존재한다. 이 때는 같이 등록된 하위 도메인의 DNS 서버 조회 단계를 건너뛴다.
DNS 서버는 한 번 조사한 이름을 캐시에 기록할 수 있다. 따라서 IP를 조회하기 위해 루트부터 찾는다는 보장을 할 수 없다. 조회한 이름이 도메인에 등록되 있지 않은 경우 역시 캐싱할 수 있다. 이를 통해 존재하지 않는 경우를 빠르게 응답할 수 있다.
DNS의 캐시 역시 다른 캐시와 같이 데이터 유효 기간을 설정한다. 이를 통해 데이터 원본 변경으로 인한 캐싱된 데이터 불일치를 해결한다. 조회에 대한 응답에서 해당 정보가 캐시로부터 온것인지, DNS 서버로 부터 온것인지를 알 수 있다.
출처 - 성공화 실패를 결정하는 1%의 네트워크 원리
'도서 > 성공과 실패를 결정하는 1%의 네트워크 원리' 카테고리의 다른 글
Chapter 2. Story 2. 서버에 접속한다 (0) | 2022.07.31 |
---|---|
Chapter2. Story 1. 소켓을 작성한다. (0) | 2022.07.24 |
Story 4. 프로토콜 스택에 메시지 송신을 의뢰한다. (0) | 2022.07.13 |
Story 02. 웹 서버의 IP 주소를 DNS 서버에 조회한다 (0) | 2022.06.30 |
Story 01. HTTP 리퀘스트 메시지를 작성한다. (0) | 2022.06.29 |