벤티의 개발 로그

[Network] #4 DNS 본문

카테고리 없음

[Network] #4 DNS

sonsh75 2025. 1. 9. 21:35

이 포스트에서는 Application Layer의 또 다른 중요한 프로토콜, DNS에 대해 정리했다.

 

 

DNS란 무엇이며, 어떻게 작동할까?

DNS(Domain Name System)란 사람이 읽을 수 있는 도메인 이름(~~~.com)을 기계가 읽을 수 있는 IP 주소(192.X.X.X)로 변환하는 것을 의미한다. 다시 말해, 인터넷에서 사용되는 전화번호부와 같은 존재다.

 

그럼 어떻게 변환을 할까? DNS 시스템에는 도메인 이름과 IP가 서로 매핑되어 저장된다. Cloudware의 문서에 따르면 DNS가 작동하는 과정은 아래와 같다.

1. 사용자가 웹 브라우저에 'example.com'을 입력하면, 쿼리가 인터넷으로 이동하고 DNS 재귀 확인자가 이를 수신합니다.
2. 이어서 확인자가 DNS 루트 이름 서버(.)를 쿼리합니다.
3. 다음으로, 루트 서버가, 도메인에 대한 정보를 저장하는 최상위 도메인(TLD) DNS 서버(예: .com 또는 .net)의 주소로 확인자에 응답합니다. example.com을 검색할 경우의 요청은 .com TLD를 가리킵니다.
4. 이제, 확인자가 .com TLD에 요청합니다.
5. 이어서, TLD 서버가 도메인 이름 서버(example.com)의 IP 주소로 응답합니다.
6. 마지막으로, 재귀 확인자가 도메인의 이름 서버로 쿼리를 보냅니다.
7. 이제, example.com의 IP 주소가 이름 서버에서 확인자에게 반환됩니다.
8. 이어서, DNS 확인자가, 처음 요청한 도메인의 IP 주소로 웹 브라우저에 응답합니다.
9. 브라우저가 IP 주소로 HTTP 요청을 보냅니다.
10. 해당 IP의 서버가 브라우저에서 렌더링할 웹 페이지를 반환합니다.

 

여기서 주의할 점은, DNS 서버에 IP 주소를 요청할 때, UDP를 사용한다는 것이다. DNS는 동시에 많은 클라이언트에게 서비스를 제공해야 하기 때문에, TCP가 아니라 신뢰성보다 속도를 보장하며 연결 상태를 유지하지 않아 오버헤드가 없고 많은 클라이언트를 수용하는데에 유리한 UDP를 사용하는 것이다.

 

DNS 질의 종류

DNS 질의 종류 (출처: https://gaia.cs.umass.edu/kurose_ross/interactive/dns_query.php)

 

반복적 질의 (Iterative Query)

사용자가 Local DNS 서버에 Query 를 보내면 Local DNS 서버가 Root name 서버에 Query 를 보내 TLD 서버의 주소를 반환받고, 다시 TLD 서버에 Query 를 보낸다. 이렇게 최종 IP 주소를 받을 때까지 요청과 응답을 계속해서 Local DNS 서버가 반복하는 방법이다.

 

재귀적 질의 (Recursive Query)

사용자가 Local DNS 서버에 Query 를 보내면 Local DNS 서버가 Root name 서버에 Query 를 보내고, Root 서버는 자신의 서버에 없으면 해당 TLD 서버에 요청한다. 이렇게 재귀적으로 실제 도메인 정보를 가지고 있는 서버까지 Query가 이동하여 IP 주소를 얻는 방법이다. 재귀적인 방법은 Root 서버에 너무 큰 부담을 준다는 단점이 있다.

 

DNS 서버에서는 어떤 방식을 사용할까?

실제 DNS 서버는 반복과 재귀적인 방식을 함께 사용하며 Local DNS 서버에는 재귀, Root와 TLD 서버에는 반복, Authoritative 서버에는 재귀/반복적 Query를 사용한다.

 

DNS 레코드

DNS 레코드는 권한 있는 DNS 서버에 있는 명령으로서, 도메인에 연계된 IP 주소 및 해당 도메인에 대한 요청의 처리 방법에 대한 정보를 제공한다. DNS 레코드는 DNS 서버에게 수행할 작업을 알려주는 명령으로 사용되는 문자열인 DNS 구문이라고 하는 일련의 텍스트 파일로 구성된다.

또한, 모든 DNS 레코드에는 'TTL'이 있는데, 이는 time-to-live의 약어로 DNS 서버가 해당 레코드를 새로 고치는 빈도를 나타낸다. 그리고 모든 도메인에는, 사용자가 도메인 이름을 사용하여 웹 사이트에 액세스하는데 필요한 몇 가지 필수 DNS 레코드가 있어야 한다.

 

Reference

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

https://www.cloudflare.com/ko-kr/learning/dns/what-is-dns/