2023. 02.02 18:30 복습 시작
DNS
- DNS의 임무는 호스트 네임을 IP주소로 바꾸어주는 것이다.
- 그럼 호스트 네임은 무엇이고, IP주소는 무엇일까? 간단한 예를 들어보겠다.
- 호스트 네임 : 사람을 여러 가지 방법으로 식별할 수 있는 것처럼, 인터넷 호스트도 마찬가지다.
- 호스트에 대한 하나의 식별자는 호스트 네임이다. www.facebook.com, www.google.com 등이 호스트 네임이다.
- IP 주소는 4바이트로 구성되고 계층 구조를 갖는다. IP 주소는 121.7.106.83과 같은 형태이다.
확장성 문제를 다루기 위해 DNS는 많은 서버를 이용하고 이들을 계층 형태로 구성하며 전 세계에 분산시킨다.
어떠한 단일 DNS 서버도 인터넷에 있는 모든 호스트에 대한 매핑을 갖지 않는 대신에 그것은 DNS 서버 사이에 분산된다.
세 유형의 DNS 서버가 있다. 루트 DNS 서버, 최상위 레벨 도메인 네임 DNS 서버, 책임 DNS 서버다.
DNS 검색 과정 전에 이 DNS 서버에 대해 알아보겠다.
- 루트 DNS 서버 : 인터넷에는 400개 이상의 루트 DNS 서버가 있는데, 대부분 북미지역에 위치한다.
이 루트 네임 서버들은 13개의 다른 기관에서 관리된다. - 최상위 레벨 도메인(TLD) 서버 : com, org, net, edu 같은 상위 레벨 도메인과 kr, uk, fr, ca, jp 같은 모든 국가의 상위 레벨 도메인에 대한 TLD 서버 (또는 서버 클러스터)가 있다. 베리사인 글로벌 레지스트리 서비스 사는 com TLD에 대한 TLD 서버를 담당하고 있으며 에듀 코즈 사 는 edu TLD에 대한 TLD 서버를 담당하고 있다. TLD를 지원하는 네트워크 인프라는 크고 복잡하다.
- 책임 DNS 서버 : 인터넷에서 접근하기 쉬운 호스트(웹서버와 메일서버 등)를 가진 모든 기관은 호스트 네임을 IP 주소로 매핑하는 공개적인 DNS 레코드를 제공해야 한다. 기관의 책임 DNS 서버는 이 DNS 레코드를 갖고 있다. 또한 기관은 이 레코드를 갖도록 자신의 책임 DNS 서버의 구현을 선택할 수 있고, 일부 서비스 제공자의 책임 DNS 서버에 이 레코드를 저장하도록 비용을 지불한다.
DNS의 다른 중요한 형태는 로컬 DNS 서버이다.
로컬 DNS 서버는 서버들의 계층 구조에 엄격하게 속하지는 않지만, DNS 구조의 중심에 있다.
간단하게 예를 살펴보자.
호스트 cse.nyu.edu가 gaia.cs.umass.edu의 IP주소를 원한다고 가정하자.
또한 cse.nyu.edu의 로컬 DNS 서버는 dns.nyu.edu이고 gaia.cs.umass.edu에 대한 책임 DNS 서버는 dns.umass.edu라고 가정하자.
- css.nyu.edu가 dns.nyu.edu(로컬 DNS라고 하겠다.)에게 DNS 질의 메시지를 보낸다. 질의는 변환되어 호스트 네임 gaia.cs.umass.edu가 포함되었다.
- 로컬 DNS 서버는 그 질의 메시지를 루트 DNS 서버에게 전달한다.
- 루트 DNS 서버는 edu를 인식하고 edu에 대한 책임을 가진 TLD 서버의 IP 주소 리스트를 로컬 DNS 서버에게 보낸다.
- 로컬 DNS 서버는 질의 메시지를 TLD로 보낸다.
- TLD 서버는 umass.edu를 인식하고 dns.umass.edu로 이름 지어진 어느 대학교의 책임 DNS 서버의 IP 주소를 응답한다.
- 마지막으로 로컬 DNs 서버는 직접 dns.umass.edu로 질의 메시지를 보낸다.
- gaia.cs.umass.edu의 IP 주소로 응답한다.
- 로컬 DNS 주소는 응답받은 IP 주소를 css.nyu.edu에게 전달한다.
이렇게 8가지 순서로 메시지가 보내졌음에 주목하자.
이 예는 재귀적 질의와 반복적 질의가 사용되었다.
css.nyu.edu로부터 dns.nyu.edu 에게 보내는 질의는 자신을 대신하여 필요한 매핑을 얻도록 dns.nyu.edu에게 요구하므로 재귀적 질의이다. 그러나 다른 세 가지 질의는 모든 응답이 dns.nyu.edu에 직접 보내지므로 반복적 질의다.
아래 그림에서 다시 한번 확인해보자.
다음으로는 DNS에서 재귀적 질의를 잠깐 더 살펴보겠다. 다음 그림이다.
이 과정에서는 루트 DNS가 과도하게 트래픽이 들어와 부담이 커진다.
자신에게 들어온 쿼리를 모두 기억해야 하기 때문이다. 따라서 헤비 로드가 걸린다. 그래서 이런 구조를 지양해야 한다고 한다.
DNS 캐싱
DNS는 지연 성능 향상과 네트워크의 DNS 메시지 수를 줄이기 위해 캐싱을 사용한다. DNS 캐싱의 아이디어는 매우 간단하다.
질의 사슬에서 DNS 서버가 DNS 응답을 받았을 때 (예 : 호스트 네임을 IP 주소로 매핑하기) 그것은 로컬 메모리에 응답에 대한 정보를 저장할 수 있다.
예를 들어 위 순차적으로 과정을 살펴본 순서에서 dns.nyu.edu는 임의의 DNS 서버로부터 응답을 받을 때마다 응답에 포함된 정보를 저장할 수 있다.
만약 호스트 네임과 IP 주소 쌍이 DNS 서버에 저장되고 다른 호스트 네임으로부터 같은 질의가 DNS 서버로 도착한다면,
DNS 서버는 호스트 네임에 대한 책임이 없을 때조차 원하는 IP 주소를 제공할 수 있다.
호스트 DNS와 IP 주소 사이의 매핑과 호스트는 영구적인 것이 아니기 때문에 DNS 서버는 어떤 기간 이후에 저장된 정보를 제거한다.
DNS 레코드와 메시지
DNS 분산 데이터베이스를 구현한 DNS 서버들은 호스트 네임을 IP 주소로 매핑하기 위한 자원 레코드 (resource record, RR)를 저장한다. 각 DNS는 하나 이상의 자원 레코드를 가진 메시지로 응답한다.
자원 레코드는 다음과 같은 필드를 포함하는 4개의 투플로 되어 있다.
(Name, Value, Type, TTL)
TTL은 자원 레코드의 생존 기간이다. 이제 타입에 대해 알아보겠다.
- Type=A이면 Name은 호스트 네임이고 Value는 호스트 네임에 대한 IP주소다.
따라서 Type A레코드는 표준 호스트 네임의 IP 주소 매핑을 제공한다. 예를 들어 (relay1.bar.foo.com, 145.37.93.126, A)는 Type A 레코드다. - Type=ns이면, Name은 도메인(예 : foo.com)이고 Value는 도메인 내부의 호스트에 대한 IP 주소를 얻을 수 있는 방법을 아는 책임 DNS 서버의 호스트 네임이다. 예를 들어 (foo.com, dns.foo.com, NS) Type NS 레코드다.
- Type=CNAME 이면, Value는 별칭 호스트 네임 NAME에 대한 정식 호스트 네임이다. 이 레코드는 질의 호스트에게 호스트 네임에 대한 정식 이름을 제공한다. 예를 들어, (foo.com, relay1.bar.foo.com, CNAME)은 CNAME 레코드다. 예를 들면 foo.com으로 접속하는데 DNS 가 realy1.bar.foo.com으로 우회해서 접속시킨다. 다른 호스트 URL이 주어진 것이다. DNS 가 리다이렉팅 시켰다고 보면 되겠다. 이 경우는 트래픽을 분산시킨다는 장점이 존재한다.
DNS 메시지
DNS 메시지의 특징은 쿼리와 응답이 구분이 안된다는 것이다.
만약 어떤 쿼리 id가 1이면 다른 id가 1인 DNS 메시지를 찾으면 그것은 응답일 것이다.
하지만 알려주는 indication bit가 DNS 메시지 내부에 존재한다.
질문 영역은 현재 질의에 대한 정보를 포함한다.
답변 영역은 원래 질의된 이름에 대한 자원 레코드를 포함한다.
(질문 영역과 답변 영역이 중요하다.)
DNS 공격 패턴은 Redirect attacks와 DDos 공격이 있다고 한다.
참고자료
컴퓨터 네트워킹 하향식 접근 제 7판
2023. 02.02 19:20 마무리
댓글