도입
웹 브라우저로 통신을 할 때 인터넷프로토콜(Internet Protocol)을 사용한다. 웹서버로 Request를 하면 그에 대한 Response가 넘어오며 웹 브라우저를 구성하게 된다. 이때 우리는 통신을 위해 웹서버의 IP를 필요하게된다. 하지만 우리가 웹서버에 요청을 할때는 도메인만 입력을 하게 된다. 호스트를 IP로 변경해주는 역할을 수행해주는 역할을 수행하는 DNS에 대하여 알아보도록 하자.
DNS란?
DNS는 웹서버에 대한 전화번호부라고 비유되며 도메인에 대한 IP와 라우팅 정보를 제공해주는 DB이다. URL의 host부분을 보고 매칭되는 IP정보를 주게 된다. 클라이언트(사용자)는 IP를 몰라도 도메인 명만 알고 있으면 편리하게 웹서버에 요청하여 웹페이지를 구성할 수 있게 된다.
과거의 DNS
최초의 DNS는 hosts 파일로 수행하였다. (맥의 경우 /etc/hosts에서 hosts 파일을 볼 수 있다.)
SRI(Stanford Research Institute)에서 ip와 도메인에 대한 정보를 모아두고 사용자들은 이를 받아서 사용했다.
hosts 파일에 ip와 맵핑되는 domain주소를 넣고 해당 도메인으로 접근하는 방법이었다.
이 방법의 단점은 hosts파일을 매번 업데이트해주지 않으면 최근에 생긴 domain에 접근할 수 없었고, 인터넷이 점점 규모가 커지며 hosts파일에 매번 저장하여 사용하기가 어려웠다.
현대의 DNS
hosts파일을 사용하여 발생한 단점을 보안하고자 DNS가 등장하였다. DNS는 분산 DB서버로 이에 접근하기 위해서는 IP가 필요하다.
이는 SK브로드밴드, KT, LG유플러스와 같은 ISP(Internet Service Provider)가 제공하는 DNS서버 혹은 Public DNS서버 이다.
웹브라우저에서 도메인을 요청하게 되면 우선 Local에 있는 hosts파일을 확인한다. 만약 없다면, DNS에 요청하여 ip주소를 받게 된다.
왼쪽은 나의 Mac의 DNS서버이다. 와이파이나 인터넷이 연결되면 ISP가 제공하는 DNS서버의 IP를 DHCP로 할당하게 된다. 사용중인 와이파이가 KT로 168.126.63.1,2가 할당되었음을 알 수 있다. ISP가 제공하는 DNS외에다른 DNS Server를 사용할 수 있다. 인터넷에 'Public DNS Server'라고 검색하면 다양한 DNS Server를 확인할 수 있다.
DNS의 동작 원리
동작원리를 이해하기 위해 DNS가 어떻게 우리에게 domain에 대한 IP를 제공하는지 알아보도록 하자.
www.naver.com에 대한 ip주소를 찾아가는 과정을 알아보도록 하자.
www.naver.com의 IP를 찾을 때
사용자가 www.naver.com을 검색하면 이 도메인이 hosts에 있는지 확인하여준다. (있으면 반환) 그리고 없으면 위 DNS 서버로 요청을 하게 된다.
- Local DNS에 해당하는 도메인의 정보가 있는지 확인한다.(만약 있으면 ip를 제공하고 끝난다.)
- 만약 Local DNS에 도메인의 정보가 없다면 Root DNS에 www.naver.com에 대한 정보를 요청하게된다.
- Root DNS는 이 중 맨 뒤 com을 확인하여 com에 대한 정보를 가지고 있는 com DNS의 ip주소를 Local DNS에게 전달한다.
- Local DNS는 Root DNS에게 받은 com DNS를 찾아가 www.naver.com에 대한 정보를 요청한다.
- com DNS는 앞 부분인 naver를 확인하여 naver.com DNS의 ip주소를 전달한다.
- Local DNS는 naver.com DNS를 찾아가 www.naver.com에 대한 정보를 요청한다.
- naver.com DNS는 해당 데이터를 확인하여 www.naver.com의 ip주소를 전달한다.
- Local DNS는 이를 사용자에게 전달하게 된다. (추후 다시 접속 시 캐싱되어 위 과정 생략 가능)
지금 이 과정을 보면 굉장히 재귀적으로 동작하는 것을 알 수 있다.
Local DNS -> Root DNS -> com DNS -> naver.com DNS의 순서로 요청을 하고, Local DNS는 www.naver.com에 대한 ip 정보를 요청하는 쿼리를 재귀적으로 보내게 된다. 이 과정을 Recursive Query라고 한다.
host : www.naver.com을 보면 서버 구조가 보인다
www.naver.com의 맨 뒤에는 '.'이 생략되어있다. 이를 root라고 부른다.
위에서 설명한 com DNS를 top-level이라고 naver.com DNS를 second-level라고 부른다.
root, top-level, second-level이 3가지가 모두 각각 서버를 가지고 있다.
이 때 root는 top-level에 대한 정보와 ip주소를 가지고 있다.
top-level은 second-level에 대한 정보와 ip 주소를 가지고 있다.
second-level은 sub에 대한 정보와 ip 주소를 가지고 있다.
이렇게 DNS는 root, top-level, second-level의 형식으로 계층 구조를 보여주며 하위계층의 ip와 정보를 가지고 있는것을 알 수 있다.
DNS 4개의 서버
위에서 언급되었던 4개의 서버에 대하여 알아보자. 위에서 제공하는 주소는 모두 예시이다.
위쪽에 보이는 3개의 서버가 각각 root, top-level, second-level이고 아래쪽의 DNS Server가 Local DNS이다.
먼저 맨 우측에 Root name server(Root DNS)를 알아보자. 아래 a.root-servers.net이라고 주황색으로 표시되어있다. 이는 a번의 root server를 의미하고 실제로는 m.~까지 총 13개의 알파벳으로 root가 구성되어있다고 한다. 그 중 a라는 서버를 표기한 것이다.
맨 아래 빨간색으로 ga NS a.ns.ga라고 표기되어있다. DNS는 DB이므로 데이터를 저장할 때 레코드 형식이 정해져 있다.
ga는 Top-level에 대한 정보를 NS는 해당 정보가 Name Server라는 것이고, a.ns.ga는 해당 Name Server에 대한 값이다.
다음으로 Top-level domain(com DNS)을 알아보자. a.ns.ga라는 서버임을 알 수 있다. 아래 초록색으로 다음을 지정하는 데이터가 Root name server와 동일하게 들어가 있다. 당연히 second-level인 authoritative name server에 대한 정보를 제공한다.
다음으로 authoritative name server를 보자. 여기서는 특이하게 A와 CNAME라는 데이터를 저장한다. A는 IP 주소이고, CNAME은 Canonical Name record의 줄임말로 도메인의 다른말이다. 즉 도메인과 IP를 보내주는것을 알 수 있다.
마지막으로 아래 사용자와 붙어있는 DNS Server를 알 수 있다. 위에서도 언급했듯이 ISP가 연결이 되면서 자동으로 DHCP로 할당해주거나 사용자가 임의로 설정할 수 있다. 제일 중요한것은 이 DNS Server는 무조건 Root name server의 주소를 가지고 있어야 한다.
서버의 4가지 구성요소에 대하여 자세히 알아보았다. 아래 접은글로 다시한번 사용자의 요청부터의 과정을 기재해 두었으니 혹시나 위에서 이해가 부족했다면 읽어보시는것을 추천한다.
사용자가 DNS Server로 domain을 요청한다.
그러면 DNS Server는 캐싱되어있는것이 있는지 확인을 하고 캐싱된 것이 없다면 Root name server(반드시 주소를 가지고 있어야 하는 이유)로 요청한다.
Root name server는 Top-level domain의 정보를 모두 가지고 있으며 해당되는 Top-level domain의 ip를 찾아 DNS Server로 전달한다.
그러면 DNS Server는 전달받은 Top-level domain으로 요청을 하게 된다.
Top-level domain은 전달받은 요청을 확인하고 해당하는 authoritative name server를 제공한다.
DNS Server는 전달받은 authoritative name server으로 요청을 하게 된다.
authoritative name server는 전달받은 요청을 확인하고 해당하는 ip를 제공한다.
DNS Server는 전달받은 ip를 사용자에게 제공하고 사용자는 해당 ip로 웹서버에 접근한다.
이 때 DNS Server가 재귀적으로 계속해서 동일한 요청을 하는 과정을 Recursive Query라고 한다.
DNS에 도메인 등록 과정
위 사진은 등록자가 DNS 서버에 도메인을 등록하는 과정이다.
ICANM은 비영리단체이며 Root name Server(root DNS)를 관리하는 역할을 수행한다.
다음으로 Registry는Top-level domain을 관리하고 운영하는 기관,기업이다.
Registrar는 Registry에 등록을 대행해주는 업체를 의미한다.
Registrant가 Registrar에게 도메인(example.com)을 등록하고 싶다고 요청하였다고 하자. 그러면 Registrar는 이를 Registry에게 요청하고 중복여부 등을 확인하고 일정량의 수수료를 받는 등의 절차를 거친 후 등록을 하여준다.
이때 등록을 하면 Top-level domain에 자신의 도메인을 등록하는 것은 아니고 따로 authoritative name server을 만들어서 등록해주어야한다. 이 과정은 직접 서버를 구축하는 경우도 있지만 등록 대행자가 이 일을 대신 해주는 경우도 있다.
그리고 등록자가 example.com가 들어있는 Name Server의 정보를 등록대행자에게 전달하고 이를 받아 등록소로 전달하여준다. 등록소는 이를 Top-level domain에 저장하게 되며 도메인이 등록된다. 도메인과 맵핑되는 ip는 등록자가 authoritative name server에 직접 넣어주게 된다.
DNS 정보 확인하기
DNS의 정보를 확인하기 위해서는 nslookup 명령어를 사용하면 된다. nslookup 뒤에 도메인 주소를 검색하면 된다.
nslookup으로 naver.com을 검색하여 주소를 알아보도록 하겠다.
% nslookup naver.com
Server: 168.126.63.1
Address: 168.126.63.1#53
Non-authoritative answer:
Name: naver.com
Address: 223.130.200.104
Name: naver.com
Address: 223.130.200.107
Name: naver.com
Address: 223.130.195.95
Name: naver.com
Address: 223.130.195.200
맨 위에 나오는 Server는 DNS Server의 ip를 의미한다. 현재 글쓴이는 KT를 사용하고 있기 때문에 KT에서 제공한 IP가 나오게 된다.
아래에 나오는 Address 정보가 naver.com의 ip 주소임을 알 수 있다. 이때 위에 Non-authoritative answer는 캐시의 도메인을 가져올 경우이다. 속도를 빠르게 하기 위하여 과거에 사용한 도메인에 대한 정보를 DNS Server에 저장하게 된다. 재 요청이 올 경우 저장되어 있는 정보를 보내주게 된다. 하지만 이 정보는 authoritative name server에서 온 정보는 아니기 때문에 부정확할 수도 있다. 따라서 Non-authoritative answer로 보여지게 된 것이다.
마무리
- DNS Server는 4가지로 구성되어 있으며 DNS Server, Root, Top-level, Second-level이 있다.
- DNS는 Recursive Query로 IP를 제공할 수 있다.
- 사용자는 nslookup 명령어로 domain에 따른 ip 주소를 확인할 수 있다.
잘못된 정보나 궁금한점은 편하게 댓글 달아주시면 감사하겠습니다 :)
'Etc > odds and ends' 카테고리의 다른 글
코테 준비를 위한 코테북 제작기 ( Feat. Vuepress) (0) | 2022.02.28 |
---|---|
OSI 7계층을 알아보자. (0) | 2021.12.30 |
URI? URL? URN? (0) | 2021.12.07 |
www.google.com url을 검색하면 일어나는 일 (0) | 2021.12.06 |
Tistory 블로그 글 쓰면 자동으로 GitHub에 올리기 (0) | 2021.11.06 |