월간네트워커

인터넷의 전화번호부 – DNS

By 2003/10/06 10월 29th, 2016 No Comments

이동영의 ‘떼끼’

이동영

우리가 웹브라우저에서 어떤 서버의 이름(주소)을 써 넣으면 그 서버로 연결되어 홈페이지의 내용을 볼 수 있다. 예를 들어 http://www.jinbo.net 이라는 웹주소를 써 넣으면 진보넷의 홈페이지를 볼 수 있는 것이다. 그러면 컴퓨터는 어떤 과정을 통해 이런 일을 할 수 있는 것일까. 전화망이 전화기들의 네트워크인 것처럼 인터넷은 컴퓨터들의 네트워크이다. 전화기마다 고유한 전화번호가 있는 것처럼, 인터넷에 연결된 컴퓨터들에는 IP 주소라고 하는 숫자로 된 고유한 주소가 있다. 이 IP 주소는 0에서 255까지의 숫자 네 개가 연결된 구조로 되어 있다. 예를 들어 진보넷 웹서버의 IP 주소는 211.255.23.35이다. 따라서 전화를 걸기 위해 상대방의 전화번호를 알아야 하는 것과 마찬가지로 인터넷에 있는 다른 컴퓨터와 연락을 하기 위해서는 그 컴퓨터의 IP 주소를 알아야 한다.
그런데 이 IP 주소(번호)는 사람이 기억하기가 어렵기 때문에 보통 숫자 대신 글자로 된 "도메인 네임"을 사용한다. 위에서 예를 든 진보넷 웹서버의 이름은 www.jinbo.net이다. 즉 사람은 도메인 네임이란 이름을 사용하지만 컴퓨터는 숫자로 된 IP 주소를 사용하는 것이다. 그렇다면 사람이 입력한 도메인 네임을 IP 주소로 변환해주는 과정이 필요할 것이다.

인터넷의 전화번호부

IP 주소를 전화번호라고 한다면, 도메인 네임은 상대방의 이름이라고 할 수 있겠다. 모든 전화번호를 기억할 수 없으므로 수첩이나 전화번호부를 찾아보는 것과 마찬가지로, 도메인 네임을 IP 주소로 변환하는 가장 간단한 방법은 둘을 짝짓는 변환표를 사용하는 것이다. 예를 들어 다음과 같은 변환표가 있으면 www.jinbo.net의 IP 주소가 211.255.23.35라는 것을 쉽게 알 수 있다.
www.jinbo.net 211.255.23.35
go.jinbo.net 61.250.134.6
www.hani.co.kr 218.237.67.20
실제로 인터넷이 처음 개발되었을 때에는 컴퓨터마다 이러한 변환표를 가지고 있었고, 지금도 (예전처럼 여기에만 의존하는 것은 아니지만) 이런 변환표를 가지고 있다. 유닉스/리눅스 시스템에서는 /etc/hosts 라는 이름으로, 윈도우즈를 쓰는 PC에서는 윈도우즈 디렉토리 안에 (정확한 위치는 윈도우즈 버전에 따라 다르다.) hosts라는 이름으로 존재하는 파일이 그것이다. 그런데 이 간단한 방법은 네트워크가 복잡해짐에 따라 곧 한계에 부딪히게 된다. 먼저 컴퓨터의 수가 많아짐에 따라 한 파일에 모든 컴퓨터에 대한 정보를 수록하기가 어렵다는 점을 생각할 수 있고, 근본적으로 변환표를 각각의 컴퓨터가 따로 가지고 있으므로 이들 사이에 일관성이 깨어지는 경우 혼란이 발생하게 된다. 네트워크에 컴퓨터가 추가되거나 어떤 컴퓨터의 IP 주소가 바뀔 때마다 모든 컴퓨터에 있는 변환표를 한꺼번에 수정하는 것은 쉽지 않은 문제이다.

DNS

이런 문제점들을 해결하기 위해 개발된 것이 DNS(Domain Name System)이다. DNS에서는 변환표가 각각의 컴퓨터마다 있는 것이 아니라, 네임 서버라는 정해진 컴퓨터가 변환표를 가지고 있고 관리하면서 다른 컴퓨터들의 질의에 응답한다. 즉 다른 컴퓨터들은 도메인 네임과 IP 주소를 변환할 필요가 있을 때마다 네임 서버에 물어봐서 해결하는 것이다. 다시 전화에 비유하자면, 전화번호를 알아보기 위해 114 서비스에 문의하는 것과 같다. 그러면 우리 집 전화번호가 바뀌었을 때 모든 사람들에게 전화번호가 바뀐 것을 알려줄 필요 없이, 114에만 바뀐 전화번호를 알려 주면 되는 것이다.
또한 네임 서버들은 인터넷에 있는 모든 컴퓨터의 주소를 관리하는 것이 아니라 각각 일정한 영역만을 맡고 있다. 이것은 도메인 네임이 계층적으로 구성되어 있다는 성질을 이용한 것이다. 예를 들어 진보넷의 네임 서버는 jinbo.net에 속하는 (이름이 jinbo.net으로 끝나는) 컴퓨터들의 주소를 관리하고 있다. 따라서 진보넷 안에 있는 컴퓨터의 이름이나 IP 주소가 바뀌었을 때 관리자는 진보넷 네임 서버에만 변경 내용을 반영하면 되는 것이다.

위 그림에서 www.jinbo.net이란 이름의 IP 주소가 무엇인지를 알고 싶다고 가정해 보자. 검색은 루트 네임 서버로 질의를 보내는 것으로 시작한다. 루트 네임 서버가 www.jinbo.net의 IP 주소를 직접 알고 있는 것은 아니므로, 이름의 마지막 부분이 .net으로 끝난다는 것을 보고 "그것은 .net 네임 서버에 물어보라"라고 답하며 .net 네임 서버의 IP 주소를 가르쳐 준다. 그러면 사용자는 다시 .net 네임 서버에게 www.jinbo.net의 IP 주소를 물어보고, .net 네임 서버는 진보넷 네임 서버에게 물어보라고 대답한다. 다시 진보넷 네임 서버에게 www.jinbo.net의 주소를 물어보면 비로소 www.jinbo.net의 IP 주소를 얻을 수 있다.

루트네임서버

모든 검색이 루트 네임 서버로부터 시작한다면, 루트 네임 서버의 부담은 굉장히 크고 또 루트 네임 서버를 관리하는 일이 매우 중요하다는 것을 알 수 있다. 실제로 루트 네임 서버는 전 세계에 13개가 있고(미국에 10개, 유럽에 2개, 일본에 1개), 그 운영권은 인터넷계의 주요한 정치적 이슈이다. 예를 들어 이라크전과 같은 상황에서 루트 서버들이 이라크로부터 오는 질의를 거부하거나, 이라크의 국가 도메인을 연결해 주는 것을 거부한다면 이라크의 인터넷은 마비되고 말 것이다. 따라서 일개 국가가 아닌 중립적이고 국제적인 조직이 인터넷의 운영을 맡아야 한다는 거듭된 지적에도 미국 정부는 이 루트 서버에 대한 통제권을 내놓지 않고 있다. 위에서 보듯이 도메인 네임 검색은 몇 단계가 걸리는 다소 복잡한 일이다. 실제로는 각각의 컴퓨터들 모두가 이 일을 직접 하지는 않고, 로컬 네임 서버라 불리는 네임 서버가 이 일을 대신해 준다. 즉 사용자의 PC가 로컬 네임 서버에게 질의를 보내면, 로컬 네임 서버가 루트 네임 서버로부터 몇 단계에 걸쳐 검색한 후 그 결과를 사용자의 PC에게 돌려주는 것이다. 이 방법을 써서 얻을 수 있는 또 하나의 장점은 검색한 결과를 재이용할 수 있다는 것이다. A라는 사용자가 어떤 이름을 검색한 결과를 로컬 네임 서버가 기억하고 있다면, B라는 사용자가 똑같은 질의를 한 경우 다시 검색하지 않고 바로 답해줄 수 있는 것이다.

응용

자, 그럼 지금까지 알아본 내용을 응용해 보자. 웹서핑을 하다 보면 많이 나오는 것이 광고이다. 특히 큰 그림이나 플래시 광고의 경우 네트워크나 컴퓨터의 처리 용량을 많이 차지해서 인터넷 사용에 방해가 되는 경우도 있다. 그런데 신문사 등 대형 사이트의 경우 광고 내용을 전달하는 서버가 따로 있는 경우가 많다. 어떤 서버에 접속하기 위해서는 먼저 도메인 네임 검색을 통해 서버의 IP 주소를 알아내야 한다는 것에 착안해서, 이 과정을 막아서 광고를 걸러내는 것이 가능하다.
앞에서 예전에 컴퓨터마다 변환표를 가지고 있던 방법의 잔재로 hosts라는 파일이 지금도 남아있다고 한 것을 기억할 것이다. 컴퓨터는 어떤 도메인 네임이 해당하는 IP 주소를 알아보려고 할 때, 네임 서버에 물어보기 전에 먼저 이 파일을 살펴본다. 윈도우즈 2000의 경우 윈도우즈 디렉토리(WINNT) 아래 system32driversetchosts 라는 파일이 있다. (이 파일이 없으면 hosts.sam이라는 이름의 샘플 파일이 있을 것이다. 이것의 이름을 hosts로 바꾸면 된다.) 윈도우즈 95/98의 경우 윈도우즈 디렉토리 아래에 같은 이름의 파일이 있을 것이다. 이 파일의 아래쪽에 예를 들어 다음과 같은 줄들을 추가하고 저장한다.
127.0.0.1 cad.chosun.com
127.0.0.1 adsrv.joins.com
127.0.0.1 cad.donga.com
오른쪽의 세 도메인 네임은 각각 조선일보, 중앙일보, 동아일보의 광고 서버의 이름이고, 왼쪽의 127.0.0.1이란 IP 주소는 컴퓨터 자신을 뜻하는 IP 주소이다. (다른 주소를 써 줘도 되지만 그 주소에 접속을 시도할 것이기 때문에 자신의 주소를 쓰는 것이 가장 효율적이다.) 이렇게 지정해 주면 컴퓨터는 오른쪽에 있는 광고 서버에 접속하지 못하고 따라서 광고도 보이지 않을 것이다.

DNS를 지배할 수 있으면 인터넷을 지배할 수 있다!

2003-07-06