1. DNS
1) DNS란?
2) DNS가 제공하는 서비스
3) 분산 시스템
4) 계층적으로 IP주소를 찾는 과정
5) DNS 질의(name resolution)
6) DNS 캐싱
7) DNS 레코드
8) DNS 메시지
9) DNS 데이터베이스에 레코드 삽입
10) DNS 공격
1. DNS
1.1 DNS란?
사람은 주민등록번호로 개개인을 식별할 수 있다. 이와 비슷하게 호스트는 DNS를 통해서 식별할 수 있다. 호스트를 식별하는 다양한 방법이 있다. ex. hostname(cnn.com, www.yahoo.com), IP 주소 (121.7.106)
(1) DNS 서버들의 계층구조로 구현된 분산 데이터베이스이고, (2) 호스트가 분산 데이터베이스로 질의하도록 허락하는 애플리케이션 계층 프로토콜이다.
1.2 DNS가 제공하는 서비스
- 호스트 네임을 IP 주소로 변환
- 호스트 에일리어싱(aliasing)
- www.enterprise.com과 enterprise.com을 일치시킨다.
- 메일 서버 에일리어싱
- 기업 웹 서버와 메일 서버 모두 enterprise.com라는 같은 호스트 네임을 가질 수 있다.
- 부하 분산
- cnn.com과 같은 인기 있는 사이트는 여러 서버에 중복되어 있어서 각 서버가 다른 종단 시스템에서 수행되고 다른 IP 주소를 갖는다.
1.3 분산 시스템
DNS는 기본적으로 centralized 가 아닌 distributed 환경이다. centralized 환경으로 만들어져있다고 가정한다면 특정 DNS가 마비된다면 전 세계 사람들이 해당 DNS를 전부 사용하지 못할 것이다. 또한 부하가 걸릴 수도 있고, 유지보수(scale up/down 등)에도 불리하다.
1.4 계층적으로 IP주소를 찾는 과정
DNS는 위 사진처럼 계층적인 구조를 이용하여 호스트 이름을 IP 주소로 변환한다.
예를 들어, www.example.com이라는 는 호스트 이름을 IP주소로 변환하는 경우, 먼저 이 호스트 이름의 최상위 도메인(com)을 관리하는 DNS 서버로 요청이 전달된다. 이 DNS 서버는 example.com 도메인을 관리하는 DNS 서버의 주소를 알려주고 다시 그 DNS 서버로 요청을 전달한다. 이 계층적 과정을 반복하여 반복적으로 www.example.com 의 IP 주소를 찾아 반환하게 된다.
+그리고 이 과정에서 anycast 과정을 거친다. 즉, 동일한 IP 주소를 가진 여러 대의 서버 중에서 가장 가까운 서버에 요청을 보낸다.
- 루트 DNS 서버
- 세계에 13개의 루트 DNS 서버가 존재한다.
- 최상위 레벨 도메인(TLD) 서버 (com DNS)
- 이 서버는 com, org, net 같은 상위 레벨 도메인과 kr, uk, fr, ca 같은 모든 국가의 상위 레벨 도메인에 대한 책임이 있다.
- 책임 DNS 서버 (www.google.com, mail.google.com)
해당 도메인의 네임 서버 정보를 가지고 있으며, 도메인에 관련된 모든 DNS 쿼리를 처리한다. - 로컬 DNS 서버 (www.hangkong.ac.kr/)
사용자가 사용하는 인터넷 서비스 제공자(ISP)에서 제공되는 DNS 서버
1.5 DNS 질의(name resolution)
recursive query는 DNS 서버가 클라이언트를 대신하여 DNS 쿼리를 계속해서 수행하는 반면,
iterated query는 DNS 서버가 클라이언트에게 질의 결과를 제공하면서도 다른 DNS 서버에게 도움을 요청하는 방식으로 작동한다.
recursive는 훨씬 친절하긴 하지만 pending문제(시간 지연)가 생길 수 있다는 단점이 있다. '나'한테 좋은 건 recursive 방법이지만 '모두'에게 좋은 건 interative 방법
1.6 DNS 캐싱
DNS는 지연 성능 향상과 네트워크 DNS 메시지 수를 줄이기 위해 캐싱을 사용한다.
하지만 항상 캐시는 '업데이트' 문제가 존재한다..!
DNS 또한 캐시를 사용하는 과정에서 로컬 DNS 서버에 저장된 DNS 레코드가 유효기간이 지나 업데이트되지 않은 상태로 남아 있어 문제가 발생할 수 있다. 이런 경우에 TTL이 지나면 out-of-date 되어 권한 없는 응답을 내보내는 식으로 극복한다.
1.7 DNS 레코드
자원 레코드는 다음과 같은 필드를 포함하는 4개의 튜플로 이루어져 있고, 타입에 따라 의미하는 것이 다르다.
(Name, Value, Type, TTL)
- Type=A
Name은 호스트 네임이고 value는 호스트 네임에 대한 IP 주소이다.
(relay1.bar.foo.com, 145.35.59.267, A) - Type=NS
Name은 도메인이고 Vlaue는 도메인 내부의 호스트에 대한 IP 주소를 얻을 수 있는 방법을 아는 책임 DNS 서버의 호스트 네임이다.
(foo.com, dns.foo.com, NS) - Type=CNAME
Value는 별칭 호스트 네임 Name에 대한 정식 호스트 네임이다.
(foo.com, relay1.bar.foo.com, CNAME) - Type=MX
Value는 별칭 호스트 네임 Name을 갖는 메일 서버의 정식 이름이다.
(foo.com, mail.bar.foo.com, MX)
1.8 DNS 메시지
- 헤더 영역
identification 필드 - 질의를 식별한다
flags - 클라이언트가 보낸 질의와 수신된 응답 간의 일치를 식별한다. 질의인지(0) 응답인지(1)
#은 개수를 의미하는 필드로, 헤더 다음에 오는 데이터 영역의 4가지 타입의 발생 횟수를 나타낸다. - 데이터 영역
questions - 현재 질의에 대한 정보 포함(질의되는 이름을 포함하는 이름 필드, 이름에 대해 문의되는 질문 타입 필드)
answers - 원래 질의된 이름에 대한 자원 레코드(A, NS, CNAME, MX 와 같은 Type 또는 TTL 등)
authority - 다른 책임 서버의 레코드
additional info - 다른 도움이 되는 레코드
1.9 DNS 데이터베이스에 레코드 삽입
도메인 네임 등록 및 DNS 관리 또한 위와 같은 계층 구조를 거친다.
1.10 DNS 공격
DDos(Denial of Service) 공격이나 Man-In-middle 공격이 있을 수 있다.
하지만 DDos는 사실상 DNS의 local server에서 이미 해결되기 때문에 실질적으로 문제가 된 적은 없다고 한다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] UDP와 TCP (2) | 2023.04.22 |
---|---|
[네트워크] 애플리케이션 계층-4 (0) | 2023.04.21 |
[네트워크] 애플리케이션 계층-2 (0) | 2023.04.17 |
[네트워크] 애플리케이션 계층-1 (0) | 2023.04.16 |
[네트워크] 컴퓨터 네트워크와 인터넷 (2) | 2023.04.15 |