본문 바로가기
CS/Network

[Network] 성공과 실패를 결정하는 1% 네트워크 원리(1) - DNS와 리졸버

by sebinChu 2024. 8. 8.

개요


성공과 실패를 결정하는 1% 네트워크 원리 도서의 챕터 1의 내용 중 DNS 리졸버에 대한 포스팅이다.

우리가 웹 브라우저를 통해 어떤 사이트에 접속할 때, 브라우저는 가장 먼저 URL을 해독한다. 이후, 목적 경로를 찾았기에 서버에 요청할 프로토콜과 관련한 통신 준비를 한다.(웹 서버에 접근하기 위해서는 보통 HTTP를 사용한다.) 이 과정이 모두 끝나면 웹 서버의 IP 주소를 DNS 서버에 조회한다. 이 과정에서 DNS 리졸버라는 개념이 등장한다.

 

 

 

1) DNS 리졸버


핵심은 IP 주소를 조사하기 위해 ”DNS에 질의를 한다.”는 것이다. 이를 위해 DNS 서버에 조회 요청을 날리고, 그에 대한 응답 메시지를 받는다. 결국 DNS 서버에 대해 클라이언트로 동작한다. 이 DNS 클라이언트를 DNS 리졸버라고 한다.

 

  • DNS 리졸버(or 단순히 리졸버): 가장 가까운 DNS 서버에 IP 주소를 질의한다. 즉, DNS 서버에 클라이언트로 동작한다.
  • 네임 리졸루션(name resolution) : DNS 원리를 사용하여 IP 주소를 조사하는 것

 

 

2) 소켓 라이브러리와 리졸버


소켓 라이브러리

리졸버는 소켓 라이브러리에 내장되어 있는 기능이다. 소켓 라이브러리는 OS가 네트워크 기능을 할 때 필요한 작업들을 모아놓은 것이다.

모든 개발자를 위한 HTTP 웹 기본 지식

 

 

브라우저는 URL을 해독하거나 HTTP 메시지를 만들지만, 직접 전송하고 네트워크에 송출하는 기능은 없기 때문에 OS에 이를 의뢰하게 된다. 따라서 위 이미지처럼 애플리케이션 단에서 소켓 라이브러리와 같은 기능을 호출함으로써 송수신을 부탁하게 된다.

 

 

 

3) 리졸버 호출과 위치


https://yeonyeon.tistory.com/243

 

소켓 라이브러리 내에 구현된 리졸버가 OS에게 실행을 의뢰하고, OS는 이 요청 세미지 대로 송수신을 한다.

세부 내용은 아래와 같다.

 

 

 

4) 리졸버 - OS 내부 작동


  • 애플리케이션 안에 <메모리 영역> = gethostbyname(”www.cobinding.tistory.com”)과 같이 쓰면 리졸버가 호출되어, DNS 서버에 대한 IP 주소 조회 동작을 실행할 수 있다.

이 화살표를 하나하나 따라가보면 이해에 도움된다! 풀어쓰면 아래와 같다.

 

 

  1. 브라우저와 같은 애플리케이션이 리졸버(socket 라이브러리)를 호출
  2. 리졸버가 OS에게 DNS 서버에 조회 메시지를 보내야 한다는 메시지 생성해서 프로토콜 스택 호출
    • 프로토콜 스택: OS 내부에 내장된 네트워크 제어용 SW
  3. OS가 리졸버에게 메시지 받아서 네트워크 영역의 송수신 담당
  4. LAN 어댑터를 통해서 메시지가 DNS 서버를 향해 송신
  5. DNS 서버의 응답이 클라이언트에게 위 과정을 거꾸로 거쳐서 반송
  6. 리졸버는 OS에게 응답 메시지를 받아서, IP 주소를 추출하여 <메모리 영역>에 저장하고 애플리케이션에게 이 IP 주소를 건네줌.

 

 

 

*DNS 서버에 메시지를 송신할 때 IP 주소는 필요 없을까?

→ 컴퓨터에 미리 TCP/IP 설정 하나하나가 되어있다. 리졸버는 여기에서 설정된 DNS 서버의 IP 주소에 조회 메시지를 보낸다!