사이드바 영역으로 건너뛰기

TCP/IP의 이해 #2 - 게이트웨이와 DNS

누군가의 말대로, 네트는 광대합니다. 그래서 그런지 네트워크를 흔히 우주에 많이 비유하곤 하죠. 물론 전 세계에 흩어져있는 서버와 클라이언트 컴퓨터(호스트)들이 밤 하늘의 별들만큼 많기야 하겠냐만은, 네트워크가 이루는 세상은 그 크기를 미루어 짐작할 수 없을만큼 광대한 공간이라는 사실만큼은 틀림없는 것 같습니다.

하지만 우주에도 은하계가 있고 행성계가 있듯이, 전체 네트워크 상에 호스트들이 무질서하게 흩어져 있는 것처럼 보여도 실은 나름의 체계가 있습니다. 같은 사무실에서 사용하는 PC들이나 특정한 망에 가입되어 있는 사용자들의 컴퓨터는 네트워크 우주 안에서 하나의 소우주를 이루고 있죠. 이들은 단일한 인트라넷으로 묶이기도 하고, 일정한 IP 대역 안에서 IP를 부여받습니다. 결국 광대한 전체 네트워크는 이러한 소우주 네트워크들이 모여서 만들어내는 것이지요.

게이트웨이는 특정한 네트워크와 다른 네트워크의 연결점이라 할 수 있습니다. 게이트웨이gateway의 사전적인 정의와 같이 일종의 관문 역할을 수행하는 셈이죠. 다른 말로 하면, 특정 네트워크의 게이트웨이는 그 네트워크의 시작점이라고도 할 수 있습니다. 보통 게이트웨이 주소를 잡을 때 끝자리가 1번으로 잡는 경우가 많은데요(xxx.xxx.xx.1), 게이트웨이가 네트워크의 시작점이라는 상징적인 의미라고도 볼 수 있죠.

예를 들면, 제가 관리하는 www.abc.com이라는 서버의 IP 주소가 211.255.23.39라고 하고, 그 서버가 속해있는 네트워크의 게이트웨이 주소가 211.255.23.1이라고 합시다. 만약 www.abc.com으로 페이지 접속 요청을 보냈을 때, 이 요청은 무조건 게이트웨이를 먼저 통과하여 제 서버로 전달됩니다. 웹페이지를 응답할 때에도 마찬가지로 게이트웨이를 통과하여 요청한 사용자의 PC로 전달하게 되죠.

이렇게 게이트웨이가 하는 역할이 관문이다보니, 통로로서의 역할 뿐만 아니라 검문소의 역할을 하기도 합니다. 그래서 보안이 필요한 네트워크에서의 게이트웨이는 방화벽의 역할을 수행하기도 하죠. 네트워크를 통해 들어오고 나가는 데이터들(패킷packet이라고 합니다)을 전부 관리할 수 있기 때문에, 악성코드나 특정 데이터에 대해 쉽게 걸러낼 수가 있습니다.

약간은 생소한 게이트웨이에 비해 DNS Domain Name System, 즉 도메인 서버에 대해서는 많이 알고 계실 듯 합니다. 도메인은 네트워크 상의 특정 위치를 결정지어주는 IP 주소 대신 쓸 수 있는 이름입니다. 인터넷 서핑을 할 때 브라우저를 켜고 주소를 치게 되는데, 이 주소가 바로 도메인입니다. 아까의 예에서, 사실 www.abc.com을 보고 싶을 때, 211.255.23.39라고 입력해도 같은 내용이 나옵니다. www.abc.com과 211.255.23.39은 둘 다 제가 관리하는 서버의 네트워크 상에서 위치를 나타내는 주소이기 때문이죠. 하지만 숫자 네 개로 이루어진 IP에 비해 도메인은 기억하기가 훨씬 용이하기 때문에, IP 주소를 일일히 집어넣는 수고 대신에 도메인으로 간단하게 요청을 보내는 것이죠.

DNS가 하는 역할은 www.abc.com이 211.255.23.39라는 점을 알려주는 일입니다. 즉, 특정 도메인을 IP 주소에 매핑mapping하는 것이죠. TCP/IP 네트워크에서는 IP가 특정 네트워크 포인트를 알려주는 주소라고 했습니다. 만약 도메인을 입력해서 특정 포인트를 찾으려고 한다면, 먼저 DNS가 도메인을 IP 주소로 번역하고, 그 IP 주소로 요청을 날리게 되는 것이죠.

재미있는 것은, 도메인과 IP 주소의 데이터베이스인 DNS를 정해진 누군가가 관리하지는 않는다는 점입니다. 만약 전세계에 DNS 서버가 한 대만 존재하고 있다면, 만약 그 서버가 다운되었을 때 도메인 이름을 모른다면 어떠한 네트워크 포인트에도 접속할 수 없을 것입니다. 그래서 DNS는 세계 도처에 존재하며, 하나의 DNS 서버가 못 쓰게 되거나 효율이 좋지 않다면 다른 DNS를 참조해서 IP 주소를 얻어오게 됩니다.

그렇다면 새로운 도메인이 출현했을 경우 어떤 일이 벌어질까요? 일단 www.abcd.com이라는 새 도메인을 발급받아 근처에 있는 DNS 서버에 등록했다고 가정합시다. 그 시점에서는 운좋게도 새 도메인을 등록한 DNS 서버에서 IP 주소를 받아온 사람은 www.abcd.com을 잘 찾아갈테지만, 다른 DNS 서버를 사용하고 있던 대부분의 사람들은 www.abcd.com을 주소창에 쳐도 그런 페이지는 없다는 에러밖에 볼 수 없을 것입니다. 그러나 DNS 서버들은 서로의 변경 사항을 주기적으로 교환해서 새로운 데이터베이스를 유지하도록 설계되어 있습니다. 새 도메인이 등록된 DNS 서버는 www.abcd.com에 대한 정보를 다른 DNS 서버에 전파하게 되고, 대략 하루 정도가 지나면 모든 DNS 서버가 www.abcd.com에 대한 정보를 가질 수 있게 되는 것이죠. 그래서 새 도메인을 등록하면 전체적으로 적용되는데 일정한 시간이 필요하도록 되어 있습니다. 이것은 DNS의 분산 환경 때문에 생기는 일이죠.

뭔가 단순하게 설명해놨는데, 실제로는 이보다 더 복잡한 일들이 네트워크 세계에서 일어납니다. 전세계로 통하는 복잡한 네트워크 환경에서 빠르고 정확하게 요청을 주고받게 하기 위해, 인터넷의 발전과 더불어 네트워크 기술도 계속 발전한 셈이죠. 어디서든 네트워크와 연결할 수 있는 유비쿼터스 시대니 뭐니 해도 TCP/IP의 기본적인 구조는 인터넷이 존재하는 한 남아있을 것 같습니다. 왠지 공각기동대의 전뇌 통신도 TCP/IP 기반으로 이루어지는 것이 아닐지요;;;

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크