DNS, 작동원리와 구현

채재헌·2022년 8월 4일
1
post-thumbnail

이번 시간에는 인터넷 기반의 작동 원리인 DNS의 작동원리와 이것이 인터넷에서 어떻게 활용되는지 구체적으로 조사해보도록 하겠다. 이 조사를 시작하게된 계기는 이전 시간에 IP 주소의 개념을 배우고 컴퓨터가 다른 서버에 들어가기 위해서 굳이 복잡한 숫자로 구성된 주소를 사람들이 외우고 다니지 않는데 어떻게 이를 대체하여 인터넷에 접속하였는지 궁금하여 이 조사를 시작하게 되었고, 서버와 인터넷간의 관계에 대해 더 구체적으로 이해하고 싶어서 이렇게 실습을 통한 정리를 하였다.

🎆 What is DNS ??


노트북부터 대규모 소매 웹 사이트의 콘텐츠를 서비스하는 서버에 이르기까지 인터넷상의 모든 컴퓨터는 숫자를 사용하여 서로를 찾고 통신합니다. 이러한 숫자를 IP 주소라고 합니다. 웹 브라우저를 열고 웹 사이트로 이동할 때는 긴 숫자를 기억해 입력할 필요가 없습니다. 그 대신 example.com과 같은 도메인 이름을 입력해도 원하는 웹 사이트로 갈 수 있습니다.


ex) 클라이언트로써 도메인을 사용할때 필요한 구체적인 예시


🎞 History


인터넷 연결된 한대 한대가 host라고 한다. 호스트와 호스트가 서로 통신을 하기 위해서는 서로에 대한 주소가 필요한데, 이 주소를 IP 주소라고 부른다. 이 IP주소 덕분에 인류는 호스트와 호스트를 연결해서 통신을 할 수 있게 되었고, 이것은 한대의 컴퓨터가 한대의 한계를 초월한 위대한 순간이 되었다. 그리고 IP주소를 바꾸고 도메인의 이름은 그대로 유지하는 유연함을 가질 수 있었고, 이러한 유연함을 실현 하기 위해서는 중간에 신뢰 할 수 있는 Stanford Research Institute 라는 곳이 있었다. 예를 들어 이곳에 example.com의 IP 주소인 93.184.216.34로 바꿔 달라고 요청하면 직원이 Stanford Rearch Institute에서 관리하는 hosts 파일에다가 갱신을 시켜주는 것이다. 그리고 컴퓨터가 Stanford Rearch Institute에 있는 hosts 파일을 다운로드 받아서 컴퓨터에다가 덮어쓰기 한 다음 호스트와 호스트와 연결해서 통신을 하게 되었다. 처음에는 IP주소를 이용해서 다른 컴퓨터에 접속할 수 있게 된것만으로도 사람들은 행복하였지만, IP 주소를 이용하기 시작한 직후에 여러가지 불만족이 나왔고, 그 중 복잡한 IP 주소를 기억하기 너무 어려웠던것이다.



이러한 문제를 해결하기 위해서 인터넷의 신이라고 불리며 존경받는 존 포스텔폴 모카페트리스가 나타나면서 Domain Name System 줄여서 DNS가 만들어졌다. DNS의 핵심은 DNS 서버이다. 이 서버에는 수많은 IP 주소의 도메인 이름이 저장되어 있다.


예를 들어 사용자가 www.icann.org라고 입력하면 사용자의 운영체제는 몰래 DNS 서버에 접속해서 icann.org의 IP주소가 무엇인지를 물어본다. DNS 서버가 ip 주소를 사용자의 컴퓨터에게 알려주면 비로소 사용자의 컴퓨터는 ip 주소에 해당하는 컴퓨터에 접속하게 되는것이다.


🎇Principles of DNS


  • DNS의 원리는 아래의 예시를 보면서 설명하겠다.

💡 여기 보면 컴퓨터 2대가 있다. 여기서 한 컴퓨터가 93.184.216.34라는 ip 주소를 가지고 있는 컴퓨터에 접속하고 싶다면 어떻게 해야할까 ??

  • (1) IP주소를 가지고 있는 컴퓨터가 Domain Name System Server에 요청하는 과정


예를 들어 example.com이라는 주소를 이 컴퓨터가 가리키게 하고 싶다면 DNS, 즉 Domain Name System Server라는곳에 자신의 ip 주소인 93.184.216.34를 example.com이라는 주소를 갖게 하고 싶다고 요청을 하는것이다. 그럼 Domain Name System Server는 요청을 받고서 example.com이 93.184.216.34라는 ip주소라는것을 기억하게 된다.


  • (2) 다른 컴퓨터가 DNS를 통해서 IP주소를 알아내고 접속하는 과정

자 그럼 이제 다른 컴퓨터가 인터넷에 연결한 순간 DNS에 ip를 알기 때문에 사용자가 웹브라우저를 예를 들어서 그 샘플 닷컴이라고 치고 엔터를 치면 컴퓨터는 약속된 대로 호스트 파일을 찾아본다. 만약 호스트 파일에는 example.com에 대한 설명이 없으면 다음 DNS에 접속하여 그 example.com의 DNS의 ip가 뭐냐고 물어보는것이다. 그러면 DNS 서버는 자기가 기억하고 있는 이 ip 주소를 응답해주게 된다. 이러한 응답을 통해서 컴퓨터는 example.com의 ip를 알게 된다, 그러면 해당 ip를 이용해서 접속하고 통신을 하게 된다.


✨Structure of Domain name


Domain Name System Server에는 도메인에 대한 IP를 기억하는 기능물어보면 알려주는 기능을 갖는 기계이다. 이러한 기계는 한대만 있는것이 아니고 전세계의 수천 대에서 수만대가 흩어져서 서로 분산되고 협력하는것을 통해서 전세계인들이 인터넷을 IP를 기억하지 않고도 쉽게 사용할 수 있도록 돕고 있다. 그럼 그게 어떻게 가능한지를 알아보자.


위의 그림에는 주소가 그려져 있다. 하지만 잘 알려져 있지 않는 사실은 이 도메인의 주소 뒤에는 .이 생략되어 있다. "."은 특별한 정보를 담고 있지 않기 때문에 생략하고 있는 것일 뿐 "."은 실제로 존재한다.

도메인에서 각각의 부분마다 이름이 있는데 이제 이름을 따져보자.(위의 그림 참조)

"." : 가장 최상위에 있는 도메인이라고 해서 Root 도메인이라고 불린다.

".com(co.kr, kr,등) " : 가장 높은 레벨에 있는 도메인이라고 해서 Top-level 도메인 이라고 불린다.

"example" : Top-level 도메인 밑에 위치하여 second-level 도메인이라고 불린다.

"blog" : Second-level 도메인 밑에 위치하여 sub 도메인이라고 불린다.


여기에 있는 도메인에 있는 각각의 부분들은 위의 그림과 같이 각각의 부분들을 담당하는 독자적인 서버 컴퓨터들이 존재한다. Root 도메인을 담당하는 DNS 서버는 그 하위라고 할 수 있는 Top-level 도메인을 담당하는 서버들을 알고 있고, Top-level을 담당하는 DNS 서버는 Second-level 도메인을 담당하는 서버들을 알고 있고, Second-level DNS 서버는 Sub 도메인을 담당하는 목록과 IP 주소를 알고 있다.(즉 상위가 직속 하위 파트를 알고 있어야 한다.)


이렇게 상위 관계를 가지고 있는 서버들 중 사용자의 컴퓨터는 무조건 Root DNS 서버의 IP 주소를 알고 있고, 이를 통해 먼저 Root DNS 서버에 IP 주소를 요청하고, Root DNS 서버는 IP 주소 대신 com을 담당하는 Name sever의 ip를 알려주게 된다. 그리고 사용자의 컴퓨터는 다시 Top-level DNS 서버에게 물어보고 example을 담당하는 Name sever(second-level)의 IP 주소를 알게되고 마지막으로 blog을 담당하는 Name sever(sub)의 IP 주소를 받아 요청하여 IP 주소를 얻게 된다. (과정이 꽤나 복잡하기 때문에 Domain Name Registration Process and Principles에서 Process 부분의 예를 살펴보면 이해가 잘 될것이다.)


📍Domain Name Registration Process and Principles


➡위 그림은 DNS의 행정적인것과 기술적인것이 어떻게 상호조화를 통해서 문제를 해결하고 있는지를 나타내고 있다.((밑에서 부터는 그림을 참조하면 좋겠습니다.)


🎳 -Element


-Registrant(등록자)


위에 93.184.216.34라는 IP 주소를 가지고 있는 등록자(컴퓨터)는 서버로 쓸것이고 이 컴퓨터에다가 example.com이라고 하는 주소를 부여하고 싶다고 가정해 보자.


-ICANN


DNS의 최고 정점에 가장 꼭대기에 있는 ICANN이라는 비영리 단체가 있다.이 비영리 단체가 하는 일은 전 세계의 IP 주소를 관리하고, Root Name Server들에 관리자이다.즉, ICANN이라고 하는 조직은 인터넷이라고 하는 체계의 옛 관리자의 역할을 하는 거대한 비영리 단체라고 보면 된다.


위의 그림의 Root Name Server에 주소인 a.server.net이라고 하는 주소를 가지고 있는 컴퓨터가 있는 것이다. 하지만 이 한대의 컴퓨터가 있는것이 아니고 전세계의 a로부터 시작해서 m까지의 root-server.net이라는 주소까지 총 13개의 Root Name Server가 전세계에 흩어져 있다. 그리고 13대의 컴퓨터가 아니라 각각의 컴퓨터는 다시 쪼개져 갖고 전세계에 흩어져 있기 때문에 수백대의 성능 좋은 컴퓨터가 전세계를 흩어져서 Root Name Server로써 동작하고 있는것이다.


이번 시간에는 그 중 하나인 a.server.net만 예로들어 실제로는 13개의 주소를 가지고 Root Name Server는 전세계로 흩어져 있다고 보면 된다.


-Registry(등록소)


Registry는 .net,co.kr kr과 같은 Top-level domain들을 관리한다고 생각하면 된다. 그리고 지금 사진은 .com을 관리하는 Top-level-domain을 예시로 하고 있고, 이 Name Server의 주소는 a.gtld-server.net가 있다고 하지만, 역시나 .com도 역시나 여러개의 Name Server를 가지고 있다.


-Registrar(등록대행자)


위의 등록소가 Top-level domain인 name server를 관리한다면 이 name server에다가 실제로 이 등록자의 등록 작업을 대행해주는 업체나 기관이 등록된 자가 되는 것이다.


-System

이제 example.com이라는 주소를 세우고 싶다면 직접 등록소에게 접근하는것이 아니라 등록대행자인 Registrar에게 example.com이라는 도메인을
쓰고 싶다고 이야기 하면 Registrar는 등록소에게 example.com에 등록하는 것이다. 물론 그 과정에서는 이미 도메인이 존재한다면 쓸 수 없고, 등록자는 등록을 하려면 수수료를 내어서 이 체계가 운영되는 것이다.


- Root Name Server

Root Name Server의 역할은 전세계에 있는 Top-level domain 서버들의 주소를 기억하는 것이다. 밑에 com NS a.gtld-servers.net이라는 주소라는것이 Root Name Server에는 세팅 되어있고 이것으로 인해 .com이 누가 관리하는지를 알수 있게 되는 것이다.(.com 뿐만아니라 org도 될 수 있고 다 같은 원리이다.)


실제로 자신의 도메인을 운영하기 위해서는 등록소에 Top-level domain에다가 IP 주소를 등록 할 수는 없고, 자신의 도메인을 운영하기 위해서는 서버 1대를 마련해 거기에 Name Server를 다운 받아야 한다. Name Server를 설치한 컴퓨터가 a.iana-servers.net라고 간주해보자. 그리고 이 컴퓨터에다가 도메인을 세팅해준다.


🎄 - Setting


1.등록대행자에게 example.com NS a.iana-server.net이라는 정보를 보낸다.

=>Root name Server가 Top-level domain을 알고 있는것처럼 Top level domain도 사용자가 사용할 네임서버가 누구인지 알고 있어야 한다.


2.등록대행자가 사용자 대신에 등록소(Registry)에게 example.com의 Name Server는 a.iana-server.net이다 라고 알려주게 된다.

=>등록소는 자신이 관리하고 있는 Top-level domain에 example.com에 Name Server가 누구인지 기록해두는 것이다.


  1. Name Server의 example.com이라는 도메인을 관리할 Name Server에게 example.com의 ip 가 93.184.216.34다고 세팅해 준다.

=>Name Server에게 example.com에 A는 Address라는 뜻이고, 주소는 98.184.216.34라고 알려주면 Name Server는 이제 example.com의 IP를 알게 되는 상태가 된다.


-여기서 참고!!!

example.com A 93.184.216.34

example.com NS a.iana-servers.net

com NS a.gtld-servers.net

와 같이 중간에 A와 N와같은 것들은 Record type 이라고 부른다.


🎉 - Process

이제 클라이언트 컴퓨터를 가지고 example.com에 접속하는것을 살펴 보겠다.

-여기서 기억해야 할점!!!

1.) 사용자의 컴퓨터는 168.216.63.1이라는 DNS 서버를 이용해서 자신이 필요한 도메인의 IP를 알아낸다.


이 접속을 하기 위해서는 인터넷을 사용하기 위해서 컴퓨터 렌선을 꼽거나 또는 와이파이 연결을 하는 순간에 자동으로 어떠한 메커니즘에 의해서 컴퓨터가 도메인 정보를 조회 할 때 사용할 도메인 Name Server에 주소가 자동으로 세팅이 된다. 이러한 메커니즘은 인터넷을 연결하는 순간에 사용자가 사용하는 인터넷 서비스 제공자(kt,skt)같은 회사들이 사용자가 앞으로 사용할 DNS 서버에 IP를 자동으로 세팅해준다는 말이다.


2). 전 세계에 있는 모든 도메인 서버는 반드시 어떠한 정보를 기본적으로 알고 있다. 즉 도메인 네임 서버에 코드가 박혀 있다라고 할 수 있다.


  1. 사용자의 컴퓨터에서 example.com을 검색하면 DNS Server가 Root Name Server에게 물어 본다.

=>여기서 Root Name Server는 example.com의 IP를 모르지만, .com을 누가 관리하는지는 알고 있다.


2.Root Name Server는 .com을 관리하는 a.gtld-servers.net을 알려준다.


3.DNS Server는 다시 a.gtld-server.net에 example.com을 누가 관리하는지 물어본다.

=>여기서 a.gtld-server.net은 ip가 무엇인지 모른다.


  1. a.gtld-server.net은 example.com의 ip를 알고 있는 Name Server에 주소를 알려준다.


5.DNS Server가 다시 Name Server에 example.com이 있는지 물어본다.

=>Name server에는 example.com의 주소가 존재한다.


  1. Name Server는 ip 주소를 사용자 컴퓨터에 연결된 DNS Server에게 돌려주게 되는것이다.


  1. 그럼 이 DNS 서버는 그렇게 알아낸 IP주소를 사용자의 컴퓨터에 조용히 공급하는것을 통해서 사용자의 컴퓨터는 실제로 93.184.216.34라는 IP에 해당되는 컴퓨터에 접속해서 인터넷이 동작하게 한다.


💎 * Buying My Domain Name


<실습>
이번에는 지금 주제의 최종 목적인 내가 도메인을 이해하고 나의 도메인 이름을 갖는것이다. 이러한 실습 활동을 통해서 이론적으로 이해한 도메인을 실제로 장만해보고 인터넷상의 내가 원하는 도메인 이름을 보는것이다.


내가 이번에 실습하는것은 dns4u.ga라는 도메인을 만드는것이다. 그리고 서버로 사용할 IP 주소는 52.231.13.171이고 이 IP를 dns4u.ga로 해서 전세계에 있는 컴퓨터들이 이 도메인을 통해서 해당 ip로 접속할수 있도록 하는것이다.
이것을 하기위해 Registrar를 통해서 Registry 등록해야한다. 하지만 이번에 등록하고자 하는 도메인은 Top-level domain이기 때문에 ga라고 하는 Nane Server를 관리하고 있는 Registry에게 등록하면 되는것이다.


이번 시간에 등록대행자로써는 freenom.com이라는 서비스를 썼다.


<순서>

  1. freenom.com 사이트에 회원가입을 한다.

  2. Register a New Dmain에 들어간다.

  3. 사용하고 싶은 도메인을 검색창에 적고 도메인을 선택하고, 얼마나 쓸것인지 기간을 정해준다.

  1. 나의 정보를 적어주고 다시 홈으로 들어가서 My Domain에 들어가면 내가 구매한 도메인의 리스트가 나올것이다!!!!
  1. 리스트에서 해당 도메인의 도메인 관리를 클릭해서 freenom dns를 클릭한후
    dns의 ip주소를 입력해준다.
  1. 이렇게 주소를 입력해주면 나만의 도메인 장만을 성공했을것이다.


📢 What is a CNAME ??


A 타입 record 는 어떤 도메인 주소에 대한 ip 주소를 맵핑시키는것으로 A타입 레코드라고 한다 . 반면 CNAME 레코드는 일종의 별명을 지어주는것이다. 예를 들어 위의 그림을 볼때 example.com에 대한 별명으로써 www.example.com이라는 주소를 정하는것이다.


위의 그림을 다시 정리해보자면 A레코드에 의해서 192.0.1.1이 열리고 www.example.com으로 누군가가 접속을 하게 되면 CNAME 레코드 타입에 의해서 example.com이라는 주소로 연결되는데 example.com은 IP 주소가 아니기 때문에 다시 192.0.1.1로 연결이 되는것이다.(아래의 cdn.example.com도 똑같은 방식임)


Reference

https://www.youtube.com/watch?v=Kt1Cq8o79HI&list=PLuHgQVnccGMCI75J-rC8yZSVGZq3gYsFp&index=14
https://aws.amazon.com/ko/route53/what-is-dns/

profile
후회없이 도전적이고, 나의 선택을 믿는 자신이 되자!!!

0개의 댓글