공부하는 스누피

[네트워크] DNS 본문

CS/네트워크

[네트워크] DNS

커피맛스누피 2020. 10. 23. 13:23

DNS란?

인터넷은 호스트를 IP 주소로 구분하지만, 사람이 기억하기 어렵다는 단점이 있다. 그래서 사람이 기억하기 쉬운 알파뉴메릭 문자인 hostname으로 식별되도록 하였다. hostname만으로는 호스트의 주소를 직접적으로 알기 어려워 IP 주소로 변환하는 과정이 필요하다. 그래서 DNS(Domain Name System)은 host name을 IP 주소로 변환해 주는 디렉터리 서비스를 제공한다.

 

기능

- Host name을 IP 주소로 변환:

1) 브라우저가 URL로부터 hostname을 추출하고 DNS 애플리케이션의 클라이언트 측에 넘긴다.

2) DNS 클라이언트(사용자 컴퓨터)가 DNS 서버로 hostname을 포함하는 질의를 보낸다.

3) hostname에 대한 IP 주소를 가진 응답을 보낸다.

4) 브라우저가 DNS로부터 IP주소를 받으면, 브라우저는 해당 IP 주소와 80번 포트에 위치하는 프로세스로 TCP 연결을 초기화한다.

- Host aliasing:

하나 이상의 이름을 가진 호스트에서 별칭 호스트네임으로 정식 호스트네임(canonical hostname)을 찾을 수 있게 함.

- Mail server aliasing:

메일 어플리케이션에 의해 host aliasing을 수행함.

- load distribution:

여러 중복된 서버 사이에 부하를 분산하기 위해 사용됨. 중복 웹 서버는 여러 IP주소가 하나의 정식 hostname과 연결되어 있다. 그래서 DNS 데이터베이스는 여러 개의 IP 주소 집합을 갖고 있는데, DNS 질의를 하면 이 IP 주소 전체 집합을 가지고 순환식으로 응답한다. 

 

DNS의 분산 계층 데이터베이스

단일 DNS 서버에 있는 중앙 집중 데이터베이스는 확장성이 전혀 없고, 트래픽, 유지관리 등 문제가 많다. 그래서 DNS는 분산되도록 설계되었다.

 

=> 루트 DNS 서버:

전 세계에 400개 이상의 루트 DNS 서버가 있다. 

=> TLD 서버(최상위 레벨 도메인 네임):

com. org.net, edu같은 상위 레벨 도메인과 국가별 상위 레벨 도메인에 대한 TLD 서버가 있다.

ex. Verisign 사는 com TLD 서버를 담당하고 있다.

=> 책임 DNS 서버:

호스트 네임을 IP주소로 매핑하는 DNS 레코드를 제공한다. 

=> 로컬 DNS 서버:

서버들의 계층 구조에 엄격하게 속하진 않지만, DNS 구조의 중심에서 프록시로 동작한다.

 

질의 과정

요청 호스트 => 로컬 DNS 서버 => 루트 DNS 서버 => TLD DNS 서버 => 책임 DNS 서버

(이후 재귀적으로 요청 호스트에게 응답이 가도록 함.) 

 

blog.example.com 질의

1) Client에서 hosts 파일을 확인한 후, cache 파일을 확인한다.

2) root DNS에 'com'을 관리하는 TLD 서버를 질의한다. 

3) TLD 서버는 'example.com'을 관리하는 책임 DNS 서버를 질의한다.

4) 책임 DNS 서버는 "blog.example.com"의 IP주소를 질의 후 Client에게 알려준다.

 

DNS 캐싱

DNS 서버가 응답을 받았을 때, 로컬 메모리에 응답에 대한 정보를 저장한다.

DNS 질의 과정은 재귀적 질의와 반복적 질의를 통해 이루어지는데, 요청한 정보가 캐싱되어 있다면, 루트 DNS 서버를 거치지 않고 호스트에게 응답하도록 한다.

 

ex. 질의 과정에서 로컬 DNS 서버에 cache hit이 일어날 때

요청 호스트 => 로컬 DNS 서버 => TLD DNS 서버 => 책임 DNS 서버

이때 로컬 DNS 서버는 TLD DNS 서버의 위치와 정보를 알고 있다.

 

 

DNS의 취약점

- DDoS 대역폭 flooding 공격: 다량의 패킷을 DNS 루트 서버로 보내도록 함. (ICMP 핑 블록과 캐싱으로 해결)

- 중간자 공격: 호스트로부터의 질의를 가로챌 수 있다. (구현이 어렵다)

=> 지금까지 다양한 공격이 있었으나 성공하지 못했다.

 

DHCP(Dynamic host configration Protocol)

호스트의 IP 주소와 각종 설정을 클라이언트에게 자동으로 제공해주는 프로토콜이다. 

해당 클라이언트에게 일정 기간동안 임대하는 동적 주소 할당 프로토콜이다.

=> IP를 자동적으로 할당해주기 때문에 IP 충돌을 막을 수 있다.

=> DHCP서버에 의존적이다.

 

Comments