본문 바로가기
공부/Network

[Network] DNS

by 웅대 2023. 3. 27.
728x90
반응형

웹 사이트들은 각자 자신만의 고유한 IP 주소를 가지고 있다.

 

IP 주소는 숫자로 이루어져 있기 때문에 사용자들에게는 IP 주소로 접속하는 것은 매우 불편할 것이다.

 

그래서 사용자의 편의를 위해 기억하기 쉬운 문자로 이루어진 것을 도메인이라고 한다.

 

예를 들어 네이버의 IP 주소는 125.209.222.141이지만 도메인은 www.naver.com  이다.

 

DNS(Domain Name System)

DNS는 사람이 읽기 쉬운 도메인을 IP 주소로 변환해주는 작업을 해준다.

 

일종의 도메인과 IP 주소가 묶여있는 전화번호부 같은 형태의 데이터를 저장하고 있다고 보면 된다.

 

DNS는 distributed database 형태로 많은 name server들이 계층을 이루고 있다.

 

DNS가 centralize 형태로 구성되어 있다면 위험하다.

 

한 곳이 망가지면 전체적으로 문제가 발생하고 많은 트래픽을 관리하기도 어려울 것이고 멀리 있는 클라이언트가 접근하기도 어려울 것이다.

 

다음 그림을 보면 이해가 쉬울 것이다.

만약 naver.com에 접속하려고 한다면 다음과 같은 과정을 진행한다.

  1. 루트 서버에게 com DNS server를 요청한다.
  2. com DNS 서버에게 naver.com DNS server를 요청한다.
  3. naver.com DNS 서버에게 www.naver.com의 IP 주소를 요청한다.

Root name server

root name server들은 멀리 있는 나라들의 딜레이를 줄이기 위해서 전세계적으로 13개가 존재한다.

 

또한 각각의 root name server들은 Anycast라는 방식을 사용하여 여러 개의 사이트를 가질 수 있다.

 

하나가 망가졌을 때 전체적으로 문제가 발생하는 일을 방지하기 위해서이다.

 

TLD (top level domain) server

TLD는 .com  .org  .kr 과 같이 도메인 네임의 가장 마지막 부분을 의미한다.

 

TLD 서버는 이 TLD와 관련된 서버이다.

Authoritative server

어떤 조직의 도메인 네임을 바탕으로 IP 주소를 알려주는 역할을 한다.

 

Local DNS name server

공식적인 DNS 계층에는 포함되어 있지 않다.

 

host들이 DNS query를 보낼 때 가장 먼저 접속하는 서버이고 최근에 사용한 name - IP 주소 쌍을 가지고 있어 일종의 캐시 역할을 한다.

 

DNS query를 보내는 과정은 크게 두 가지 방식이 존재한다.

 

1. iterated query

https://gaia.cs.umass.edu/kurose_ross/interactive/dns_query.php

iterated query는 local DNS server가 root DNS server에게 물어보고 받은 응답을 받으면 이 응답을 가지고 TLD DNS server에게 물어보고 받은 응답을 가지고 Authoritative DNS server에게 물어보고 받은 응답을 클라이언트에게 보내준다.

2. recursive query

https://gaia.cs.umass.edu/kurose_ross/interactive/dns_query.php

recursive query는 local DNS server가 root DNS server에 물어보면 root DNS server는 TLD DNS server에게 물어보고 TLD DNS server는 authoratative DNS server에게 물어보고 받은 응답을 다시 root DNS server에게 넘겨주고 root DNS server는 최종적으로 local DNS server에게 응답을 준다.

 

이름 그대로 재귀적인 방식이다.

 

단점으로는 요청이 계속 쌓이게 되면 딜레이가 발생할 수 있다.

 

캐시

모든 DNS server는 캐시를 가질 수 있기 때문에 최근에 들어온 요청과 같은 요청이 들어오면 빠르게 응답할 수 있다.

 

TTL(time to live)이 지나면 time out으로 판단한다.

 

 

 

728x90
반응형

댓글