본문 바로가기
Computer Science/Network

[네트워크] "www.google.com"을 입력하면 어떻게 되나? 2편 DNS

by whatamigonnabe 2022. 8. 8.

2022.08.04 - [풀스택 개발자/Network] - [네트워크] 네트워크 흐름 - 주소창에 "www.google.com"을 입력하면 어떻게 되나? 1편

 

[네트워크] "www.google.com"을 입력하면 어떻게 되나? 1편 - LAN/WAN, TCP/IP 4 계층, 패킷 교환 방식

전 세계의 컴퓨터들이 인터넷으로 연결되어 있다. 우리는 어떻게 저 먼 미국의 서비스인 구글에 접속할 수 있을까요? 우선은 우리가 사용하는 컴퓨터나 핸드폰이 구글의 서버와 유/무선으로 연

daydayplus.tistory.com

이전 편에서 네트워크를 구성하는 것들에 대하여 살펴보았습니다. 이제 크롬 주소창에 'www.google.com'을 입력해보겠습니다.

IP 주소 알아내기: DNS (Domain Name System)

통신을 위한 첫번째 단계는 도메인 주소로부터, IP 주소를 알아내는 것입니다. IP주소는 2진수로 표현된 4개의 옥탯(8비트 단위)로 구성되어 있습니다. 일반적으로는 10진수로 변환해서 '127.110.111.1' 같은 형태로 사용합니다. 그런데 입력한 주소는 알파벳으로 이뤄져있죠. 그래서 이 알파벳과으로 이뤄진 주소로부터 숫자로 이뤄진 IP주소를 획득해야합니다.

더보기

IP 주소 (Interne Protocol Address)에 대해 간략히 알아보고 지나가겠습니다. 모두가 아시다시피, 이것은 컴퓨터마다 붙어있는 말그대로 주소입니다. 이 주소를 알아야, 정확히 그곳에 찾아갈 수 있습니다. 그런데 사실 이 IP 주소는 네트워크를 이용하는 모든 장비에 할당되어 있습니다. 내가 사용하는 핸드폰부터, 라우터 장비에도 붙어있습니다.

 

또한 IP 주소는 Public IP Address와 Private IP Address로 구분할 수 있습니다. 우선 Public은 전세계에서 유일한 주소이며, 공개되어 있기 때문에 외부에서 접근이 가능합니다. 반면, Private은 지금 저희들이 사용하고 있는 장비에 붙어있는 주소이고, LAN 내에서 유일하며 외부에서 접근할 수 없습니다. 

 

왜 private IP address를 사용할까요? 그것은 4개의 옥탯(8비트 단위)로 구성된 IPv4의 주소가 모자라기 때문입니다. 네트워크 기기가 폭발적으로 늘면서, 꼭 외부에서 접근 받을 필요가 없는 일반 장비들은 private으로 ip 주소를 할당받고 있습니다.

 

구분 Public IP Address Private IP Address
할당 주체 ISP(인터넷 서비스 공급자) 라우터(공유기)
할당 대상 개인 또는 회사의 서버(라우터) 개인 또는 회사의 기기
고유성 인터넷 상에서 유일한 주소 하나의 네트워크 안에서 유일
공개 여부 내/외부 접근 가능. 외부 접근 불가능

이런 도메인 주소에 상응하는 IP 주소를 알고 있는 서버가 'DNS 서버'입니다. 또한 이 서버와 소통하기 위해 사용되는 프로토콜이 'DNS'입니다. 이 프로토콜이 정의한 방법에 따라 브라우저는 'DNS' 서버로 해당 도메인에 대한 IP 요청을 보내는데요, 이러한 요청을 '쿼리'라고 합니다.

 

또한 지난 포스팅에서 살펴본 것처럼 네트워크 통신은 여러 프로토콜들을 사용하고, 이것이 계층적으로 이뤄져 있으며, Application Layer부터 아래로 내려오며 요청을 보낼 데이터를 구성합니다. DNS은 어플리케이션 레이어의 프로토콜입니다. 따라서, 아래의 계층의 프로토콜을 사용합니다. 앞으로 다뤄볼 HTTP는 극히 일부를 제외하고는 Transport Layer에서 TCP를 사용하는데요, 이와 달리 DNS는 여러 프로토콜을 사용합니다. 

 

기본적으로 일반적인 경우 TCP를 사용하고, 통신하는 데이터의 크기가 클 경우 UDP를 사용합니다. (이 두 개의 프로토콜에 대해서는 나중에 다시 다루겠습니다.) 또한 TCP/UDP를 사용할 경우, 중간에서 패킷을 들여다보면 그 내용을 모두 열람할 수 있어 보안상 취약점이 있습니다. 이를 해결하기위해 SSL(또는 TSL)나 HTTPS 등의 프로토콜을 이용하여 보안성을 높이고 있으며, 이는 브라우저와 서버 둘 다 지원할 경우 사용되고 있습니다. (SSL과 HTTPS도 따로 다루겠습니다.)

 

또 한가지 알고 가야할 개념은 '트리 구조'의 DNS 서버'들'입니다. DNS 서버는 여러 서버로 구성되어있습니다. 당연히도 알고 있어야할 주소가 너무 많으니, 한 군데 저장하기 어렵기 때문이죠. 그리고 이 여러 서버들은 아래 그림처럼 트리구조로 되어 있습니다. 이런 트리구조를 통해서 이진트리처럼 재귀적으로 효율적으로 도메인을 탐색할 수 있습니다.

 

DNS 서버는 다음과 같이 이뤄져있습니다.

  • Local DNS == ISP DNS == Recursor: ISP의 DNS서버로, 각 서버와 재귀적으로 통신하며 IP를 얻어오는 역할을 합니다.
  • Root DNS: ICANN에서 관리하는 서버이며, 로컬 DNS가 가장먼저 찾는 곳이고, TLD으로 안내하는 역할을 합니다.
  • Top Level DNS(TLD): 도메인 등록 기관이 관리하는 서버이다. SLD로 안내하는 역할을 합니다.
  • Second Level DNS(SLD == Authentative DNS): 실제 IP 정보가 저장되어 있는 곳입니다.

 

주소를 찾아가는 여정

0. www.google.com을 주소창 입력합니다.  

 

1. 브라우저가 캐쉬를 확인합니다. 해당 도메인이 있으면 해당 IP를 사용하고, 없다면 다음 단계로 이동합니다.

 

2. 현재 사용하고 있는 ISP의 DNS 서버(== Local DNS == resolver == recursor)에게 해당 도메인이 있으면 IP를 사용하고, 없다면 다음 단계로 이동합니다.

  여기서 ISP는 Interent Service Provider의 약자로 통신서비스를 제공하고 있는 KT/SK 등입니다. 지금 저는 KT를 사용하고 있는 카페에 있는데요, 아래와 같이 설정에서 KT의 DNS서버를 확인할 수 있습니다. 주소가 두 개인 이유는 하나는 보조DNS입니다. 

 

3. Local DNS(ISP DNS)가 Root DNS에 쿼리를 보냅니다. 이곳에 없다면, RootDNS가 최상위 도메인인 .com DNS 서버 주소를 응답합니다.

 

4. 다시 Local DNS가 .com DNS에 쿼리를 보냅니다.(질의합니다.) 이곳에 없다면, .com DNS가 SLD인 .google.com DNS 서버 주소를 응답합니다. 

 

5. 다시 Local DNS가 .google.com DNS에 쿼리를 보냅니다. 이곳에서 IP 주소를 찾아 응답해줍니다.

 

6. Local DNS가 응답받은 IP 주소를 브라우저로 전달합니다.

 

참조

https://hanamon.kr/dns%EB%9E%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D%EA%B9%8C%EC%A7%80/

https://hwan-shell.tistory.com/320

https://m.blog.naver.com/on21life/221334848845