Network

[웹 브라우저의 동작] 3. DNS

ju_young 2021. 5. 15. 17:01
728x90

전체적인 흐름

  1. 브라우저 실행
  2. URL 입력
  3. 브라우저가 URL을 조사 후 리퀘스트 메시지 생성
  4. DNS 서버에 IP 주소 조사 신청
  5. OS에 웹 서버로 송신해주라고 의뢰
  6. 웹 서버 수신

이전의 "2. IP"글에서 리졸버 내부에서 어떻게 작동하는지 알아보았었다. 그 중에서 DNS 서버가 메시지를 받아서 답을 찾아가는 과정은 생략했었다. 그래서 이번에는 그 과정을 알아보겠다.

DNS

DNS 서버의 기본 동작

DNS 서버에서 받은 조회 메시지는 다음과 같은 세 가지 정보가 포함되어 있다.
 
(a) 이름
서버나 메일 배송 목적지(메일 주소에서 @ 뒷부분의 이름)와 같은 이름이다.
 
(b) 클래스
DNS의 구조를 고안했을 때 인터넷 이외에도 네트워크에서의 이용까지 검토하여 이것을 식별하기 위해 클래스라는 정보를 준비했다.그러나 지금은 인터넷 이외의 네트워크는 소멸되었으므로 클래스는 항상 인터넷을 나타네는 'IN'이라는 값이 된다.
 
(c) 타입
이름에 어떤 타임(종류)의 정보가 지원되는지를 나타낸다. 예를 들어 타입이 A이면 이름에 IP 주소가 지원되는 것을 나타내며, MX이면 이름에 메일 배송 목적지가 지원된다는 것을 나타낸다. (A = IP 주소, MX = 메일)
 
예를 들어서 이름 = www.kjy042386.co.kr, 클래스 = IN, 타입 = A이라고 되어있는 조회 메시지를 DNS 서버에 보내면 등록된 정보를 조회하여 "192.0.2.122"와 같은 IP 주소를 찾아낸다. 즉, DNS 서버에 등록되어있는 정보와 이름, 클래스, 타입 세 가지가 일치하는 것을 찾아 IP 주소를 클라이언트에 회답하는 것이다.
 
타입이 MX인 경우는 어떨까?? 예를 들어 joo@kjy042386.co.kr라는 메일 주소가 있다고 하자. 그러면 이름 정보에는 메일 배송 목적지(@ 뒤에 있는 이름)를 쓴다. 여기서는 kjy042386.co.kr를 쓰면 되겠다. 그러면 DNS 서버는 정보를 조회하여 "10 mail.kjy042386.co.kr"와 같이 메일 서버의 우선 순위(10)와 메일 서버의 이름(mail.kjy042386.co.kr)을 찾아낸다.
 
MX 타입은 어기서 끝이 아니다. 메일 서버의 이름(mail.kjy042386.co.kr)의 IP 주소도 찾아서 같이 클라이언트에 회답한다.
 
여기까지가 DNS 서버의 기본적인 동작이다.
 
글로 설명하면 이해가 잘 안될 수 있으니 표로 정리해보면 다음과 같다.
 

이름 클래스 타입 클라이언트에 회답하는 항목
www.kjy042386.co.kr IN A 192.0.2.122
kjy042386.co.kr IN MX 10 mail.kjy042386.co.kr
mail.kjy042386.co.kr IN A 192.0.2.124

 
그리고 여기서 1행의 정보를 "리소스 레코드"라고 부른다.
 

도메인의 계층

 
위에서 예시로 사용했었던 "www.kjy042386.co.kr"를 보면 www, kjy042386, co, kr들 각각을 도메인이라고 한다. 그리고 이것들은 kr 아래에 co, co 아래에 kjy042386, kjy042386 아래에 www로 계층화가 되어있다고 볼 수 있다.
 
그리고 DNS 서버에는 www.kjy042386.co.kr라는 도메인을 담당하는 DNS 서버를 kjy042386.co.kr라는 DNS 에 등록하고, kjy042386.co.kr의 DNS 서버는 그 상위의 DNS 서버인 co.kr에 등록, co.kr의 DNS 서버는 그 상위인 kr DNS 서버에 등록하는 식으로 되어있다.
 
이렇게 하면서 상위의 DNS 서버에 가면 하위의 DNS 서버의 IP 주소를 알 수 있고, 거기에서 조회 메시지를 보낼 수 있다. 그리고 위에서 설명한 최상위에 있는 kr 이라는 도메인을 최상위 도메인이라 부르는데 이 도메인 상위에 또 하나 도메인이 존재한다. 그것을 "루트 도메인"이라 한다.
 
루트 도메인의 DNS 서버에 할당된 IP 주소는 전 세계에 13개밖에 없고 좀처럼 변경되지 않으므로 이것을 각 DNS 서버에 등록하는 작업은 어렵지 않다.
 
원하는 DNS 서버를 찾기위해서는 우선 클라이언트의 가장 가까이에 있는 DNS 서버(클라이언트의 TCP/IP 설명 항목의 DNS 서버로 설정되어 있는 DNS 서버를 말하는데 보통 자동 설정으로 되어있다.)에 www.kjy042386.co.kr이라는 웹 서버에 관한 정보를 조회 요청을 한다. 하지만 가장 가까운 DNS 서버에는 www.kjy042386.co.kr라는 이름이 등록되어 있지 않다면 가장 가까운 DNS 서버에 등록되어있는 루트 도메인의 DNS 서버로 조회 메시지를 건네준다. 그러면 루트 도메인의 DNS 서버부터 차례대로 내려가면서 찾게되는 것이다.
 

DNS의 캐시 기능

 
위에서는 각 도메인에 한 대씩 DNS 서버가 존재하는 것으로 가정했지만 현실에서는 한대의 DNS 서버에 복수 도메인의 정보를 등록할 수 있다.
 
DNS 서버는 한 번 조사한 이름을 캐시에 기록할 수가 있다. 그렇기 때문에 이전에 조회했던 정보가 캐시에 있으면 그 정보를 회답하게 된다. 또한 그래서 최상위 루트 도메인에서부터 차례대로 따라가며 움직이지 않을 수도 있다.
 
조회한 이름이 도메인에 등록되어 있지 않은 경우에도 이름이 존재하지 않는다는 것까지 캐시에 기록할 수 있기 때문에 캐시 기능을 사용하여 빠르게 회답할 수 있게 된다.
 
여기서 주의할 점은 캐시에 기록되어있는 정보가 변경된다면 캐시 안에 기록된 정보는 올바른 정보가 아닐 수 있다. 따라서 DNS 서버에 등록하는 정보에는 유효기한을 설정하고, 캐시에 저장한 데이터의 유효 기간이 지나면 캐시에서 삭제한다.

728x90

'Network' 카테고리의 다른 글

HTTP 버전별 특징  (0) 2023.05.25
[웹 브라우저의 동작] 4. 프로토콜 스택  (0) 2021.05.16
[웹 브라우저의 동작] 2. IP  (0) 2021.05.14
[웹 브라우저의 동작] 1. HTTP  (0) 2021.05.12
HTTP 상태 코드  (0) 2021.05.05