안녕하세요. 이 글은 DNS가 무엇인지 공부한 내용을 정리했습니다.
1. 공부계기
AWS Route53, 쿠버네티스 coredns를 공부하면서, DNS 기초가 필요하다고 느꼈습니다.
2. DNS란?
DNS(Domain Name System)는 도메인 이름(Domain name, 이하 도메인)을 관리하는 시스템입니다. 그럼 도메인은 무엇일까요? 도메인은 IP에 매칭되는 문자열입니다. 예를 들어, "google.com"은 도메인의 예시입니다.
우리가 "google.com" 주소를 사용하여 구글 홈페이지에 접속할 수 있던 이유는 바로 DNS 덕분입니다. DNS는 도메인을 해당하는 IP로 변경해주기 때문에, 우리는 편리하게 인터넷에서 도메인을 이용할 수 있습니다.
3. DNS를 사용하는 이유
그런데 IP를 사용하지 않고 도메인을 왜 사용할까요? 구글 홈페이지에 접속하기 위해서는 IP를 사용해도 충분히 가능합니다.
사람들은 숫자로 된 IP보다 문자열인 도메인을 더 쉽게 기억합니다. 예를 들어, 구글 홈페이지에 접속하기 위해서 "142.250.76.142"와 같은 IP를 사용하는 것보다는 "google.com"을 사용하는 것이 훨씬 기억하기 쉽습니다.
4. 도메인 관리와 조회방법
4.1 도메인을 어떻게 관리하는지
도메인은 DNS 서버가 관리합니다. 전 세계에 분산되어 있는 DNS 서버들이 도메인 관리를 수행합니다. 자세한 내용은 [챕터 6]에서 자세히 설명하겠습니다.
4.2 도메인을 어떻게 조회하는지?
DNS 서버에 관리되고 있는 도메인은 리졸버(resolver)가 조회합니다. 리졸버는 운영체제에 기본적으로 설치되어 있으며, 리눅스 운영체제에서는 /etc/resolv.conf 파일을 사용하여 설정합니다.
사용자가 도메인을 이용하면, 리졸버는 DNS 서버에 질의하여 도메인 주소에 해당하는 IP 주소를 가져옵니다. 이 과정에서 사용되는 질의를 DNS 쿼리라고 합니다.
5. 도메인 구조
5.1 계층 구조로 되어 있는 도메인
도메인은 계층 구조로 구성되어 있습니다. 도메인을 뒤에서부터 "."으로 분리하면 계층 구조가 생성됩니다. 예를 들어, www.google.com을 계층 구조로 표현하면 아래 그림과 같습니다. "."가 가장 위에 있는 이유는 도메인 끝에는 보통 "."가 생략되어 있기 때문입니다.
5.2 계층을 나눈 이유
도메인을 계층으로 나눈 이유는 무엇일까요? 저는 두 가지 이유를 생각해봤습니다.
첫 번째 이유는 검색을 효율적으로 하기 위해서입니다. 계층은 컴퓨터 공학에서 트리 자료구조에 해당합니다. 트리는 검색 알고리즘 적합하여 도메인을 빠르고 정확하게 검색합니다.
두 번째 이유는 도메인 목적별로 DNS 서버를 분리하여 관리할 수 있습니다. 전 세계의 모든 도메인을 한 서버에서 관리하는 것은 매우 어렵습니다. 그러나 계층을 나누면 각 계층 또는 노드(트리 노드)에서 도메인을 분리하여 관리할 수 있습니다. 이렇게 분산된 관리는 효율적인 운영을 가능케 합니다.
6. 도메인 계층과 DNS서버
도메인이 계층 구조로 되어 있으므로 DNS 서버 또한 계층 구조로 되어 있습니다.
6.1 루트 DNS 서버
가장 상단에 위치한 도메인을 루트(root, ".") 도메인이라고 하며, 이를 관리하는 서버가 루트 DNS 서버입니다.
루트 DNS 서버는 ICANN이라는 기관에서 관리합니다. 루트 서버의 상태는 홈페이지(https://root-servers.org/)에서 확인할 수 있습니다.
6.2 TLD DNS 서버
TLD(Top-Level Domain)도메인은 루트 도메인 아래 계층이며 최상위 계층이라고 부릅니다. TLD 도메인은 마지막 점 뒤(루트)에 오는 도메인입니다. com, org, net 등이 TLD 도메인 예시입니다.
TLD 도메인을 관리하는 서버를 TLD DNS서버라고 합니다. TLD DNS 서버는 ICANN의 지사인 IANA(Internet Assigned Numbers Authority)가 관리합니다.
IANA는 TLD 서버를 두 가지로 구분합니다.
- 국가 코드 도메인: 국가에 관련된 도메인입니다. ".uk", ".kr" 등이 있습니다.
- 일반 도메인: 국가 코드에 속하지 않은 도메인입니다. ".com", "net" 등이 있습니다.
6.3 권한 있는 DNS 서버
권한 있는 DNS 서버는 도메인을 관리하는 서버입니다. 루트 DNS 서버와 TLD DNS 서버는 주로 도메인을 직접 관리하지 않지만, 어떤 도메인이 어떤 DNS 서버가 관리하고 있는지 알고 있습니다. 우리가 알고 있는 대부분의 도메인은 권한 있는 DNS 서버에 의해 관리됩니다.
7. 도메인 zone
DNS 서버가 관리하는 도메인 영역을 도메인 zone이라고 합니다.
도메인 계층과 헷갈리면 안 됩니다. 도메인 계층은 도메인을 구조화하기 위한 체계입니다. 도메인 zone은 DNS 서버가 특정 도메인을 관리하는 범위를 의미합니다.
예를 들어 www.google.com과 www.naver.com은 아래 그림처럼 계층 구조를 만들 수 있습니다. 각 계층마다 관리하는 DNS 서버가 존재합니다. 보통 도메인 계층과 도메인 zone을 일치시키지만 같지 않아도 됩니다.
8. 도메인을 IP로 변환하는 과정
도메인에 해당하는 IP를 찾는 과정을 이름 해석(Name Resolution)이라고 합니다. 클라이언트(웹 브라우저, 애플리케이션 등)에서 도메인을 사용하면, 운영체제에 설치된 리졸버(resolver)가 도메인에 해당하는 IP를 가져옵니다.
① 리졸버는 DNS 캐시에 요청한 도메인이 있다면 캐시에 있는 IP를 사용합니다. 캐시에 도메인이 없으면 DNS 서버에게 IP를 찾아달라고 질의합니다. 질의를 DNS쿼리라고 하며 DNS프로토콜을 사용합니다.
리졸버 설정과 DNS서버 설정, DNS 쿼리에 따라 동작 방식이 다릅니다. 저는 DNS 전문가가 아니여서 모두 공부하지 않고, 일반 개념만 공부했습니다.
② 리졸버는 캐시에 도메인이 없다면, 리졸버 설정 파일에 따라 DNS 서버에 질의합니다. 리눅스 운영체제의 경우 /etc/resolv.conf 파일이 해당 설정을 담당합니다. 만약 /etc/resolv.conf가 아래와 같은 설정이라면, 리졸버는 8.8.8.8 (구글 DNS 서버)에 질의합니다.
nameserver 8.8.8.8
③ DNS 서버는 요청을 받으면 루트 DNS 서버에 질의합니다. 루트 DNS 서버는 도메인을 분석하여 TLD DNS 서버 IP를 응답합니다.
④ DNS 서버는 루트 DNS 서버에 받은 TLD 서버 DNS에게 다시 질의합니다. TLD DNS 서버는 도메인을 분석하여 해당 도메인을 관리하는 권한 있는 DNS서버 IP를 응답합니다.
⑤ DNS 서버는 TLD DNS 서버에 받은 권한 있는 DNS 서버에게 다시 질의합니다. 권한 있는 DNS 서버는 도메인에 해당하는 IP를 응답합니다.
⑥ DNS 서버는 권한 있는 DNS서버에 받은 IP를 요청한 리졸버에게 응답합니다.
지금까지 내용을 정리하면 아래 그림과 같습니다. 중간과정에 생략했지만, 각 DNS서버도 리졸브처럼 DNS캐시를 가지고 있습니다. 만약, DNS캐시가 hit되면 DNS서버정보 대신에 도메인에 매칭되는 IP를 전달합니다.
9. 재귀적 쿼리와 반복적 쿼리
DNS 서버가 여러 DNS 서버에 질의를 여러 번 질의하는 과정을 재귀적(Recursive) 쿼리라고 합니다. 반대로 리졸버가 여러 서버에게 질의하는 과정을 반복적(Iterative) 쿼리라고 합니다.
10. 마치며
이 시간을 통해 DNS 동작 원리를 조금이나마 이해하게 되었습니다. cloudflare기업에서 DNS에 대해 잘 설명한 글이 있어서 공부에 많은 도움이 되었습니다. 몇가지 테스트한 실습도 했었는데 시간이 된다면 다음 글로 정리하겠습니다.
참고자료
'전공영역 공부 기록' 카테고리의 다른 글
Argocd rbac 테스트 (0) | 2023.08.06 |
---|---|
NLB를 장애상황 퀴즈 (1) | 2023.08.06 |
쿠버네티스 kubectl 유틸리티 도구 (0) | 2023.07.08 |
linux에서 GPU card목록 확인 (0) | 2023.06.23 |
프로메테우스 오퍼레이터에서 pod label수집 (0) | 2023.06.11 |