DNS
DNS: Domain Name System
인간을 식별할 수 있는것은 많다: SSN, 이름, 여권, 민증 등등인터넷 호스트와 라우터들도 있다: ip 주소, URL
>> 그러면 IP 주소와 사이트 이름을 매핑해주는 것이 있을까?
그렇다. 바로 DNS인것
DNS:
- 분산된 DB: 여러 name server들의 구조로 구현됨
- 어플리케이션 계층 호스트, 라우터, 네임 서버에 이름(주소/이름 변환)을 해결하기 위해 통신을 함
- 핵심 인터넷 기능, 애플리케이션 계층 프로토콜로 구현됨
- 네트워크의 "edge"에서의 복잡성
그러면 도메인 이름이란 뭔가?
- 인터넷에서 네트워크 장치 모음이 조직되는 관리 자율성, 권한 또는 통제 영역의 이름(예: kt.com )이다.
DNS zone은 뭐임!
- 관리 책임이 위임된 도메인 이름 시스템(DNS)을 사용하는 도메인 이름 공간의 일부
이해가 안됨!
>> 즉 도메인은 해당 정보를 위임 (등록)하는 단계에서 발생이 되는 것이며, ZONE은 해당 도메인을 운영하는 시스템에서 해당 도메인에 대한 정보를 저장하고 제공되는 단위가 ZONE이다.
DNS 서비스
- 호스트네임을 IP 주소로 변환시킴
- 호스트 작명
표준, 별명 이름
부하 분포(DNS 회전)
복제된 웹 서버: 하나의 표준 이름에 대한 IP 주소 집합 - 메일 서버 작명
왜 DNS를 중앙화시키지 않는가?
- 실패 지점이 하나임
- 트래픽 많음
- 원격 중앙 집중식 데이터베이스
- 유지 불가
DNS 분석하기
- 애플리케이션 계층 프로토콜
- UDP 또는 TCP 기반
RFC 1035: 일반적으로 UDP를 통해 최대 512바이트까지 전송되며, 512바이트 이상의 패킷은 파편화되며, 서버 간에 TCP가 사용된다.
RFC 2671: 512바이트 이상의 UDP 패킷 전송 허용.
분산된 구조적 데이터베이스
루트 DNS 서버
최상위 도메인(TLD) 서버
인증된 DNS 서버
1. 클라이언트가 www.amazon.com 에 대한 IP를 원한다.
2. 클라이언트가 루트 서버에 요청하여 .com DNS 서버를 찾는다.
3. 클라이언트가 .com DNS 서버에 요청하여 amazon.com DNS 서버를 가져온다.
4. 클라이언트가 amazon.com DNS 서버에 문의하여 www.amazon.com 의 IP 주소를 가져온다.
DNS: 루트 네임 서버
이름을 확인할 수 없는 로컬 네임 서버에 접근했다
루트 네임 서버:
1. 이름 매핑을 모르는 경우 공인 네임 서버에 접근해라
2. 매핑을 가져온다.
3. 로컬 네임 서버에 매핑을 반환한다.
TLD와 인증 서버
TLD(Top-level domain) 서버:
- com, org, net, edu, etc, 그리고 나라 도메인(us, kr, jp 등)
- 네트워크 솔루션은 com TLD용 서버를 유지 관리한다.
- edu TLD를 위한 교육 목적
인증된 DNS 서버:
- 조직의 DNS 서버, 조직의 서버(예: 웹, 메일)에 대한 권한 있는 호스트 이름에 IP 매핑을 제공한다.
- 조직 또는 서비스 제공업체에서 유지 관리할 수 있다.
Local name server
엄격하게 계층 구조에 속하지는 않는다.
각 ISP(주거용 ISP, 회사, 대학교)에는 하나씩 있다.
-"기본 이름 서버"라고도 불린다.
호스트가 DNS 쿼리를 만들면 쿼리가 로컬 DNS 서버로 전송된다.
-프록시 역할을 하며 쿼리를 계층 구조로 전달한다.
DNS 네임 해결 예시
재귀 질의:
답이나 오류 메시지를 얻을 때까지 다른 DNS 서버에 질의를 계속하여 결과를 클라이언트에게 알려줌
해당 정보를 찾기 위해 다른 서버에 접속은 하지 않음
보통 DNS 서버에서는 보안 문제 등으로 인해 클라이언트의 재귀질의를 허용하지 않으며, DNS 서버간 질의에 사용됨
반복질의: DNS 클라이언트 질의 처리
서버는 현재 가진 내용 (자체 데이터베이스)으로 응답할 뿐 재귀질의처럼 정보를 찾지 않는다.
반복 질의는 DNS 클라이언트에 다음 DNS 서버를 제공하여 답이 그렇지 않은 경우 쿼리할 수 있다
로컬에서 사용 가능.
>> 나는 이거 모르겠고 서버에 물어봐라
재귀적 쿼리를 사용하면 DNS 서버가 클라이언트를 대신하여 이름 정보를 검색할 수 있다.
DNS: 캐싱과 기록 업데이트
(모든) 네임 서버가 매핑을 학습하면 매핑을 캐시한다.
- 시간 경과 후 캐시 항목 시간 초과(disappear)
- TLD 서버는 일반적으로 로컬 네임 서버에 캐시된다.
- 따라서 루트 네임 서버가 자주 방문하지 않음
DNS 프로토콜, 메시지
DNS 프로토콜: 쿼리와 응답 메시지, 둘다 같은 메시지 형태를 가지고 있다.
1. 메시지 헤더
- identification:
- 쿼리를 위한 16비트
- 쿼리를 응답하기 위해 사용하는 것도 같다.
- flags:
- 쿼리 or 응답
- 응답은 신뢰성이 있어야 한다.
- 재귀 필요
- 재귀 가능
헤더는 12바이트로 고정되며, resource records라 하는 body 부분을 가지고 있음
Identification는 쿼리/응답 식별값(transaction id)으로, DNS 요청/응답과 관련된 모든 것을 보기 위한 값(dns.id=0x4269)을 필터링 할 수 있음
플래그는 총 16비트, 8개의 필드로 되어 있음:
- QR (1bit)의 경우 Query(0)인지 아니면 Reply(1)인지 구별하는 플래그
- Opcode (4)는 Query의 종류를 나타냄. 0은 표준조회 (호스트 이름을 가지고 ip주소를 조회), 1은 역조회 (ip주소를 가지고 호스트 이름을 조회), 2는 서버상태 요청을 나타낸다. 보통은 0을 사용
- AA (1)의 경우는 Authoritative Answer의 약자로 공식네임서버의 응답여부 플래그
- TC(Truncation) (1)은 응답시에만 사용. 정해진 사이즈를 초과해서 잘렸는지를 확인하는 플래그
- RD(Recursion Desired) (1)는 재귀적인 질의가 필요한지에 대한 여부를 나타냄. 기본적으로 필요(1)로 설정되어 있음
- RA(Recursion Available) (1)는 응답한 네임서버가 재귀질의(RD)를 할 수 있는지 여부에 대한 설정
- Z(3)로 나중을 위해 예약된 필드. 항상 0으로 설정되어야 함
- Response code (4)는 아래와 같이 총 6개로 나타남
0 : Success 성공
1 : Format Error 쿼리가 잘못된 경우
2 : Server Failure 네임서버 자체의 문제로 실패
3 : Name Error 해당 네임이 존재하지 않을 경우
4 : Not Implemented 네임서버가 Query를 지원 못함
5 : Refused 정책적인 이유로 Query를 거절함
6~15 : Reserved 나중을 위해 예약됨
4개의 섹션을 가진다: questions, answers, authority, additional information
RD(재귀 목적):
재귀는 서버가 재귀적 쿼리 프로세스를 사용할 수 있는지 여부를 나타내기 위해 DNS 쿼리에 정의될 수 있다.
재귀를 통해 DNS 서버는 클라이언트를 대신하여 다른 서버에 답변을 요청할 수 있다.
로컬 네임 서버에 답이 있는 경우 직접 응답한다. 답이 없는 경우 클라이언트를 대신하여 조회 프로세스를 시작한다.
재귀를 원하지 않는 경우 쿼리는 반복 쿼리로 간주된다.
반복 쿼리를 사용하면 DNS 서버가 로컬에서 사용할 수 있는 경우 정보를 반환한다.
그렇지 않으면 DNS 서버가 다른 DNS 서버의 IP 주소를 반환하여 요청할 수 있다. 대부분의 DNS 쿼리는 재귀를 사용한다.
DNS records
DNS: 분산화된 DB를 저장하는 자원 레코드(RR= resource records)
RR format: (name, value, type, ttl)
type= A, name = 호스트 네임, value = IP 주소
type= CNAME, name = canonical을 위한 별명 (예: www.ibm.com의의 진짜이름은 servereast.backup2.ibm.com이다), value = canonical 이름
type= NS, name= 도메인, value= 이 도메인에 대한 권한 있는 네임 서버의 호스트 이름
type= MX, value= name과 연관된 메일 서버의 이름
Canonical name: 정식 호스트 네임
Alias name: 별칭 호스트 네임(우리가 주로 사용하는 도메인 주소)
TTL (time to live): DNS 서버에 주소 값이 저장(캐슁)되는 기간(단위: 초)
MX(Mail Exchange): 메일서버에 도달할 수 있는 라우팅 정보(메일서버)를 제공