DNS란?
도메인 이름을 IP 주소로 변환하거나, IP 주소를 도메인 이름으로 변환하는 인터넷 서비스입니다.
간단하게 말하면 인터넷에서 사용하는 주소(jja2han.tistory.com)를 해당 도메인 이름에 대응하는 IP주소로 매핑해 주는 시스템입니다.
DNS가 왜 필요하나?
모든 서버는 IP주소를 가지고 있습니다. 따라서 DNS가 없다면 사용자들은 해당 서버에 접속하기 위해서는 IP주소를 외우고 입력해야합니다. IP주소는 숫자와 점의 조합으로 이루어진 주소이기에 , 굉장히 귀찮고 불편합니다.
(123.123.121.123.xxxx ) -> www.example.com
이러한 귀찮음과 불편함을 해결하기 위해서, DNS가 생겨났고, DNS를 통해서 IP주소를 영문 주소로 매핑해서 사용할 수 있게 됩니다.
DNS의 특징
- 계층화된 Distributed database를 사용한다.
- 유지보수가 쉽다.
- 한 서버가 고장나도, service가 중지되지 않는다.
- Application Layer protocol
DNS Service의 특징
- hostname을 IP 주소로 바꿔주는 서비스
- DNS의 가장 기본적인 서비스이다.
- Host aliasing
- 호스트 이름이 너무 길 경우, 줄여서 부를 수 있도록 매핑 정보를 제공할 수 있다.
- Mail server aliasing
- 사용자들이 쓰는 메일 주소를 실제 메일 서비스를 제공하는 서버와 매핑시켜 주는 기능을 제공할 수 있다.
- Load distribution
- 서버에 여러개의 IP 주소를 대응하게 해 줌으로 써 서버의 부담을 분단해 주는 기능을 제공할 수 있다.
- 예를 들어 사람들이 자주 이용하는 네이버 같은 경우는 서버의 주소를 여러개 사용한다.
- 이렇게 여러 개의 IP주소를 사용해서 네이버 서버의 부담을 분산해 줄 수 있다.
- 예를 들어 사람들이 자주 이용하는 네이버 같은 경우는 서버의 주소를 여러개 사용한다.
- 서버에 여러개의 IP 주소를 대응하게 해 줌으로 써 서버의 부담을 분단해 주는 기능을 제공할 수 있다.
DNS 구조
기본적으로 아래 그림과 같이 계층적인 구조를 가지고 있다.
담당을 잘게 잘게 쪼개서 부담을 줄여준다.
가장 최상위에 위치한 DNS 서버를 루트 네임 서버
그 바로 아래에 있는 DNS 서버를 TLD(Top Level Domain) 네임 서버라고 한다.
그리고 실제 IP 주소를 가지고 있는 DNS 서버를 Authoritative name server라고 한다.
실제 시나리오를 예를 들어서 구조를 살펴봅시다.
만약 고객이 www.amazon.com을 주소창에 입력하는 상황이다.
- 루트 서버가. com을 담당하는 TLD 서버를 찾아준다.
- TLD 네임 서버는 amazon.com을 담당하는 DNS 서버를 찾아주고
- 결국 사용자는 원하는 웹 사이트의 IP주소를 찾게 된다.
Local DNS 서버
- Local DNS 서버는 DNS 서비스를 이용할 때, 도와주는 역할을 한다.
- Local DNS 서버는 계층적이지 않습니다.
- ISP가 Local DNS 서버를 가지고 있다.
- 사용자가 DNS 쿼리를 날리면 local DNS 서버가 가장 먼저 받게 된다.
Iterated query
- 사용자가 특정 호스트의 이름의 IP 주소를 요청하는 쿼리를 날리면, Local DNS 서버가 먼저 받는다.
- Local DNS 서버는 루트 네임 서버에게 쿼리를 날리고, 루트 네임 서버는. edu에 해당하는 TLD를 알려준다.
- Local DNS 서버는 edu에 해당하는 TLD에게 쿼리를 날리고, TLD는 umass.edu에 대항하는 DNS 서버를 알려준다.
- Local DNS 서버는 umass.edu에 해당하는 DNS 서버에게 쿼리를 날리고, 해당 DNS 서버는 gaia.cs.umass.edu에 해당하는 IP 주소를 알려준다. 즉, umass.edu를 책임지는 DNS 서버가 authoritative name 서버인 것이다.
- 마지막으로 Local DNS 서버가 사용자에게 IP 주소를 전달한다.
요점 : 나는 이게 뭔지 모르지만 이것을 아는 사람을 알고 있다, 이 사람한테 물어봐라!
즉 물고기를 잡아주지 말고, 물고기를 잡는 방법을 가르쳐준다는 느낌..?
Recursive query
- 사용자가 특정 호스트 이름의 IP 주소를 요청하는 쿼리를 날리면, Local DNS 서버가 먼저 받는다.
- Local DNS 서버는 루트 네임 서버에게 쿼리를 날리고, 루트 네임 서버는. edu에 해당하는 TLD 서버에게 쿼리를 날린다.
- edu에 해당하는 TLD 서버는 umass.edu에 해당하는 DNS 서버에게 쿼리를 날린다.
- umass.edu에 해당하는 DNS 서버는 gaia.cs.umass.edu에 해당하는 IP 주소를 TLD 서버에게 알려준다.
즉, umass.edu를 책임지는 DNS 서버가 authoritiative name 서버인 것이다. - TLD 서버는 루트 네임 서버에게 IP 주소를 알려준다.
- 루트 네임 서버는 Local DNS 서버에게 IP 주소를 알려준다.
- 마지막으로 Local DNS 서버가 사용자에게 IP 주소를 전달한다.
Iterated query와는 다르게 직접적으로 답을 알려준다.
DNS Caching
- Local DNS 서버 이전에 사용했던 DNS 매핑 정보를 저장해 놓고, 같은 질의가 오면 빠르게 처리하는 방식이다.
- TTL(Time to Live) 개념을 사용하여, 특정기간 동안 사용되지 않으면 자동으로 삭제된다.
- TLD 네임 서버는 Local DNS 서버에 캐싱되어 있는 경우가 많으므로,
루트 네임 서버에게 TLD 네임 서버를 물어보지 않는 경우가 대다수이다. - 만약 서버 내의 데이터가 바뀌면, IETF 표준 프로토콜을 이용해서 알려준다.
- RFC 2136
DNS records
distributed Database는 아래와 같은 형식의 resource record를 저장한다.
RR format : (name, value, type, ttl)
type의 종류
type = A
- name = hostname
- value = IP address
type = NS
- name = domain ( foo.com)
- value = Authoritative Name Server
type = Cname(Canomial Name)
- 도메인 이름을 다른 도메인 이름으로 매핑한다.
- type=A 레코드가 있어야 설정이 가능함. (왜냐 실제 호스트 네임이 있어야 하기 때문에)
- name : 실제 이름
- value : 별칭
type = mx (Mail Exchange)
- 메일서버(사서함)에 도달할 수 있는 메일 서버를 제공한다
- value : mailserver의 이름
DNS protocol message
DNS query와 reply message는 아래와 같은 형태를 가진다.
DNS Header 요소
identifier
- 16bit로 구성됨.
- 클라이언트 측에서 보낸 요청과 응답을 일치시키는 데 사용됨.
Flags
- QR : query/ response
- 1bit
- 0 = request / 1 = response
opcode
- 4bit로 이루어짐 ( 0, 1, 2, 3, 4)
- 메시지에 의해 전달되는 쿼리 유형을 정의함.
AA : Authoritative Answer
- 0 : 권한 없는 응답
- 1 : 권한 있는 응답
RD (Recursion Desired)
- DNS query에서 사용됨.
- 1 : 쿼리를 recursive 하게 찾는다는 뜻.
- 즉 DNS 서버가 질의에 대한 응답을 찾을 때까지 여러 DNS 서버에게 순차적으로 질의를 보내고, 응답을 찾으면 클라이언트에게 돌려줌.
- 0이라면 DNS 서버가 응답을 찾지 못한다면 응답이 없음이라는 응답을 돌려보냄.
RA (Recursion Available)
- DNS reply에서 사용됨
- 1 : 서버가 recursive 하게 행동한다는 뜻.
- 즉 DNS 서버가 재귀적인 query를 처리할 수 있다는 뜻.
- 클라이언트가 RD를 요청하면, DNS 서버는 해당 query에 대한 응답을 찾을 때까지 RD를 수행하며 결과를 찾아 클라이언트에게 돌려줌.
- 0 : 클라이언트가 RD를 요청해도 서버가 RD를 처리할 수 없는 상태이므로,
"재귀적인 질의를 처리할 수 없음"이라는 응답을 돌려줌.
DNS의 body
Questions
- 주요 오소에는 Domain name , Type이 있다.
- Domain name에는 요청할 도메인의 이름이 있다.
- 일반적인 16진수 변환이 아니라 특별한 format이 있음.
- Type는 RR의 타입을 의미
- A, MX, Cname, NS가 있다.
- Domain name에는 요청할 도메인의 이름이 있다.
Answer
- DNS query에 대한 응답으로 반환되는 정보를 포함하는 부분이다.
- 예를 들어 클라이언트가 www.naver.com이라는 도메인 이름에 대한 IP 주소를 요청하면 DNS 서버가 이에 대한 정보를
Answer 영역에 포함하여 DNS 메시지를 응답으로 전송한다.
이 "Answer" 영역에는 클라이언트가 요청한 도메인 이름에 대응하는 실제 IP주소가 포함되어 있다. - 즉 Answer영역에는 클라이언트가 질의한 도메인 이름에 대한 실제 응답 데이터가 있다.
Authority
- DNS query에 대한 권한 정보를 포함하는 부분이다.
- 질의에 대한 권한 정보를 포함하며, 해당 도메인의 이름의 권한 있는 DNS 서버의 정보를 제공해서 신뢰성과 권한을 확인함.
- 즉 Authority 영역에는 요청한 도메인의 DNS 서버에 대한 권한 정보를 포함하고 있어, 클라이언트가 DNS 응답의 신뢰성을 검증하고
도메인 이름에 대한 권한 있는 DNS 서버를 확인할 수 있도록 도와준다.
Additional info
- 추가적인 정보를 포함하는 부분
- 다양한 정보가 포함될 수 있으며, 일반적으로 Answers 영역의 정보와 관련 있는 추가적인 정보들이 포함된다.
DNS register
- 도메인 이름 등록을 관리하는 기관이나 서비스를 가리키는 용어.
- 도메인을 등록하려면 DNS register를 통해서 등록해야 함.
😀요약
- DNS는 도메인 이름을 IP 주소로 변환해 주는 시스템이다.
- IP 주소는 점과 숫자로 구성되어 있고, 점과 숫자를 입력하는 과정은 불편하기에, 도메인 이름을 검색하면 IP주소로 매핑해 줌.
- DNS 서버는 계층적 구조를 가진다.
- 이유는 계층을 나눠서 부담을 덜어주기 위해서이다.
- Root -> TLD -> Authority name server
- DNS query를 처리하는 방법은 2가지이다.
- iterated query : 각 행선지마다 명확한 답을 주지는 못하지만 답을 구할 수 있는 방향을 가르쳐줌.
- recursive query : 끝까지 타고 들어가서 명확한 답을 줌.
- DNS에도 캐시가 있다.
- DNS 매핑 정보를 저장하고, 같은 질의가 온다면 빠르게 처리해 줌.
- TTL 개념을 사용하여 자주 사용하지 않는 정보는 캐시에서 삭제됨.
- DNS 매핑 정보를 저장하고, 같은 질의가 온다면 빠르게 처리해 줌.
- DNS는 데이터베이스에 RR형태로 저장을 함.
- RR = (naem, value, type, ttl)
- type에는 4가지 타입이 있다.(A, NS, CNAME, MX)
- DNS 메시지는 질의에 대한 응답으로 질의(Query), 응답(Answers), 권한부여(Authority) 세 부분으로 구성됨.
- Header에는 식별자와 flag가 있다.
'Computer Science > Network' 카테고리의 다른 글
[컴퓨터망] CDN & DASH (0) | 2023.04.12 |
---|---|
[컴퓨터망]- Peer-to-Peer(P2P) (0) | 2023.04.12 |
[컴퓨터망] - HTTP1.1/ HTTP2.0 / HTTP 3.0 (0) | 2023.04.11 |
[컴퓨터망] - 쿠키와 웹 캐시 (0) | 2023.04.11 |
[컴퓨터망] - Web and HTTP (0) | 2023.04.09 |