인터넷

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

도메인과 네임서버

도메인(domain)

이전 시간에 예제로 사용한 'http://opentutorials.org/user/course/1/logo.html' 를 인터넷 주소, 다른 말로 URL이라고 부른다. 이 중에서 컴퓨터를 가리키는 opentutorials.org를 도메인이라고 한다. 도메인을 이해하기 위해서 전화기를 생각해보자. 전화를 걸 때 필요한 정보는 전화번호다. 그런데 친구들의 전화번호를 모두 기억하는 것은 힘들거나 불가능한 일이다. 그래서 전화기에는 친구의 이름과 그에 해당하는 전화번호를 저장해둔다. 그래서 친구이름 '홍길동'을 입력하고 전화를 걸면, 전화기는 그 친구의 이름에 해당하는 전화번호를 찾아서 자동으로 전화를 걸어준다.

도메인도 똑같다. 컴퓨터는 naver.com과 같은 도메인을 이해하지 못한다. 대신 220.95.233.171과 같은 형식의 ip가 있어야 이에 해당하는 컴퓨터를 찾을 수 있다. 전화기로치면  친구의 이름이 도메인인 naver.com에 해당하고, 친구의 전화번호가 ip인 220.95.233.171에 해당한다. 브라우저의 주소창에 220.95.233.171을 입력해보자. naver.com를 입력한 것과 같이 네이버의 홈페이지가 열릴 것이다. 

IP 주소

위에서 살펴본 220.95.233.171이 IP(Internet Protocol) 주소다. IP는 인터넷에 연결된 장치들의 주소체계라고 할 수 있는데, 인터넷에 연결된 모든 컴퓨터는 IP를 가지고 있어야 한다. 예를들어 여러분이 네이버의 IP인 220.95.233.171을 주소 표시줄에 입력하면 여러분의 브라우저는 IP가 220.95.233.171에 해당하는 컴퓨터를 찾아낸 후에 '네이버의 홈페이지를 주세요'라고 요청하면 네이버의 서버 컴퓨터는 브라우저가 설치된 컴퓨터의 IP 주소로 홈페이지를 전달한다. 서버를 찾아기 위해서 IP가 필요하고, 서버가 클라이언트를 찾아오기 위해서도 IP가 필요한 것이다. 인터넷 통신에 참여하는 컴퓨터는 모두 IP를 가지고 있어야 한다는 점을 기억하자. 이러한 특성을 이용해서 정보기관은 인터넷 사용자를 추적할 수 있다. IP추적이라는 말 한번쯤은 들어봤을 것이다.

DNS(Domain Name Service) 서버

브라우저에 도메인을 입력하면 제일 먼저  도메인에 해당하는 IP를 알아내야 하는데, 전세계에는 셀 수도 없을만큼 많은 도메인이 있다. 이 도메인의 IP를 모두 컴퓨터 안에 저장한다는 것은 거의 불가능하다. 이 때 사용되는 것이 DNS 서버다. DNS 서버는 Domain Name Service의 약자인데, 이 서버가 도메인에 대한 IP 정보를 모두 가지고 있다. (그림.1) 사용자가 브라우저 주소창에 도메인을 입력하면 브라우저는 그 도메인에 해당하는 IP 주소를 찾기 위해서 (그림.2) DNS 서버에 접속한다. (그림.3) DNS 서버는 도메인에 대한 IP 주소를 알려준다. (그림.4) IP 주소를 획득한 브라우저는 인터넷에 접속해서 IP 주소에 있는 컴퓨터를 찾아간다. 그리고 사용자가 요청한 웹페이지를 서버 컴퓨터에게 요청한다. 서버 컴퓨터에는 이러한 요청을 처리해서 응답할 수 있는 소프트웨어가 설치되어 있는데 그것이 웹서버다. (그림.5) 웹서버는 요청한 웹페이지를 사용자에게 전달하고, (그림.6) 웹페이지가 화면에 표시된다.

DNS서버는 독특한 방법으로 IP를 알려준다. 앞서 언급한 것처럼 세상에는 정말 많은 도메인이 있다. 그렇기 때문에 한대의 DNS 서버에 모든 주소를 저장하는 것은 불가능하다. 도메인에 따른 IP 주소는 전세계의 DNS 서버에 흩어져 있어서, 정해진 규칙에 따라서 IP 정보를 제공한다.

서브 도메인

동작 방법을 알아보기 전에 도메인의 구성을 자세히 살펴보자. 예를들어, 도메인 opentutorials.org 는 오픈튜토리얼스의 서버를 가리킨다. 만약 오픈튜토리얼스의 내부 구성원들간에 커뮤니케이션을 위해서 게시판을 운영해야 하고, opentutorials.org 와는 다른 서버를 사용해야 한다면, 도메인을 새로 구입해야 할까? 아니다. DNS 서버에 bbs.opentutorials.org에 대한 IP를 등록하면 opentutorials.org와 bbs.opentutorials.org가 가리키는 IP를 서로 다르게 설정해서, 각각의 도메인이 서로 다른 서버를 가리키게 할 수 있다. 이런 것을 서브 도메인이라고 부른다. 서브 도메인을 이용하면 하나의 도메인이 여러개의 IP를 가리키게 할 수 있어서 도메인 구입 비용을 절약할 수 있다. 아래 그림을 보면 www.opentutorials.org, bbs.opentutorials.org, file.opentutorials.org가 똑같은 도메인인 opentutorials.org 을 사용하면서도 각각 서로 다른 컴퓨터의 IP를 가리키고 있다.

참고. opentutorials.org는 www.opentutorials.org와 같은 의미다. www는 생략이 가능하다.
참고. 여러 도메인이 하나의 IP를 가리키도록하고, 도메인의 이름에 따라서 서로 다른 디렉토리의 파일들이 서비스 되도록 할 수 있는데 이런 방식을 가상호스트(virtual host)라고 한다.

도메인의 계층관계

위의 그림에서 www, bbs, file을 서브 도메인이라고 부르고, 위의 예제에서는 서버를 식별하기 위해서 사용됐다. 그리고 opentutorials는 서브 도메인인 www, bbs, file를 포괄하는 상위 도메인으로 사용되고 있고, .org는 최상위 도메인으로 opentutorials가 영리를 목적으로 하지 않는 비영리의 단체나 서비스라는 점을 의미한다. 그리고 최상위 도메인의 상위 도메인이 하나 더 있는데, 이것을 루트 도메인(root domain)이라고 부른다. 루트 도메인은 모든 도메인의 뿌리이기 때문에 '.org'의 org나 '.com'의 com과 같은 도메인 이름이 없고 그냥 '.'으로 표시된다. 그런 이유로 도메인을 표기할 때 일반적으로 생략한다. 하지만, opentutorials.org. 과 같이 주소를 입력해도 정상적으로 잘 작동한다.  이해를 돕기 위해서 비유하자면 루트 도메인 '.'에는 '.org'라는 디렉토리가 들어 있고, '.org' 안에는 '.opentutorials'라는 디렉토리가 있고 '.opentutorials' 안에는 다시 www, bbs, file이 있는 셈이다. 이 관계를 그림으로 나타내면 아래와 같다. 

최상위 도메인

최상위 도메인은 도메인을 구분하는 가장 큰 카테고리인데, 도메인을 성격에 따라서 분류한 것이다. 이것은 국제기구인 ICANN에서 관리하기 때문에 도메인을 구입하려면 미리 정해져있는 최상위 도메인 중의 하나를 골라야 한다. 도메인을 고르는 방법은 생활코딩의 도메인 수업을 참고하자. 아래는 몇가지 대표적인 항목이다. 전체 목록은 위키백과를 참조하자.

  • com
  • net
  • org
  • co.kr
  • ac.kr

이제 DNS 서버가 어떻게 동작하는지 알아볼 차례다. 전세계에는 수만대의 DNS 서버가 있다. 한대의 DNS 서버가 모든 도메인에 대한 정보를 가지고 있는 것을 어려운 일이다. 그래서 인터넷에서는 도메인 정보를 분산해서 저장하고 있다. 예를들어 lab.opentutorials.org의 IP 주소를 조회한다고 해보자. 이 도메인에서 가장 상위에 있는 도메인은 무엇일까? 루트 도메인이다. 루트 도메인은 전세계에 13개가 존재하고, 이 도메인의 IP는 잘 변경되지 않기 때문에 모든 DNS 서버는 루트 도메인을 알고 있다. 여기가 출발점이 되는 것이다. 아래 그림을 보자.

 

클라이언트는 브라우저가 설치된 컴퓨터다. 사용자가 URL을 주소창에 opentutorials.org를 입력하고 엔터를 치면, (1) 브라우저가 설치된 컴퓨터는 opentutorials.org의 IP를 알아내기 위해서 가장 가까운 곳에 위치한 DNS에 opentutorials.org의 IP를 문의 한다. (2)가장 가까운 DNS 서버가 IP를 알고 있다면 즉시 IP 주소를 알려준다. 하지만 IP 주소를 모르면 루트 도메인 네임서버에게 문의한다. (3) 루트 네임서버는 도메인의 최상위 도메인이 .org인 것을 보고 .org가 등록된 네임서버의 IP를 전달한다. 이것은 이런 의미가 된다. "나는 IP 주소를 가지고 있지 않지만, .org 네임서버에게 물어보면 도와줄꺼야" (4) 가장 가까운 DNS는 org 도메인을 관리하는 네임서버에게 문의한다. (5) org 네임서버는 opentutorials의 네임서버 IP 주소를 알려준다. (6) 가장 가까운 DNS 서버는 opentutorials의 네임서버에게 문의하고, (7) www 의 네임서버를 알려준다. (8) 최종적으로 www 네임서버에게 문의 후 (9) www.opentutorials.org의 IP 주소를 얻는다. (10) 가장 가까운 DNS 서버는 이 IP 주소를 클라이언트에게 알려준다. 클라이언트 컴퓨터는 이 IP를 브라우저에게 알려주면 브라우저는 이 IP에 해당하는 컴퓨터에 접속 할 수 있게 된다. 

authoritative DNS 와 cache DNS

위의 절차를 가만히 보면 DNS 서버는 두가지 일을 한다. 하나는 IP 주소를 저장, 수정, 삭제하는 기능으로 authoritative DNS라고 부른다. 그리고 다른 하나는 도메인에 대한 IP 주소에 대해서 문의 받았을 때 이에 대한 답변을 해주는 기능으로 cache DNS라고 부른다. cache DNS는 자신이 저장하고 있지 않은 도메인에 대한 IP 주소 질문을 받았을 때 IP 주소를 알고 있는 다른 서버에게 질문을 하는데 이 때 질문하는 서버는 cache DNS라고 할 수 있고, 답변하는 서버는 authoritative DNS라고 할 수 있다. 즉 DNS 서버는 질문과 응답의 기능을 모두 가지고 있는 시스템이다.

'가장 가까운 DNS  서버'의 의미

위의 그림에서 가장 가까운 DNS 서버의 의미는 클라이언트에 기본적으로 등록되어 있는 DNS 서버를 의미한다. 클라이언트는 최소 한개 이상의 DNS 서버가 등록되어 있어야 이 DNS 서버를 이용해서 접속하고자 하는 도메인에 대한 IP를 알아낼 수 있다. 기본 DNS라고도 하는데 이 정보는 인터넷에 연결하면 인터넷 서비스 제공자(KT, SK브로드밴드 등)에 의해서 자동으로 설정된다. 기본 DNS를 직접변경하려면 아래의 자료를 참조한다. 이전 단락에서 언급한 분류법에 의하면 '가장 가까운 DNS'는 cache DNS에 해당된다.

캐쉬

전세계에 흩어져 있는 네임서버들은 이렇게 협력해서 도메인과 IP를 연결해주고 있는 것이다. 이것은 마치 낮선 곳을 찾아갈 때 그 동네 사람들에게 물어 물어서 목적지를 찾아가는 것과 흡사하지 않은가? 그런데 실제로 네임서버는 이것 보다 조금 더 복잡하게 동작한다. 한번 조회한 IP 주소는 각 단계의 네임서버들에 저장되어 있어서, 다음 요청이 들어올 때 다른 네임서버에 방문할 필요가 없이 저장된 IP 주소를 알려줘서 시간과 네트워크 트래픽 부담을 줄인다. 한번 처리 한 작업을 보존해서 속도와 비용을 절감하는 행위를 캐쉬(cache)라고 한다. 이러한 캐쉬 메커니즘은 브라우저를 비롯해서 클라이언트 각 단계의 DNS 서버가 모두 가지고 있다. 그런 이유로 도메인의 IP 주소가 변경되었는데도 불구하고, IP가 변경되지 않는 경우가 있다. 이런 경우 1~2일 정도 경과된 후에는 자동으로 캐쉬들이 새로 만들어지기 때문에 자동으로 해소된다. 또는 도메인의 소유자가 자신의 도메인의 캐쉬 갱신 주기를 저정 할 수 있다. 그것을 TTL이라고 하는데, 여기서 다루기에는 복잡한 문제이므로 다른 자료를 참고하자.

HOSTS 파일

인터넷 초창기에는 도메인이 많지 않았다. 그래서 컴퓨터에 hosts라는 파일을 만들고 이 파일에 도메인과 IP 주소를 쌍으로 기록했다. 그리고 정기적으로 hosts 파일을 다운받아서 새로 갱신된 도메인을 등록했다. 하지만, 인터넷이 폭발적으로 팽창하면서 이런 방식으로는 도메인과 IP를 중계하는데 한계가 도달하면서 DNS 서버라는 개념이 등장한 것이다. DNS 서버 이후에도 hosts 파일은 남아있는데, 이제는 특정한 도메인을 특정한 IP로 강제로 매칭시키는 작업 등을 하는데 사용한다. 이를테면 naver.com 도메인을 입력하면 자신이 소유한 컴퓨터의 IP로 이동하게 하는 등의 일을 할 수 있다. hosts 파일에 대한 자세한 내용은 생활코딩 도메인 수업을 참조 한다.

참고

댓글

댓글 본문
  1. 웹뉴비
    감사합니다.
  2. 바나나
    도메인의 계층관계 아래에 된 그림에 잘못된 부분이 있내요.
    .co.kr이나 .co.jp같은 건 자체가 최상위 도메인이 아니라 각각 .kr / .jp 아래의 2차 도메인이 됩니다.
  3. 감동받은아이
    감동이라고 밖에 표현할수 없는 설명입니다요
  4. ㅇㅈㅇ
    와...
  5. 니전화번호
    잘 봤습니다. 감사합니다.
  6. 신입4일차
    진짜 이해하기 쉽다
  7. Soori
    헐.. 대박ㅠㅠ 최고십니다 bb
  8. 처제의일기
    훌륭한 글이네요.
  9. GOOODDD~~!
    음 아주 이해가 쉽게 잘 설명되어있네요!! 감사합니다
  10. Latild
    그 동안에 읽어 보았던 설명 중에, 최고 입니다.
    이해도 잘 되고 지루하지도 않습니다.
    적절한 그림과 정확한 설명이 너무 마음에 듭니다.
    이런 포스팅을 볼 수 있게 되어서 영광 입니다.ㅠ.ㅠ.
    좋은 글 대단히 고맙습니다.
  11. 오오대박
    감사합니다
  12. 늘생릭코네
    쭉 읽었어요
  13. 박준영
    명강의네요 감사합니다
  14. 김승욱
    잘 봤습니다. 개념을 이해하는 데에 도움이 많이 되었습니다. 감사합니다.
  15. 정광호
    위와 같은 이유로 여러 악성코드들이 hosts파일 변조를 시도하는 거군요...ㅎ
  16. egoing
    예 다음 챕터가 IP인데 거기서 언급하도록 할께요. 고맙습니다.
    대화보기
    • Sangjin Sim
      IP주소의 경우 IPv4와 IPv6가 있습니다. 둘에 대해서 구분되어서 이야기해주셔야 할 듯 합니다.^^;
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기