Skip to content

Commit

Permalink
feat: 2024-02-05-DNS (#50)
Browse files Browse the repository at this point in the history
  • Loading branch information
yoonseon12 authored Feb 19, 2024
1 parent ad34f06 commit 2b35a0b
Showing 1 changed file with 155 additions and 0 deletions.
155 changes: 155 additions & 0 deletions _posts/2024-02-05-DNS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
---
layout: post
title: DNS 흐름 파악하기
author: 이윤선
categories: 기술세미나
banner:
image: https://raw.githubusercontent.com/Kernel360/blog-image/main/2024/0205/5.png
background: "#000"
height: "100vh"
min_height: "38vh"
heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline"
tags: [DNS, 기술세미나]
---

## 목차

1. 도메인과 호스트네임
2. DNS란
3. DNS 동작 과정
4. DNS 레코드 타입
5. 최종 정리

---

# 1. 도메인과 호스트네임

[www.naver.com](http://www.naver.com) 이라는 URL이 있을 때 도메인은 어느부분을 말하는 것일까요?

www를 제외한 naver.com이 실제 도메인입니다.

그럼 우리가 사용했었던 www는 무엇일까요?

www는 호스트네임 입니다.  www 말고도 여러가지가 도메인 앞에 .과 함께 붙게되는데

예를들자면

### map.naver.com
![1](https://github.com/Kernel360/blog-image/blob/main/2024/0205/1.png?raw=true)

### news.naver.com
![2](https://github.com/Kernel360/blog-image/blob/main/2024/0205/2.png?raw=true)
이라면 news, map은 호스트 네임 입니다.

이제 실제로 DNS가 무엇이고 어떻게 동작하는지에 대해 네이버 웹사이트에 접속하는 것을 예로 들어보겠습니다.

<img src="https://github.com/Kernel360/blog-image/blob/main/2024/0205/3.png?raw=true" style="width:500px;">

우리가 네이버 접속하러면 네이버가 제공하는 서버에 요청을 해서 데이터들을 받아올라면 네이버 서버의 IP 주소를 알아야 합니다.

하지만 사용자가 각 서비스들의 서버 IP주소들을 다 외울 수는 없으니까 도메인을 통해서 해당 서버로 요청을 하게 되는데,

그럼 네이버 서버의 IP가 naver.com이라는 도메인과 매핑되어 있는 정보는 어디에 있을까요?

이러한 정보들이 저장되는 곳이 **DNS** 입니다.

# 2. DNS란

# DNS(Domain Name System)

- 도메인 이름과 IP 주소에 대한 정보를 관리하는 시스템
- 각 서버의 IP주소를 의미있는 문자열인 도메인 추상화
- 도메인만 IP주소를 몰라도 서버에 요청을 할 수 있음

DNS란 Domain Name System의 약자로 이름에서 알 수 있듯 도메인과 관련된 시스템입니다.

DNS가 도메인 이름과 IP 주소에 대한 정보를 관리하고 있기 때문에 사용자들을 각 서버의 IP 주소를 몰라도 도메인을 브라우저에 입력해서 서버에 쉽게 접속할 수 있었던 것 입니다.

# 3. DNS 동작과정

DNS는 다층적으로 구성된 네트워크에 분산되서 도메인 정보들이 저장되고 조회됩니다.
![4](https://github.com/Kernel360/blog-image/blob/main/2024/0205/4.png?raw=true)
DNS 서버는 네임서버라고 불리기도 하는데, 위 사진에서의 NS를, DNS 서버로 라고 생각하시면 됩니다.

위 사진과 함께 DNS의 동작과정에 대해서 살펴보겠습니다.

처음에 브라우저는 브라우저 캐시에서 요청한 도메인의 IP를 갖고 있는지 확인합니다.

없다면 hosts 파일과 캐시에서도 IP를 확인하고 여기에도 없다면 로컬 DNS서버 캐시를 확인합니다.

또 없다면 로컬 DNS는 Root DNS서버에다가 www.naver.com에 주소에 해당하는 IP를 어디서 찾을 수 있는지 물어봅니다.(루트 DNS 서버는 전 세계에 퍼져 있으며 한국에는 없지만 미러 서버가 이를 대신 합니다.)

이 루트 DNS 서버는 응답으로 .com 으로 끝나는 도메인들을 담당하는 서버의 IP주소를 반환합니다.

로컬 DNS 서버는 이 주소를 받고 최상위 도메인 서버로 찾아갑니다.

최상위 도메인 서버는 naver.com 도메인 정보를 가진 DNS 서버 IP 주소를 반환하고

그 주소를 보고 마지막으로 sub domain 서버를 찾아가면 naver.com 여러 호스트네임별 IP주소가 있습니다.

여기로부터 www.naver.com의 IP 주소를 얻어서 비로소 www.naver.com의 서버로 접속하게 되는겁니다.

# 3. DNS 레코드 타입

- 도메인 이름에 어떤 타입의 값이 매핑되는지로 나뉨
- A, CNAME, NS, SOA등..

<img src="https://github.com/Kernel360/blog-image/blob/main/2024/0205/5.png?raw=true" style="width: 500px">

DNS 레코드 타입을 통해 도메인 이름에 어떤 타입의 값으로 매핑될지 설정할 수 있으며 A, CNAME, SOA, NS 등이 있습니다.

여기서 대표적인 A, CNAME, NS 레코드를 살펴보겠습니다.

## DNS 레코드 타입 : A

- A 타입은 도메인 IP주소를 매핑해준다는 의미
- 해당 도메인으로 들어오면 IP주소로 이동

## DNS 레코드 타입 : CNAME

- 도메인 이름에 대한 별칭을 매핑
- A 타입을 이용해서 IP 주소를 명시하여 바로 이동할 수 있지만 CNAME을 사용하는 이유는 만약 서버 주소가 변경될 일이 있으면 별칭으로 매핑되어 있기 때문에 따로 값을 변경해주지 않아도 되기 때문입니다. 따라서 CNAME을 이용하면 변경에 유연한 구조로 가져갈 수 있다 라는 장점을 가집니다.

## DNS 레코드 타입 : NS

- 도메인 이름에 대한 권한이 있는 네임 서버를 매핑
- 다른 네임 서버에 도메인 이름에 대한 권한을 위임

# 4. DNS 동작과정 최종정리
![6](https://github.com/Kernel360/blog-image/blob/main/2024/0205/6.png?raw=true)
이제 마지막으로 DNS 동작과정을 정리해보겠습니다.

브라우저에서 로컬 DNS 서버로 www.jdon.kr 요청을 보냅니다.

로컬 DNS 서버에서 캐시를 확인하고 Root로 갑니다.

그런데 Root에는 A 값이 없습니다. 아이피 주소가 없다는 것입니다.

그래서 NS 값이 kr 네임 서버의 주소를 응답하게 됩니다.

그러면 여기서 서비스의 네임서버의 주소를 응답해줍니다.

네임 서버에 매핑된 cname으로 jdon.kr.이 매핑되어 있습니다.

그래서 네임서버 내부에서 요청을 해가지고 이 jdon.kr에 대한 A 타입인 IP를 찾아서 최종적으로 클라이언트에게 주게 되는 것 입니다.





















0 comments on commit 2b35a0b

Please sign in to comment.