Domain name system(DNS)
사람들은 어떤 사이트에 접속 시 IP주소를 아는것이 아니라 네이버라면 네이버의 'www.naver.com'주소만을 알고있다.
하지만 실제 네트워크에서는 네이버를 찾을때는 IP주소를 이용해서 찾는다. 그래서 사람들이 사용하기 편한 이름으로 된 주소와 컴퓨터시스템이사용하기 편한 IP주소를 Mapping을 시켜주는 시스템이 필요하기하다. 이런 역할을 하는 시스템이 바로 DNS이다.
DNS의 서비스
- 도메인주소를 IP주소로 Mapping
- 도메인 주소를 다른 별명으로 된 도메인 주소로 Mapping
- 하나의 도메인 주소에 대해서 여러개의 IP주소로 Mapping
DNS의 구조
DNS는 많은 Name Server들이 계층적으로 나뉘어진 분산형 데이터베이스이다.
하나의 서버가 모든 도메인 이름에 대한 Mapping정보를 가지고 있지 않을까?
- 한개의 서버가 죽으면 끝이기 때문
- 옛날에 실제로 125대란이라는 서버가 끊기는 현상이 발생한 적이 있다.
- 하나의 서버에 Traffic이 너무 많이 몰리기 때문
- 멀리 있는 DNS서버에는 접속지연 시간이 발생하기 때문
- 중앙 서버가 존재한다면 유지 보수 측면에서 비효율적이기 때문
계층적 구조로 되어있는 DNS
Top-Level Domain name(TLD)
- ccTLD: 나라마다 부여해주는 도메인 이름 Ex)kr, jp, cn, uk....
- gTLD: 지역은 무관하고 네트워크 서비스, 상용적인 목적을 위해 부여한 도메인 이름 Ex)org, edu, net, com, info.....
각각의 TLD을 관리하는 기관에 아래에 어떤 도메인 이름이 오는 지 정할 수 있다.
그래서 실제로 IP주소를 어떠한 방법으로 가져오는 것일까?
만약 www.amazon.com의 실제 IP주소를 얻고 싶다고 가정해보자
1. Cilent는 Root Dns Server에게 Query를 통해 com Dns Server의 주소를 알아온다.
2. Cilent는 com Dns Server에게 Query를 통해 amazon.com Dns Server의 주소를 알아온다.
3. Cilent가 원하는 Amazon의 실제 IP주소를 Query를 통해 알아온다.
이러한 방법으로 제일 상위에 있는 TLD부터 점점 하위 Domain server로 내려오면서 실제 IP 주소를 알아낼 수 있는 구조이다.
계층적으로 상위 계층들은 하위 계층을 누가 관리하는지에 대한 정보만을 가지고 있는 분산형 시스템으로 되어있다.
근데 여기서 의문점이 생길 수 도 있다.
하나의 Dns서버에 몰리는 것을 막기 위해 분산형으로 서버를 구축해놓았지만, 모든 서버들이 실제 IP주소를 얻기 위해서는 Root Dns서버에 들릴 수 밖에 없는데 문제가 발생하지 않을까?
그래서 Root DNS Server가 많은 역할을 하기 때문에 각각의 Copy server들이 전 세계적으로 존재한다.
Authoritative DNS Server
도메인 주소에 대한 최종적인 IP주소를 Mapping 시켜주는 정보를 가지고 있는 Server
Local DNS Name Server
- DNS server와 같이 엄격하게 계층을 따르지 않는다.
- 각각의 ISP마다 한개씩 가지고 있다.
- Host가 Qeury를 보낼때 Local DNS server에게 보내고 서버로 부터 응답을 기다리는 것이 가장 큰 특징.*
1. 만약 local DNS 에게 Query를 보낸 후 도메인 주소에 해당하는 IP주소의 Mapping 정보가 Cache에 존재한다면 바로 Host에게 응답을 보낸다.
2. Cache가 존재하지 않는다면 계층적으로 root부터 원하는 IP주소를 얻는 과정을 진행한다.
Local DNS Server에게 먼저 Query를 보낸다고 하면 과연 어떤 과정을 거쳐 우리는 IP주소를 얻어낼 수 있을까?
Iterative Query
Host가 Local DNS server에게 Query보낸 후 Local DNS server가 직접 다른 DNS server에게 Query를 보내고 응답을 받아가는 과정을 반복적으로 진행하는 방법이다. 아래의 그림을 참고하면 된다.
만약 Host가 cis.poly.edu라는 도메인 주소의 IP주소를 알아내기 위해서는 맨 처음에는 local DNS server에게 Query를 보낸다. 그리고 Local DNS서버의 Cache에 Mapping정보가 있다면 바로 응답을 보내고 아니라면 Local DNS server가 root server로 부터 계층적으로 "너 이거 주소어디있는 줄 알어?" 라고 질의를 보내 받는 쪽의 서버는 "나? 아니 정확한 주소는 모르는데 하위계층서버에게 물어봐" 라는 Mapping 정보를 알아가면서 진행하게 된다.
주의사항으로는 Host가 반복적으로 Query를 보내 응답을 받는 것이 아니라 Local DNS server가 반복적으로 Query를 보낸 후 Mapping정보를 얻고 마지막에게 Host에게 응답을 보내준다는 것을 기억
Recursive Query
위에 방법같이 Local DNS server가 반복적으로 보내는 것이 아니라 재귀적으로 Query를 보내고 응답을 받는 방식이다.
Iterative Query와는 다르게 Host가 Local DNS Server에게 Query를 보낸 후 Local DNS의 Cache에 Mapping 정보가 없다면 Root Server로 Query를 보내고 Root server가 TLD DNS server에게 Query를 보내는 재귀적인 방법을 진행하면서 최종적인 IP주소를 얻는 방법이다.
근데 의문점이 생길 수 도 있을것이다. 왜 Local DNS server에게 첨부터 Query를 보내는 것일까?
- WebCache는 Update한 데이터가 존재하지 않는 경우가 존재할 수 있어 별도의 작은 패킷단위로 요청메시지를 보내야되지만 도메인 주소와 실제 IP주소의 Mapping은 바뀌는 경우가 거의 없기에 Caching을 진행하는데 더 유용하다고 볼 수 있다.
- Root server로 몰려서 Traffic이 증가하는 현상을 막기위해서 Local DNS Server에는 TLD 서버의 주소를 가지고 있기도 하고 원하는 도메인 주소와 바로 Mapping되는 IP주소를 가지고 있기도 하기 때문에 계층적으로 반복하거나 재귀적인 방법을 진행하지 않아도 바로 Local DNS Server로 부터 원하는 정보를 얻을 수 있기 때문이다.
우리가 일상생활에서는 아무것도 모르고 사용하고 있지만 정확하게 DNS가 무엇인지 어떻게 서비스를 제공하는지 이해하는 것이 중요하다.
'Network' 카테고리의 다른 글
컴퓨터네트워크_P2P application (0) | 2022.05.17 |
---|---|
컴퓨터네트워크_Cookie and Cache (0) | 2022.05.06 |
컴퓨터네트워크_Web, HTTP (0) | 2022.05.04 |
컴퓨터네트워크_Application layer (0) | 2022.05.04 |
컴퓨터네트워크_Protocol Layers (0) | 2022.05.02 |