DNS란 무엇일까 🚥

금교영·2022년 3월 25일
1

기타

목록 보기
1/1
post-thumbnail

blog

🌐 인터넷을 사용하기 위해서

인터넷은 세계적으로 연결된 컴퓨터 네트워크 통신망을 일컫는 말이다. 우리는 주로 무선 인터넷을 사용하기 때문에 체감하지 못하지만 세계는 해저 케이블로 연결되어있다.(대부분의 트래픽은 해저케이블에서 일어난다.) 해저 케이블 지도를 보면 알 수 있다.

이렇게 물리적으로 연결되어 있기 때문에 먼 나라의 사이트에 접속하면 속도가 느린 것이 당연하다. 이론상으로 미국 사이트(서버가 미국에 있는)와 정보교환시 해저 케이블을 따라 미국에 도착하고 미국내의 통신을 통해 정보가 전달된다. (여담으로 구글,유튜브,넷플릭스 등의 세계적인 기업들은 자사의 서버를 세계 곳곳에 두기 때문에 빠른 속도를 제공한다.)

이제 인터넷 연결이 결국 물리적인 연결이라는 것을 알았다. 우리는 구글에 접속하기 위해서 www.google.com을 타이핑한다. 그저 URL을 입력하기만 했는데 어떻게 구글 서버를 알고 사이트에 접속할 수 있을까?

답은 DNS에 있다.

🚥 DNS

DNS를 알기 전에 IP를 먼저 알아야한다. 편지를 보내기 위해서 주소를 알아야하는 것과 같이 인터넷에서 정보를 보내고 받기 위해서 주소를 알아야한다. 인터넷에서는 IP를 그 주소로 한다.

윈도우를 사용하고 있다면 cmd창에서 nslookup google.com 명령어를 입력해보자.

nslookup google.com 결과

non-authoritative answer에 나와있는 addresses가 구글의 IP 주소를 뜻한다. 172.217.175.46을 주소창에 입력 후 접속하면 google 홈페이지를 볼 수 있다.

google에 접속하기 위해서 항상 google.com을 입력했지만 사실은 우리도 모르게 구글의 IP로 접속을 했다. 이런 일을 가능하게 해주는 것이 DNS이다.

🗺️ Domain

IP는 숫자로 이루어져있기 때문에 사람들이 외우기도 힘들고 와닿지도 않는다. 이런 상황들을 도메인(google.com같은 것)으로 해결했다. DNS는 Domain Name Server의 약자이다. domain을 입력하면 IP주소를 반환해주는 역할을 한다. 즉 주소창에 google.com을 입력하면 172.217.175.46이 반환되어 실제로는 아이피 주소에 접속하게된다.

DNS덕분에 구글의 IP주소를 몰라도 구글 홈페이지에 접속할 수 있다.

DNS의 동작 원리를 알아보기전에 Domain에 대한 이해가 필요하다. 그림을 보면 도메인 주소 뒤에 점이 있다. 점을 기준으로 도메인의 종류를 나눌 수 있다. (맨 마지막에도 점이 있다. 이는 보통 생략된다.)
도메인은 root 도메인, top-level 도메인, second-level 도메인 , sub 도메인으로 나뉜다. 그리고 각각의 도메인을 관리해주는 서버가 존재한다. 이를 name server라고 한다.

  • root 도메인서버 : 제일 최상단에 있는 도메인으로서 top-level에 있는 도메인 서버들의 목록을 알고 있다.
  • top-level도메인 서버 : 우리에게 익숙한 .com, .net을 top-level 도메인이라고 한다. second-levle 도메인 서버의 목록을 알고있다.
  • second-level 도메인 서버 : naver, google 같은 고유의 이름이 second-level 도메인에 해당한다. 이 서버는 sub 도메인 서버와 그 IP를 알고 있다.
  • sub 도메인서버 : naver.com이 주인 도메인이라고 한다면 그 naver.com앞에 오는 단어는 sub domain이다. shopping.naver.com, finance.naver.com , www.naver.com (shopping, finance, www 모두 서브 도메인이고 실제 존재하는 사이트다. ) 이로써 한가지 메인 도메인에 여러개의 서브도메인을 생성해서 그 기능을 나눌 수 있다.

🏗️ DNS 동작 원리

본격적으로 DNS 동작원리에 대해 알아보자. 앞서 살펴 보았던 여러가지 도메인 서버들이 DNS 동작원리에 관여한다. https://google.com에 접속하는 경우를 예로 들어보자.

브라우저는 우선 운영체제의 hosts파일을 찾아본다. 여기에 google.com의 IP가 있다면 그 아이피를 반환해준다.

hosts파일(아래 이미지에는 없다.)에는 우리가 매핑시킨 도메인 이름과 ip주소 쌍이 존재한다. 이 파일은 순전히 우리만의 것이어서 naver.com을 집 공유기 ip로 매핑하면 naver.com에 접속하려 할 때 공유기로 접속하게된다.

두번째로 DNS 캐쉬에 우리가 찾는 도메인이 있는 지 확인한다. 도메인에 접속할 때마다 그 아이피 주소를 캐쉬에 저장한다. 캐쉬에 있다면 바로 IP를 반환한다. ipconfig -displaydns 명령어를 이용해 dns캐쉬를 볼 수 있다.

DNS캐쉬에 정보가 없다면 DNS Rsolver(public DNS)를 확인한다. DNS Resolber란 DNS서버에 IP 주소를 질문하는 역할을 한다. 최종적으로 DNS Resolver가 DNS를 반환해준다. (인터넷 통신사는 도메인 검색에 사용할 DNS Resolver의 ip를 컴퓨터에 저장시키기 때문에 DNS Resolver를 사용할 수 있다.)

DNS Resolver도 자체 캐쉬를 가지고 있기 때문에 DNS 캐쉬에 정보가 존재하면 반환한다. 없다면 루트 네임 서버에 접속하려는 사이트의 IP주소를 물어본다.(resolver는 루트 네임 서버를 알고있다.)

루트 네임 서버에는 top-level 도메인(.com ,.io같은 것) 서버의 ip를 가지고 있다. 루트네임서버는 해당하는 top-level 도메인의 ip를 DNS-Resolver에 전달하고 DNS-Resolvertop-level 도메인 서버에 second-level 도메인 서버 ip주소를 물어본다.(top level 도메인에는 second-level 도메인 서버 ip주소가 있다.)
루트네임 때와 같이 second-levl 도메인 서버 ip를 받아오고 second-level 도메인에서 해당 url의 ip를 반환한다.(sub도메인을 포함한 url의 ip다. sub도메인도 second-level 도메인에서 관리한다.)

꼬리에 꼬리를 물어 DNS를 알게되었다..!

참고자료
https://www.cloudflare.com/learning/dns/what-is-dns/
생활코딩 DNS

profile
SW Engineer를 꿈꾸는 👨‍🌾

0개의 댓글