일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- airflow
- tcp
- PostgreSQL
- aws s3
- EC2
- docker
- Trino
- ip
- zookeeper
- log
- Kafka
- Packet
- JavaScript
- Operating System
- java
- MAC address
- kubernetes
- jvm
- CSV
- OS
- Spring
- Vision
- kubectl
- kubeadm
- CVAT
- grafana
- Network
- AWS
- Python
- helm
- Today
- Total
JUST WRITE
DNS 본문
DNS
Domain Name Server
Internet에서 통신할 때 IP Address를 사용한다.
IP Address는 최대 12자리 숫자로 구성되어 있어 외우기가 힘들다.
그래서 문자로 구성된 Domain Address를 사용한다.
DNS는 Domain Address를 IP Address로 변환해주는 역할을 한다.
최근 Cloud 기반 Infra 구성이 많아지면서 Infra가 빈번이 변경돼서 DNS 설계가 중요하다.
MSA(Micro Service Architecture) 기반의 Service가 많아지면서 수많은 API 호출로 DNS 역할이 중요하다.
구조와 명명규칙
Domain은 계층 구조로 수많은 Address를 효율적으로 찾아갈 수 있다.
역 Tree 구조로 최상위 Root부터 Top-Level Domain... 하위 level로 원하는 주소를 단계적으로 찾아간다.
각 계층을 "."를 경계로 표시하고 뒤에서 앞으로 해석한다.
Domain 계층은 최대 128계층까지 구성할 수 있다.
문자는 알파벳, 숫자, "-"로만 사용할 수 있고 대소문자 구분이 없다.
Root DNS
Root DNS은 Domain을 구성하는 최상위 계층이다.
사용자의 DNS Server에서 Domain 정보가 없으면 Root DNS에 쿼리 한다.
Root DNS는 전 세계 13개가 있다.
DNS Server를 설치하면 Root DNS의 IP Address를 기록한 Hint 파일을 가지고 있다.
Root DNS는 아래와 같다.
Host Name | IP Address | 관리 기간 |
a.root-servers.net | 198.41.0.4, 2001:503:ba3e::2:30 | VeriSign. Inc. |
b.root-servers.net | 192.228.79.201, 2001:500:84::b | University of Southern California(ISI) |
c.root-servers.net | 192.33.4.12, 2001:500:2::c | Cogent Communications |
d.root-servers.net | 199.7.91.13, 2001:500:2d::d | University of Maryland |
e.root-servers.net | 192.203.230.10, 2001:500:a8::e | NASA(Ames Research Center) |
f.root-servers.net | 192.5.5.241, 2001:500:2f::f | Internet Systems Consortium. Inc. |
g.root-servers.net | 192.112.36.4, 2001:500:12:d0d | US Department of Defense(NIC) |
h.root-servers.net | 198.97.190.53, 2001:500:1::53 | US Army (Research Lab) |
i.root-servers.net | 192.36.148.17, 2001:7fe::53 | Netnod |
j.root-servers.net | 192.58.128.30, 2001:503:c27::2:30 | VeriSign. Inc. |
k.root-servers.net |
193.0.14.129, 2001:7fd::1 | RIPE NCC |
l.root-servers.net |
199.7.83.42, 2001:500:9f::42 | ICANN |
m.root-servers.net | 202.12.27.33, 2001:dc3::35 | WIDE Project |
TLD
Top-Level Domain
TLD는 IANA(Internet Assigned Numbers Authority)에서 구분한 6가지 유형으로 구분된다.
- Generic(gTLD)
- 특별한 제한 없이 일반적으로 사용되는 최상위 Domain, 세 글자 이상으로 구성
- 1980년대 7개의 gTLD(.com, .edu, .gov, .int, .mil, .net, .org)로 시작, 새로운 gTLD 생성
- Country Code TLD(ccTLD)
- 국가 최상위 Domain, ISO 3166 표준에 의해 규정된 두 글자의 국가 코드 사용
- 호주, 대만처럼 gTLD를 그대로 사용하는 국가도 있음
- 영국은 ISO 3166 표준이 아닌 uk라는 별도 ccTLD 사용
- Sponsored(sTLD)
- 특정 목적을 위한 스폰서를 두고 있는 최상위 Domain
- Infrastructure
- 중요한 Infra 식별자 공간을 지원하기 위해 전용으로 사용되는 최상위 Domain
- Generic-restricted(grTLD)
- 특정 기준을 충족하는 사람이나 단체가 사용할 수 있는 최상위 Domain
- Test(tTLD)
- IDN(Internationalized Domain Names) 개발 프로세스에서 Test목적으로 사용하는 최상위 Domain
동작
Domain을 IP Address로 변환하려면 DNS Server에 Domain을 쿼리 하는 과정을 거쳐야 한다.
DNS Server에 쿼리 하기 전에 Local에 DNS Cache 정보를 먼저 확인한다.
DNS Cache에는 기존 DNS 조회를 통해 확인한 정보와 hosts 파일에 저장되어 있는 정보가 있다.
DNS Cache에 정보가 없으면 DNS Server에 쿼리를 수행한다.
DNS Server에 응답을 받으면 DNS Cache에 정보를 저장한다.
전 세계 Domain 정보를 DNS Server 하나에 저장할 수 없다.
DNS는 역 Tree 구조로 자신에게 없으면 다른 DNS Server에 요청한다.
DNS 쿼리 하는 과정은 아래와 같다.
- Host에서 'ab.c'라는 Domain을 Local Cache에 저장되어 있는지 확인
- Local Cache에 없으면 Host에 설정된 DNS에 'ab.c'를 쿼리
- DNS Server 내 Local Cache에 'ab.c' 정보 있는지 확인
- Local Cache에 없으면 Root DNS에 '.c'에 대한 TLD 정보를 가진 DNS 주소 쿼리
- Root DNS는 '.c'에 대한 TLD Name Server정보를 DNS Server에 응답
- DNS Server는 TLD Name Server에 'ab.c'에 대한 정보 쿼리
- TLD Name Server는 'ab.c'에 대한 정보를 가진 ab Name Server의 정보를 DNS Server에 응답
- DNS Server는 ab Name Server에 'ab.c'에 대한 정보를 쿼리
- ab Name Server는 'ab.c'에 대한 정보를 DNS Server에 응답
- DNS Server는 'ab.c'에 대한 정보를 Local Cache에 저장하고 Host에 응답