2022. 2. 11. 20:48ㆍMajor`/컴퓨터 네트워크
DNS (Domain Name System)
- 호스트 네임(도메인 네임)을 IP주소로 변환해주거나 IP주소를 호스트네임으로 변환해주는 서비스
- DNS 서버들은 계층구조로 구현된 분산 데이터베이스이다
DNS 서비스
(1) 호스트 네임을 IP 주소로 변환
- user가 url창에 호스트 네임을 치면 DNS가 해당 호스트 네임을 IP주소로 변환해준다
- www.yahoo.com → 202.165.107.50
- www.google.com → 142.250.196.132
(2) 호스트 에일리어싱 (Host Aliasing)
- 어떤 사이트의 정식 호스트 네임은 굉장히 복잡하다
- 그렇기 때문에 외부에는 복잡한 호스트 네임대신 간단한 호스트 네임 :: 별칭을 알려준다
- 호스트 에일리어싱 : user가 입력한 호스트 네임(별칭)을 정식 호스트 네임으로 변환해준다
- enterprise.com → relay1.west-coast.enterprise.com
- www.naver.com → www.naver.com.nheos.com
(3) 메일 서버 에일리어싱 (Mail Server Aliasing)
- (2)와 동일한 방식으로 DNS가 변환해준다
(4) 부하 분산 (Load Distribution)
- Request가 많은 웹 서버의 경우 해당 서버를 부하 분산 시킨다
- 여러 IP주소를 정식 호스트네임과 연관되도록 설정할 수 있다
- 동일하게 naver.com 접속해도
- Request 1은 223.130.200.104로 접속이 되고
- Request 2는 223.130.200.107로 접속이 되고
- Request 3은 223.130.195.95로 접속이 된다
>> 이와 같이 user의 DNS 질의에 대해 여러 서버로 분산되어서 접속을 허용한다
DNS - 분산 계층 DB
- 각 계층은 본인보다 하위 계층의 정보들을 알고있다
루트 DNS 서버
- 로컬 DNS 서버에서 user가 질의한 도메인 네임을 모를경우, 루트 DNS 서버에 접촉한다
>> 특정 도메인의 1단계 도메인(TLD)가 무엇인지 알고 있다
1단계 DNS 서버 (TLD : Top Level Domain)
- 국가 최상위 도메인(.kr / .jp / .fr / .cn / ...), 일반 최상위 도메인(.com / .net / .org / ...)로 나뉜다
- 국가 최상위 도메인 :: kr = 한국, jp = 일본, fr = 프랑스,...
- 일반 최상위 도메인 :: com = 기업, 네트워크 관련 제공자 = net, 기관 or 단체 = org,...
>> 특정 도메인의 2단게 도메인이 무엇인지 알고 있다
책임 DNS 서버 (Authoritative DNS Server) -- 2단계 + 3단계
- 기관(회사/대학) or 서비스 제공자가 관리한다
- 서버의 호스트 네임과 서버의 IP 주소의Mapping 정보를 보유하고 있다
- www.google.com ↔ 142.250.196.132
- www.naver.com ↔ 223.130.200.104
로컬 DNS 서버 (디폴트 네임 서버 or 프록시 네임 서버)
- 로컬 네임 서버는 DNS 계층에 속하지 않는다
- 각 ISP(가정 ISP, 회사, 대학)은 각각 로컬 DNS 서버를 가진다
host가 DNS 질의를 하면 해당 질의는 로컬 DNS 서버로 전송된다
- 로컬 DNS 서버에 해당 호스트네임에 대한 IP 주소 보유
- 바로 해당 IP 주소를 host에게 전달해준다
- 로컬 DNS 서버에 해당 호스트네임에 대한 IP 주소 보유 X
- 즉시 루트 DNS 서버에 해당 호스트 네임에 대한 질의를 전달한다
반복적 질의 (Iterative Query)
- 로컬 DNS 서버가 질의에 대한 IP주소를 보유하고 있지 않다고 가정
- User host는 www.google.com로 접속
(1)
- Host → 로컬 DNS 서버 : "www.google.com"의 IP 주소를 물어본다
(2)
- 로컬 DNS 서버 → 루트 DNS 서버 : "www.google.com"의 IP 주소를 물어본다
(3)
- 루트 DNS 서버 → 로컬 DNS 서버 : "www.google.com"의 '.com'을 관리하는 서버의 주소를 알려준다
- 왜냐하면 루트 DNS 서버는 TLD DNS 서버에 관련한 내용만 알고 있다
(4)
- 로컬 DNS 서버 → TLD DNS 서버 : "www.google.com"의 IP 주소를 물어본다
(5)
- TLD DNS 서버 → 로컬 DNS 서버 : "www.google.com"의 'google.com'을 관리하는 서버의 주소를 알려준다
- TLD DNS 서버는 책임 DNS 서버에 관련한 내용만 알고 있다
(6)
- 로컬 DNS 서버 → 책임 DNS 서버 : "www.google.com"의 IP 주소를 물어본다
(7)
- 책임 DNS 서버 → 로컬 DNS 서버 : "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132
(8)
- 로컬 DNS 서버 → Host : "www.google.com"의 IP 주소인 '142.250.196.132'를 응답해준다
(9)
- Host → 웹 서버 : 웹 브라우저가 IP주소로 접속해서 서비스를 Request
(10)
- 웹 서버 → Host : 웹 페이지를 응답해준다
재귀적 질의 (Recursive Query)
- 로컬 DNS 서버가 질의에 대한 IP주소를 보유하고 있지 않다고 가정
- User host는 www.google.com로 접속
(1)
- Host → 로컬 DNS 서버 : "www.google.com"의 IP 주소를 물어본다
(2)
- 로컬 DNS 서버 → 루트 DNS 서버 : "www.google.com"의 IP 주소를 물어본다
(3)
- 루트 DNS 서버 → TLD DNS 서버 : 직접 TLD DNS 서버에게 "www.google.com"의 IP 주소를 물어본다
(4)
- TLD DNS 서버 → 책임 DNS 서버 : 직접 책임 DNS 서버에게 "www.google.com"의 IP 주소를 물어본다
(5)
- 책임 DNS 서버 → TLD DNS 서버 : TLD DNS 서버에게 "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132
(6)
- TLD DNS 서버 → 루트 DNS 서버 : 루트 DNS 서버에게 "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132
(7)
- 루트 DNS 서버 → 로컬 DNS 서버 : 로컬 DNS 서버에게 "www.google.com"의 IP 주소를 알려준다 :: 142.250.196.132
(8)
- 로컬 DNS 서버 → Host : "www.google.com"의 IP 주소인 '142.250.196.132'를 응답해준다
(9)
- Host → 웹 서버 : 웹 브라우저가 IP주소로 접속해서 서비스를 Request
(10)
- 웹 서버 → Host : 웹 페이지를 응답해준다
DNS 캐싱 (DNS caching)
- query에 대한 response를 받으면(IP 주소) 해당 IP 주소를 본인이 잠시 저장한다
- 이 캐싱된 정보는 일정시간(TTL)이 지나면 소멸된다
- 일반적으로 로컬 DNS 서버가 TLD DNS Server를 캐싱한다
DNS 레코드
- DNS는 자원 레코드(RR)를 저장하는 분산 DB이다
RR 형식 : (name, value, type, TTL)
- TTL : RR 레코드의 유효 시간 :: DNS 서버의 캐시에 해당 데이터가 얼마나 오랫동안 저장될 것인가
- type에 따라 value가 다르다
Type = A
- name : 호스트 네임 (도메인 네임)
- value : IP 주소 (IPv4)
- RR : (google.com, 216.58.220.142, A, 55)
>> 주어진 호스트에 대한 IP 주소(IPv4)를 알려준다
Type = AAAA
- name : 호스트 네임 (도메인 네임)
-value : IP 주소 (IPv6)
- RR : (google.com, 2404:6800:4004:824::200e, AAAA, 60)
>> 주어진 호스트에 대한 IP 주소(IPv6)를 알려준다
Type = CNAME
- name : 별칭 호스트 네임 (Alias)
- value : 정식 호스트 네임 (Canonical)
- RR : (enterprise.com, relay1.west-coast.enterprise.com, CNAME, 55)
- RR : (www.ibm.com, www.ibm.com.cs186.net, CNAME, 55)
Type = NS
- name : 호스트 네임 (도메인 네임)
- value : 해당 도메인을 관리하는 네임 서버
- RR : (naver.com, e-ns.naver.com, NS, 180)
- RR : (naver.com, ns1.naver.com, NS, 180)
- RR : (naver.com, ns2.naver.com, NS, 180)
Type = MX
- name : 별칭 호스트 네임 (Alias)
- value : 해당 호스트 네임에 대한 메일 교환 서버
- RR : (naver.com, mx1.naver.com, MX, 180)
- RR : (naver.com, mx2.naver.com, MX, 180)
- RR : (naver.com, mx3.naver.com, MX, 180)
>> 일반적으로 DNS 도메인에 대해 2개 이상의 메일 교환 서버가 존재 :: 각 도메인에 우선 순위가 설정
DNS 헤더
▶ Identifier (식별자 :: Transaction ID)
- Query 메시지와 Response 메시지 한 쌍을 의미하는 번호 / DNS 메시지를 구별하는 식별자이다
- Query Message에서 Transaction ID를 포함시켜서 보내면
- Response Message에서는 해당 Trasaction Id를 그대로 포함시켜서 Response 한다
- 해당 Query에 대한 Response임을 표시해준다
▶ Flags
QR
- 메시지의 종류 (Query or Response)
- 0 : Query
- 1 : Response
opcode
- Query/Response 종류
- 0 : 표준 조회
- 1 : 역조회
- 2 : 서버 상태 요청
AA
- 응답하는 서버가 네임 서버임을 의미
- Response Message에서 사용된다
TC
- 응답의 크기가 UDP 최대 크기인 512byte를 초과해서 512byte로 잘렸음을 나타낸다 (Fragmentation)
RD
- Query에 대한 Response 결과를 얻을 때까지 DNS 서버가 반복적 질의를 수행하도록 요청
- Query Message에서 사용된다
RA
- 해당 DNS서버가 반복적 질의 요청을 수행할 수 있음을 의미
- Response Message에서 사용된다
Z(zero)
- 예약 필드로 000으로 지정된다
rcode
- Return Code
- 0 : 에러 없음
- 1 : 양식 오류
- 2 : 서버 실패
- 3 : 이름 에러
- 4 : 구현되지 않음
- 5 : 거절
- 6 ~ 15 : 추후 사용
▶ Number of Question Records
- Query Message에 포함된 Query의 개수
▶ Number of Answer Records
- Response Message에 포함된 Response의 개수
▶ Number of Authoritative Records
- Response Message에 포함된 네임 서버의 개수
▶ Number of Additional Records
- Response Message에 포함된 추가적인 정보의 개수
- IP 주소 / ....
DNS 데이터 (Query & Response)
▶ Query Name
- Query/Response Message에서 사용되고, Query/Response에 대한 도메인 네임을 의미
▶ Type
- 도메인 레코드의 Type
▶ Class
- 프로토콜 패밀리
- 인터넷의 경우 : IN(1)을 사용한다
▶ TTL (Time to Live)
- DNS 서버의 캐시에 해당 Data가 얼마나 오랫동안 저장될 것인지를 나타내는 시각 [초]
▶ Resource Data Length / Resource Data
- 각각 RR 데이터의 길이와 레코드와 관련된 Data 존재