CS공부/네트워크

[네트워크] DNS란?

이숭간 2021. 7. 17. 10:32
728x90

DNS

DNS(Domain Name System)은 사람이 읽을 수 있는 도메인이름을 머신이 읽을 수 있는 IP주소로 변환하는 역할을 한다.

컴퓨터가 서로를 찾을 수 있는 주소가 IP주소인데, 이를 기억하기엔 사람에게 너무 어려움 따라서 사람이 읽기쉬운 문자로 이루어진 주소를 도메인이름이라고 한다.

DNS서버가 이름에 대한 요청을 IP주소로 변환하여 어떤 서버에 연결할것인지를 제어한다. 이때 이 요청을 쿼리라고 부른다.

 

DNS를 언제 사용하는가?

브라우저에 URL을 입력하면, 브라우저가 HTTP Request메세지를 만들고 이를 웹서버로 전송하기위해서 OS에게 송신을 의뢰해야하는데 이때 도메인명이아니라 IP주소로 상대를 지정해야한다.

이 과정에서 DNS서버를 통해 도메인명을 IP주소로 바꿔야 상대를 특정할 수 있어 요청을 전송할 수 있다.

 

DNS의 유형

  • 신뢰할 수 있는 DNS
    • 도메인에 대한 최종권한이 있으며 재귀적 DNS서버에 IP주소 정보가 담긴 답을 제공할 책임이 있다.
    • 개발자가 퍼블릭 DNS이름을 관리하는데 사용하는 업데이트 메커니즘을 제공한다.
  • 재귀적 DNS
    • 대개 클라이언트는 신뢰할 수 있는 DNS서비스에 직접 쿼리를 수행하지 않고 대신 재귀적 DNS라고 알려진 유형의 DNS서비스에 연결하는것이 일반적이다.
    • 호텔 컨시어지와 같은 역학을 한다. DNS레코드를 소유하고 있지 않지만 사용자를 대신해서 DNS정보를 가져오는 중간자역할을 한다.
    • 재귀적DNS가 캐시된 DNS레퍼런스를 가지고있는경우 바로IP정보를 제공하여 DNS쿼리에 답을 한다. 그렇지 않다면 요청받은 도메인에 대한 IP주소를 찾기위해 쿼리를 하나이상의 신뢰할수있는 DNS서버에 전달한다.

 

DNS가 UDP를 사용하는 이유?

UDP는 Transport계층 프로토콜이 할 수 있는 가장 최소한의 기능으로 동작하는 프로토콜이다. 즉 다중화/역다중화기능과 간단한 오류검사의 기능외에는 IP프로토콜을 거의 그대로 사용하는것과 다름이 없다.

 

1. 연결의 시작과 끝 설정이 없다. (신뢰성이 없지만 속도가 빠르다)

tcp의 경우 데이터전송 시작전에 3-way-handshaking과정이 있는 반면 UDP는 이런 예비 동작이 없다.

즉, 연결설정에 드는 비용(오버헤드)가 없다.

 

DNS는 신뢰성보다 속도가 더 중요한 서비스이기때문에 TCP보다 UDP가 더 적합하다.

또한 DNS의 경우 전송하는 데이터 패킷사이즈가 매우작다.UDP의경우 512bytes를 넘어가지않는 패킷만 전송이 가능하고 이렇기에 오버헤드가 없어 매우 빠른 속도를 가진다. 

 

이때 단순히 데이터패킷의 사이즈가 작다고 TCP대신 UDP를 사용하는 것이 아니라, 작으면서도 신뢰성이 보장되지 않아도 되기떄문에, 못받앗으면 다시 요청해서 다시응답받으면 됨 , UDP가 더 적합하다고 판단한것이다.

 

2. 연결상태를 유지할 필요가 없다. 

TCP는 end point에서 연결상태를 유지하며 다음과같은 파라미터들이 포함된다. (수신버퍼, 송신버퍼, congestion control 파라미터, sequence number, ACK number)

 

반면 UDP는 어떤 정보도 기록하지 않고 유지할 필요가 없다.

따라서 특정 어플리케이션에 할당된 서버는 어플리케이션이 TCP보다 UDP에서 동작할때 더 많은 클라이언트를 수용할 수 있다.

 

도메인네임을 IP로 변경해주는 서비스를 제공하는 DNS서버는, 많은 클라이언트를 수용해야하기때문에 연결상태를 유지하지않아 정보기록을 최소화할수있는 UDP가 알맞은 것이다.

 

 

출처 :

https://velog.io/@syi9595/UDP-%EA%B0%80-DNS%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

https://jacking.tistory.com/1356

https://aws.amazon.com/ko/route53/what-is-dns/