소개점점 더 많은 가정과 소규모 기업에서 컴퓨터를 추가로 구입함에 따라
네트워킹은 컴퓨터 리소스
공유를 위한 매우 강력한 도구라는 사실을
인식되고 있습니다. 인터넷 연결은 네트워크에서 가장 중요한
리소스 중 하나로써 공유하여 사용되고 있는 추세입니다.
인터넷 게이트웨이는 인터넷 연결을 공유하고 가정 또는 소규모
사무실의 네트워크를 저렴하고 쉽게 관리하기 위해
많이 사용되고 있습니다. 인터넷
게이트웨이는 하나의 공용 IP 주소를 공유하는 인터넷에 여러 호스트를 연결하기 위한 수단으로 대개
NAT(Network Address translation)를 제공합니다. 하지만, 이 솔루션은 많은
종류의 네트워크 응용 프로그램 연결을 지원하지 못하며, 이 문제에 대해서는 여기에서도 자세히 설명할
것입니다. NAT
traversal 기술은 네트워크 응용 프로그램이 로컬 NAT 장치의 존재를 감지할 수 있도록 하기 위해
개발되었습니다. 이러한 장치가 감지되면, 응용 프로그램이 NAT 구성을 통해
알맞은 매핑을 정의하여 호환성 문제를 해결합니다. 이 문서에서는 네트워크 응용 프로그램 사용자 및 개발자에게 NAT를 소개하고, 일반적인 NAT
문제를 파악하며, 이러한 문제 해결을 위해 응용 프로그램에서 NAT traversal을 어떻게 사용할
수 있는지에 대한 개요를 제공합니다. Windows에 제공되는 NAT traversal API에 대한
기술적인 세부 사항은 2001년 여름부터 Windows Platform SDK에서 제공할 예정입니다.
개발자들은 이러한 자료를 검토하여 타사 게이트웨이 장치로까지 확장할 수 있는 이 새로운 운영 체제
기능을 최대로 활용하는 방법에 대해 자세히 알아두는 것이 좋습니다. NAT traversal은 UPnP Forum의 Internet Gateway Device
Working Committee에서 정의한 UPnP(Universal Plug and
Play) 지원을 제공하는
NAT 장치에 의존합니다. UPnP에 대한 정보는 UPnP 웹 사이트에서 얻을 수 있으며, UPnP
사이트의 회원사 전용 섹션에서는 더 자세한 정보를 제공합니다. UPnP 및 NAT traversal 지원은 인터넷 게이트웨이 장치에서 활용할 수 있는 매우
중요한 기능입니다. 서비스 공급자로부터 인터넷 게이트웨이 장치를 구입 또는 임대하는 고객은 해당
장치가 NAT traversal을 위한 UPnP 지원 여부를 반드시 확인해야 합니다. 왜냐하면, 이
기능의 지원 여부에 따라 고객 만족도, 지원 비용 및 혁신적인 서비스와 응용 프로그램 사용 가능성이
크게 달라질 수 있기 때문입니다. 게이트웨이 장치 업체에서 자사의 인터넷 게이트웨이 장치에 NAT traversal을 위한
UPnP 지원 기능을 추가하는 작업은 복잡하거나 비용이 많이
들지 않으며 시간도 많이 소모되지도
않습니다. 기존의 인터넷 표준 및 프로토콜을 기반으로 하는 UPnP를 사용할 경우, 인터넷 게이트웨이
장치 업체에서는 NAT 사용 문제를 해결하고 해당 장치를 통해 이용되는 대부분의 응용 프로그램을
아무런 문제 없이 활용하도록 할 수 있습니다. 이 방식은 현재 많은 응용 프로그램 개발자나 게이트웨이
장치 업체에서 이러한 문제를 해결하기 위해 노력하고 있는 각 응용 프로그램별 해결 방식과 크게 대조를
이루고 있습니다. 이 문서에서는 인터넷 게이트웨이 장치에서 NAT traversal을 구현하려는 하드웨어
업체를 위한 자세한 정보를 제공하지는
않으므로, 이러한 정보는 UPnP Forum 웹 사이트를
참조하십시오. 이 문서의 내용을 완전히 이해하기 위해
Windows 아키텍처, 네트워킹 및 UPnP에 대한 지식이
도움이 되겠지만 반드시 필요한 것은 아닙니다. NAT란?NAT(Network Address translation)는 개인 네트워크(10.0.x.x,
192.168.x.x, 172.x.x.x 등의 개인 주소 범위 사용)에서 여러 PC 또는 장치가
전역적으로 라우팅 가능한 단일 IPv4 주소를 공유할 수 있도록 하기 위해 사용되는
IETF(Internet Engineering Task Force) 표준입니다. NAT가 많이
사용되고 있는 주된 이유는 IPv4 주소가 별로 남아 있지 않기 때문입니다. NAT는
Microsoft
Windows XP 및 Windows Me의 인터넷 연결 공유 및 기타 많은 인터넷 게이트웨이
장치에서 사용되고 있으며, 특히, DSL이나 케이블 모뎀을 통한 초고속 네트워크 공유를 위해
사용됩니다. NAT는 IPv6이 보급되면서 자연적으로 해결될 IPv4 주소 부족 문제에 대한 임시 방편이라고
할 수 있습니다. 이 IPv4 주소 부족 문제는 아시아 및 전세계 기타 지역에서 특히 심하며,
북미에서도 점점 더 심각한 문제로
부각됨에 따라, 인터넷에서 IPv6 방식을 사용하면 이
문제는 자연스럽게 해결될 수 있습니다. IPv4 주소 부족 문제로 개인 네트워크에서 NAT를 사용할 경우 개인 네트워크 외부의
모든 호스트는 공유된 하나의 IP 주소를 통해 통신을 하기 때문에 네트워크 계층 문제가 발생할 수
있습니다. NAT가 방화벽이나 프록시 서버와 동일한 것은 아니지만, 네트워크를 보호하는 역할도
수행합니다. 일반적인 NAT 작업NAT 장치 뒤에 있는 클라이언트는 일반적으로 DHCP(Dynamic Host
Configuration Protocol) 또는 관리자에 의한 정적 구성을 통해 개인 IP 주소를
할당 받게 됩니다. 이 개인 네트워크의 외부에서 통신이 발생할 경우 보통 다음과 같은 작업이
수행됩니다. 클라이언트측응용 프로그램이 서버와 통신을 시도할 경우, 소스 IP 주소, 소스 포트, 대상 IP 주소,
대상 포트 및 네트워크 프로토콜과 연관된 소켓을 엽니다. 이 과정을 통해 통신을 위한 양 종점을
확인합니다. 응용 프로그램이 소켓을 사용하여 정보를 전송하면, 클라이언트의 개인 IP 주소(소스 IP
주소)와 포트(소스 포트)가 패킷의 소스 필드에 삽입됩니다. 패킷의 대상 필드에는 서버의 IP
주소(원격 호스트 – 대상 IP 주소)와 포트가
포함되고, 이 패킷은 개인 네트워크 외부의 어떤
지점에 도달해야 하므로 클라이언트가 이 패킷을 지정된 기본 게이트웨이로 전달합니다. 이 시나리오에서
기본 게이트웨이는 NAT 장치입니다. NAT 장치에서 나가는 패킷NAT 장치에서는 나가는 이 패킷을 가로채고 대상 IP 주소(서버), 대상 포트, NAT 장치의
외부 IP 주소, 외부 포트, 네트워크 프로토콜 및 클라이언트의 내부 IP 주소와 포트를 사용하여
포트 매핑을 만듭니다. NAT 장치는 이 포트 매핑을 테이블에 저장하여 이러한 매핑 테이블을 관리합니다. 외부 IP
주소와 포트는 내부 클라이언트의 IP 주소와 포트
대신 이 데이터 트래픽에 대해 사용되는 공용 IP
주소와 포트입니다. 그러면, NAT 장치가 클라이언트의 개인, 내부 IP 주소와 포트에서의 패킷 소스 필드를 NAT
장치의 공용, 외부 IP 주소와 포트로 바꾸어 패킷을 "변환"합니다. 그러면, 패킷이 외부 네트워크를 통해 전송되고 결국 대상 서버에 도달하게 됩니다. 서버측서버에서 패킷을 받으면, 서버는 전역적으로 라우팅 가능한 IP 주소를 가진 단일 컴퓨터와
통신하고 있는 것으로 인식합니다. 그러면, 서버는 소스 필드에 자신의 IP 주소와 포트를 사용하여
NAT 장치의 외부 IP 주소와 포트로 응답 패킷을 보냅니다. NAT 장치에서 들어오는 패킷NAT 장치는 서버에서 이러한 패킷을 받아 포트 매핑 테이블과 비교합니다. NAT 장치에서
들어오는 패킷의 소스 IP 주소, 소스 포트, 대상 포트 및 네트워크 프로토콜이 포트 매핑의 원격
호스트 IP 주소, 원격 포트, 외부 포트 및 네트워크 프로토콜과 일치하는 포트 매핑을 찾으면
역변환이 수행됩니다. NAT 장치는 패킷 대상 필드의 외부 IP 주소와 외부 포트를 클라이언트의 개인
IP 주소와 내부 포트로 바꿉니다. NAT 장치에서는 내부 네트워크를 통해 패킷을 해당 클라이언트에게 보냅니다.
그러나, NAT 장치에서 일치하는 포트 매핑을 찾지 못할 경우 들어오는 패킷은 없어지고 연결이 끊어집니다. NAT의 장점은 응용 프로그램이나 클라이언트 쪽에서 별다른 작업을 수행하지 않고도 개인 IP
주소로 전세계 인터넷을 통해 통신할 수 있다는 점입니다. 즉, 응용 프로그램에서 별도의 API를
호출하지 않아도 되고 클라이언트가 별도의 구성을 수행하지 않아도
되며, 이 경우에 NAT는
클라이언트와 서버 응용 프로그램 모두에게 투명하고 모든 것이 순조롭게 이루어집니다. 하지만, 모든 네트워크 응용 프로그램이 NAT과 작동하는 프로토콜을 사용하는 것이 아니기 때문에
문제가 발생할 수 있습니다. NAT 및 응용 프로그램에서 일반적인 문제클라이언트가 동일한 포트에서 접속을 시작하고 응답을 받을
경우에는 NAT를 사용하여 전역적으로
라우팅 가능한 하나의 IP 주소를 공유하여 사용해도 문제가 되지 않습니다. 하지만, 많은 응용
프로그램에서는 NAT 장치를 사용하여 인터넷에 접속할 경우 잘못된 가정이 되는 가정을 하는 전략을
사용하고 있습니다. 다음은 이러한 문제 중 일부입니다. 내부 네트워크의 서비스많은 네트워크 서비스 또는 서버에서는 수신 대기 소켓이 설정되면 인터넷의 모든 클라이언트가
접속을 시작할 수 있다는 가정을 합니다. 네트워크의 가장자리에 NAT 장치가 있는 경우, NAT는
들어오는 트래픽을 내부 네트워크의 서비스로 전달하기 위해서는 포트 매핑을 가지고 있어야 합니다.
이러한 이유로, 서비스는 개인 네트워크의 클라이언트에 대해서만 작동하고, 나머지 인터넷에서는 연결이
불가능합니다. 이 문제를 해결하기 위해 가장 일반적으로 사용되는 방법은 NAT 장치에서 NAT의 특정 외부
IP 주소와 포트로 향하는 트래픽을 서비스에서 사용되는 내부 IP 주소와 포트로 전송하도록 포트
매핑을 수동으로 구성하는 것입니다. 이 포트 매핑이 제대로 구성되면 서비스가 들어오는 패킷을 받아 개인 네트워크 외부의
클라이언트에서 서비스에 액세스할 수
있습니다. 포트 매핑이 제대로 구성되지 않으면 해당 네트워크
연결은 이루어지지 않습니다. 대개 이러한 매핑을 수동으로 구성하는 작업은 까다로우며, 매핑을 제대로 구성하기 위해서는
사용자의 경험이 필요합니다. 많은 일반 소비자나 소규모 기업
사용자가 이러한 문제의 원인
및 해결책을 찾기 위해 해당 인터넷 서비스 공급자, PC 제조업체, 소매업체 또는 인터넷 게이트웨이
업체에게 고객 지원을 통해 해결하지 않는 이상, 원하는 응용 프로그램이나 서비스를 사용할 수
없습니다. 결국, 모든 외부 클라이언트가 덜 제한적인 매핑을 사용하여 서버와 통신할 수 있는 해결
방법을 찾게 됩니다. 포함된 주소 또는 포트일부 네트워크 응용 프로그램은 클라이언트에게 할당된 IP 주소와 포트가 언제나 전역적으로 라우팅
가능하며 인터넷에서 직접 사용할 수 있다고 가정합니다. 이 경우, 이러한 주소는 대부분 IETF 예약
주소 범위에 해당하는 개인 IP 주소이며, 응용 프로그램에서는 서버에 보내지는 패킷의 페이로드에
이러한 개인 IP 주소 또는 포트를 포함시킵니다. 서버에서는 이렇게 포함된 주소를 클라이언트 접속을
위한 주소로 사용합니다. 포함된 IP 주소는 라우팅이 불가능하기
때문에, 서버가 NAT에 의해 할당된 매핑 주소와 포트 대신 포함된 IP 주소와 포트를 사용하여 응답을
시도할 경우 패킷은 분실됩니다. 네트워크 응용
프로그램에서 NAT 장치의 존재 여부를 감지하고, 사용되는 외부 IP 주소와 외부 포트 매핑을 가져올
경우, 응용 프로그램이 패킷에 정확한 정보를 포함시킬 수 있습니다. 서로 다른 소켓을 사용하는 응용 프로그램일부 다른 네트워크 응용 프로그램에서는 "X" 포트에서 소켓을 사용하여 서버 또는
피어에 트래픽을 보낸 다음, 서버에서 "Y"
포트의 별도 수신 대기 소켓에 걸쳐
트래픽을 받습니다. NAT에서는 나가는 트래픽을 보고
"X" 포트에 대한 포트 매핑을 만들지만,
"Y” 포트로 향하는 반환 패킷에 대한 포트 매핑을 만들지는 못합니다.
“Y” 포트로
향하여 들어오는 패킷은 분실됩니다. 사용 가능한 포트 예측일부 네트워크 프로토콜은 전역적으로 라우팅 가능한 잘 알려진 포트를 항상 사용할 수 있다고
가정합니다. 여러 클라이언트가 IP 주소를 공유할 경우, 한 번에 오직 하나의 클라이언트만 잘 알려진
포트를 사용할 수 있습니다. 예를 들어, 한 번에 오직 하나의 웹 서비스만 로컬 네트워크에서 외부
포트 80을 사용할 수 있습니다. 그렇지 않으면, NAT 장치에서 외부 요청이 적용되는 클라이언트가
어떤 것인지 결정하지 못합니다. 사용자가 포트 매핑을 구성하더라도, 여러 클라이언트가 로컬 네트워크의
외부에서 발견되도록 하려면 특별한 조치를 취해야 합니다. 다중 NATNAT 뒤에 다른 NAT가 있고 그 뒤에 클라이언트가 있을 경우, 위에서 다룬 범위 이외의
새로운 문제가 발생할 수 있습니다. 컴퓨터 및 업계에 미치는 영향 위의 문단에서는 NAT 사용과 관련된 기술적 현상에 대해 살펴보았습니다. 사용자의 입장에서
경험하는 이러한 문제의 영향은 간단합니다. 즉, NAT를 사용할 경우 원하는 서비스와 응용 프로그램을
사용할 수 없는 일이 발생합니다. 현재 대부분의 사용자들은 자신이 이 NAT 문제의 "피해자"라는 사실조차 모르고 있습니다.
다만, 사용자는 멀티 플레이어 게임을 하거나 실시간 통신과 같은 피어-투-피어 응용 프로그램 또는
기타 응용 프로그램을 사용하려고 하지만
잘 안될 뿐입니다. PC 화면에 "접속할
수 없음"과 같은 오류 메시지가
나오거나 응용 프로그램을 시작해도 제대로 작동되지 않습니다. 전화 접속 모뎀을 통해 인터넷에 연결하던 사용자는 이러한 문제를 경험하지 않습니다. 하지만, 이
사용자가 초고속 인터넷 서비스에 가입한 후 NAT를 통해 DSL이나 케이블 모뎀을 사용하게 되면
이러한 문제가 발생한다는 사실을 알게 됩니다. 특히, 더 빠른 인터넷 경험을 즐기고자 했던
사용자는 게임을 하거나 기타 서비스를 이용하지 못하게 하는 NAT 문제로 인해 크게 실망할 수
있습니다. 결국, PC 제조업체, ISP, 인터넷 게이트웨이 업체 등의 고객 불만이 쌓이게 됩니다. 일반
사용자는 이러한 문제의 원인이 무엇인지 잘 알지 못하며, 기술 지원 센터에서도 전화를 통해 이러한
문제에 대한 해결 방법을 항상 제시할 수는 없습니다. 이것은 단지 사용자들만의 문제가 아닙니다. 사용자들에게 제품 및 서비스를 제공하는 많은
업체에게도 문제가 됩니다. 이러한 NAT 관련 문제를 해결하기 위해 고객이 하는 지원 전화 통화에는
비용이 들고, 제공업체 또는 소매업체의 수익성을 떨어뜨릴 수 있습니다. 이러한 문제로 인해 일부
사용자는 이전에 경험했던 서비스의 만족스럽지 못한 결과 때문에 새로운 서비스나 응용 프로그램에 관심을
가지지 않을 수도 있으므로 NAT는 더욱 혁신적이고 새로운 제품/서비스를 제공하고 채택하는데
걸림돌이 될 수 있습니다. 이러한 상황으로 볼 때, 이 NAT 사용 문제를 해결하는 일은 업계 전체에서 매우 중요합니다. NAT traversal이란?NAT traversal은 네트워크 인식 응용 프로그램이 NAT 장치 뒤에 있다는 사실을
감지하고, 외부 IP 주소를 얻은 후, 포트 매핑을 구성하여 NAT의 외부 포트에서 나오는 패킷을
응용 프로그램에서 사용하는 내부 포트로 전달하도록 하는 기능입니다. 이 모든 작업은 자동으로
이루어지므로 사용자가 직접 포트 매핑을 구성하거나 다른 메커니즘을 사용할 필요가 없습니다. 이 방식은 NAT 사용으로 인한 접속 문제에 대해 지금까지 사용해 오던 다른 모든 응용
프로그램별 해결 방식보다 더욱 획기적인 해결 방법입니다. 지금까지
활용해온 해결 방법의 경우, 사용자가
기술적인 지식을 가지고 있거나 응용 프로그램 개발자 또는 인터넷 게이트웨이 업체가 특별한 개발 노력을
기울이거나 하는 두 가지를 모두 필요로
했습니다. NAT traversal을 통한 NAT 사용 문제 해결 방식도 완전하지는 않으며, 모든 문제를
해결할 수 있는 것은 아니지만, 모든 과정이 자동으로 이루어지는 NAT traversal은
고객 만족도를 높이고, 고객 지원 전화를 줄이며, 특히 가정 네트워크 환경에서 혁신적이고 새로운
서비스와 응용 프로그램을 사용할 수 있도록 한다는 점에서 기존의 방식보다 진일보한 기술적 발전이라고
할 수 있습니다. NAT traversal은 필요할 때 사용해야 하는 대처
방식이며 모든 상황에서
작동되는 것은 아니라는 점을 알아 두어야 합니다. NAT 및 NAT traversal은 모든
클라이언트가 전역적으로 라우팅 가능한 IP 주소를 가지게 되는 IPv6 방식이 시작되면 더 이상
필요하지 않을 것입니다. IPv6가 얼마나 빨리 보편화될 것인지에 대한 예측은 각기 다릅니다.
Microsoft를 포함한 업계에서는 IPv6 방식으로의 빠른 전환을 위해 많은 투자를 하고 있는
상태이지만, 이 문서에서 설명하고 있는 NAT traversal 솔루션은 NAT 사용 문제를
해결하려는 가정과 소규모 기업 사용자들에게 현재와 앞으로 몇 년 동안 충분히 활용할 수 있는 해결책이
될 것입니다. NAT traversal 작업NAT traversal은 UPnP Forum에서 정의한 사양의 일부인 감지 및 제어 프로토콜에
의존합니다. UPnP Forum에는 인터넷 게이트웨이 장치에 대한 제어 프로토콜을 정의하고 이러한
장치를 위한 서비스를 정의하기 위한 작업 위원회가 있습니다. 인터넷 게이트웨이 장치 제어 프로토콜에서 필요한 요소를 지원하는 인터넷 게이트웨이 장치는 자신의
존재를 알리고 XML 설명 문서를 게시하여 해당 로컬 네트워크에서 지점을 제어합니다. 이러한 XML
설명 문서를 통해 제어 지점에서 인터넷 게이트웨이가 NAT를 사용하는지 판단하고 NAT의 외부 IP
주소를 얻으며 포트 매핑을 만들기 위해 어떤 UPnP 작업을 호출해야 하는지 알 수 있습니다. Windows의 NAT traversal API는 NAT 장치의 감지, 관리 및 구성을 위한
인터페이스를 제공함으로써 UPnP를 직접 사용할 필요가 없도록 합니다. NAT traversal API네트워크 응용 프로그램이 NAT 장치의 존재 여부를 감지하고 해당 장치의 작동 방식에 적응해야
할 경우, 응용 프로그램은 Windows에 포함된 NAT traversal API(Platform
SDK에서 자세한 문서 제공)를 사용하여 다음 기능을 제공할 수 있습니다. - NAT의 존재 여부 결정.
- NAT의 외부 IP 주소 얻기.
- 매핑되는 경우, 특정 외부 포트에 대한 정적 포트 매핑 정보 얻기.
- 외부 포트가 이미 할당되지 않은 경우 정적 포트 매핑 추가.
- 특정 포트 매핑을 삭제하지 않고 활성 또는 비활성화
- 정적 포트 매핑에 대해 사용자 친숙한 설명 편집.
- 정적 포트 매핑 삭제.
- 로컬 네트워크에 대한 정적 포트 매핑 목록 얻기.
이 기능으로 응용 프로그램은 NAT 사용으로 인해 발생하는 대부분의 문제를 해결할 수 있습니다.
현재, Windows NAT traversal API는 정적 포트 매핑으로 알려진 무제한 지속 기간의
포트 매핑만 지원합니다. Windows XP의 NAT traversal APINAT traversal API는 Windows XP에 기본적으로 설치됩니다. 이러한 API는
Windows XP CD에 있는 “네트워크 설정 마법사” 도구를 사용하여 Windows Me 또는
Windows 98을 실행하는 컴퓨터에 설치할 수도 있습니다. NAT traversal API의
경우 추가로 제공되는 XML 파서 지원을 위해서는 사용자가 Internet Explorer 버전
6.0도 설치해야 합니다. NAT traversal은 현재 Windows 2000에서 지원되지 않습니다. 인터넷 게이트웨이에서 NAT traversal 지원인터넷 게이트웨이는 UPnP Forum의 Internet Gateway Working
Committee에서 정의한 인터넷 게이트웨이 장치(IGD) 사양을 제공함으로써 NAT
traversal을 지원합니다. 게이트웨이 업체도 Windows의 NAT traversal API가
IGD에 대해 다음과 같은 가정을 하고 있다는 사실을 알아 두어야 합니다. - IGD는 한 번에 하나의 외부 인터페이스만 알립니다. 인터넷 게이트웨이 장치가 여러 외부
인터페이스를 알리는 것도 기술적으로 가능하지만 NAT traversal API는 첫 번째 하나만
사용합니다.
- IGD는 모든 원격 IP 주소가 패킷을 내부 클라이언트에 보내도록 허용하는 포트 매핑을
지원합니다.
- IGD는 클라이언트로 나열된 브로드캐스트 주소와의 포트 매핑을 지원합니다.
- IGD는 NAT의 외부 포트와 클라이언트의 내부 포트에 대해 서로 다른 번호를 지원합니다.
- IGD는 버전 번호 1로 알립니다.
- 정적 포트 매핑(또는 지속 기간이 무한대로 설정된 포트 매핑)은 무한대로 지속하고, 다시
부팅, IP 주소 변경 및 서버에 클라이언트가 존재해도 바뀌지 않습니다.
이 문서를 작성할 당시, 몇몇 대표적인 제조업체에서는 이미 Windows NAT
traversal API와 작동되는 이러한 UPnP를 지원하는 인터넷 게이트웨이 장치를 2001년부터
출시할 계획이라고 발표했습니다. 이것은 업계와 고객 모두를 위한 커다란 진전입니다. 더욱 더 많은 인터넷 게이트웨이 장치 제조업체가 이러한 문제 해결을 위해 UPnP를 사용하는
이점을 충분히 파악하고 있고, 일반 고객 및 소규모 기업 사용자들도 NAT 사용과 관련된 문제 및
이러한 UPnP 지원 NAT traversal 솔루션의 밝은 미래에 대해 인식하고 있으므로, NAT
traversal에 대한 UPnP 지원 여부가 이 분야의 장치에서 반드시 확인해야 할 사항 또는
시장의 필수 요건이 될 것으로 예상됩니다. 인터넷 게이트웨이 업체가 UPnP Forum의 회원이 되면 UPnP 표준과 호환되는 인터넷
게이트웨이 장치를 만드는 방법을 더욱 잘 배울 수 있습니다. Windows XP의 인터넷 연결 공유는 UPnP IGD 표준 버전 0.9를
지원하고, 버전
1.0은 버전 0.9와 호환될 것으로 보입니다. 응용 프로그램의 NAT traversal 활용 방법응용 프로그램이 NAT traversal을 어떻게 이용하는지는 얼마나 오래 동안 포트 매핑이
이루어져야 하는지, 그리고 여러 클라이언트 또는 서비스에 의해 포트가 사용되는지의
여부에 따라 달라집니다.
응용 프로그램은 불완전한(고아) 매핑 및 다른 응용 프로그램이 사용할 포트의 부족을 피하기 위해
만들어진 모든 정적 포트를 제거한다는 사실을 알아 두어야 합니다. 응용 프로그램이 웹 서버와 같은 네트워크 서비스이고 지속 시간 동안 잘 알려진 포트를 사용해야
하는 경우, 해당 설치 프로그램이 NAT traversal API를 사용하여 정적 포트 매핑을 구성할
수 있습니다. 다른 응용 프로그램, 네트워크 관리자 및 네트워크 토폴로지가 변함이 없고, 제거(정리)
메커니즘이 매핑을 그대로 유지할 경우, 외부 클라이언트는 서비스가 지속되는 동안 서비스에 접속할 수
있습니다. 응용 프로그램의 설치 제거 서비스는 이러한 매핑 삭제에 대한 책임이 있습니다. 시스템
충돌이 발생할 경우, 서비스가 존재하지 않더라도 정적 포트 매핑은 존속합니다. 외부 IP 주소가
변경되면 정적 포트 매핑이 변경 사항을 자동으로 감지합니다. 응용 프로그램이 항상 실행될 필요가 없거나 해당 정적 포트 매핑을 유지하기 위해 네트워크를 덜
신뢰하는 경우, 응용 프로그램이 실행될 때마다 잘 알려진 특정 포트를 확보하고 응용 프로그램이
종료되면 리소스를 반환하도록 할 수 있습니다. 이것은 병렬로 스크립트를 실행함으로써 가능합니다. 포트
매핑을 추가 및 제거하는 대신 응용 프로그램이 알맞게 매핑을 활성 및 비활성화할 수도 있습니다.
또한, 응용 프로그램이 실행될 때 정적 포트 매핑을 건드리지 않고, 응용 프로그램이 시작될
때에만
매핑을 새로 고칠 수도 있습니다. 물론, 외부 IP 주소가 변경되면 정적 포트
매핑은 자동으로 변경 사항을 감지합니다. 개인 네트워크에서 서로 다른 클라이언트의 여러 응용 프로그램이 동일한 내부 포트 번호를 사용할
경우, 여러 클라이언트가 실행되도록 하려면 응용 프로그램에서 수정이 필요합니다. 오직 하나의
클라이언트만 외부 포트 매핑을 위해 내부 포트 번호를 사용할 수
있는데, 여기에서 권장하는 방식은
첫 번째 클라이언트가 선점하는
방식입니다. 다른 클라이언트는 내부 포트 번호가 외부 포트와 다른 비동기
포트 매핑을 요청해야 합니다. 원격 호스트에 의해 발견되는 단일 목적을 위해, 여러 클라이언트가 동일한 외부 포트에서 수신을
대기하는 특수한 경우가 있습니다. 들어오는 패킷이 내부 클라이언트 IP 주소에 대해 특정 클라이언트
주소 대신 브로드캐스트 주소를 사용하도록 변환될 수 있습니다. 해당 포트에서 수신 대기하고 있는
클라이언트는 원격 호스트에 자신의 접속을 초기화하여 응답할 수 있습니다. 일반적인 상황의 경우,
이러한 방식을 사용하면 이 주소로 들어오는 패킷을 네트워크의 모든 클라이언트가 수신하고 그에 따른
영향을 받으므로 권장되지 않습니다. 서비스가 짧은 시간 동안 임의의 포트에서 수신을 대기해야 하는 경우, 스크립트를 사용하지 않고
응용 프로그램 내에서 정적 포트 매핑을 요청해야 합니다. 응용 프로그램 실행이 완료되면 자체적으로
제거(매핑 삭제)됩니다. 응용 프로그램은 미결 포트 매핑의 기록을 유지해야 합니다. 그러면, 응용
프로그램에 충돌이 발생하여 매핑을 닫지 못한 경우, 다음에 실행될 때 포트 매핑을 제거하는데 필요한
정보를 가져올 수 있습니다. 응용 프로그램이 자신의 포트 매핑을 제거하지 않고 네트워크를 떠날 경우, 매핑은 그대로 남게
되므로 사용자가 직접 제거해야 합니다. 응용 프로그램이 언제 매핑 사용을 완료했는지 알아내기가 어렵기
때문에 현재 Windows에는 매핑 제거 메커니즘이 없습니다. NAT traversal의 제한 사항NAT traversal이 NAT 장치를 통한 연결 문제 대부분을 해결하지만, 일부 문제는
그대로 남아 있거나 NAT traversal의 결과 발생하기도 합니다. 이러한 문제는 다음과
같습니다. - NAT traversal은 개방된 트러스트 모델을 가집니다. 즉, 개인 네트워크의 모든
응용 프로그램이 NAT의 모든 포트 매핑에 액세스할 수 있습니다. 이를 통해, 여러 지점의 관리
유연성이 크게 확보되지만, 응용 프로그램이 매핑에 대한 독점적인 소유권을 가질 수 없다는 단점이
있습니다.
- 충돌 해결은 응용 프로그램의 책임입니다. 응용 프로그램이 다른 클라이언트에 이미 매핑된
포트에 대한 매핑을 시도할 경우, 다른 포트를 찾거나 해당 응용 프로그램을 무시하는 것은 응용
프로그램에게 달려 있습니다.
- NAT traversal은 ISP가 개인 주소를 할당하고 NAT를 사용하여 클라이언트가
접속하도록 하는 문제를 해결할 수 없습니다. 이 경우, NAT가 인터넷 게이트웨이 장치의 외부,
실제로는 인터넷 공급자의 네트워크 내부에 존재합니다. 클라이언트의 NAT가 이러한 다른 NAT
뒤에 있게 되면, 가정 또는 소규모 기업 내에 있는 NAT traversal은 실패합니다.
결과적으로, 인터넷 서비스 공급자가 자신의 네트워크 내부에서 NAT를 사용하는 것은 권장되지
않습니다.
- 응용 프로그램이 NAT traversal 기능을
그냥 얻게 되는 것이 아니라, API를
호출하도록 수정되거나 문제가 해결되도록 하는 스크립트가 제공되어야 합니다. 이것은 대부분의
개발자들에게 관리가 용이한 개발 노력으로 볼 수 있는데, 특히, 이러한 NAT traversal
메커니즘을 응용 프로그램에 한 번만 추가하면 대부분의 인터넷 게이트웨이 장치에서 자동으로
작동한다는 점에서 그렇습니다.
- 응용 프로그램이 포트 매핑을 모두 사용한 후에는 자체적으로 제거해야 할 책임이 있습니다.
정적 매핑은 무한대로 존속하며, 대부분 응용 프로그램이 실행되는 동안 잘 알려진 포트에서 수신
대기하는 서비스에 의해 사용됩니다.
- NAT를 제공하는 인터넷 게이트웨이는 UPnP 인터넷 게이트웨이 장치 사양 버전 0.9
이상을 지원해야 합니다.
결론NAT는 IPv4 네임스페이스 부족 문제를 해결하기 위해 IETF에서 승인한
솔루션으로, NAT를 사용하는 인터넷 게이트웨이가 가정 및 소규모 사무실에서 많이 사용되고 있는 추세입니다.
이러한 장치는 가격이 저렴하고, 관리하기가 쉬우며, 사용자가 특별히 소프트웨어를 설치할 필요도 없기
때문에 많이 사용되고 있습니다. 하지만, NAT를 사용함으로써 채팅, 멀티 플레이어 게임 및 피어-투-피어 응용 프로그램을
제대로 사용하지 못하는 문제가 발생하고 있습니다. 네트워크 프로토콜이 더 이상 사실이 아닌 네트워크
아키텍처에 대한 가정을 하기 때문입니다.
NAT traversal은 응용 프로그램이 NAT 장치의 존재 및 전역적으로 라우팅 가능한
공유된 IP 주소를 인식하고 정적 포트 매핑을 구성하여 이러한 연결 문제를 해결할 수 있는 방법을
제공합니다. NAT traversal 솔루션을 통해 NAT 사용과 관련된 모든 문제를 해결할 수는
없지만, 이러한 문제의 상당 부분을 해결하는 것은 사실입니다. 이 문서를 통해 알아 두어야 할 사항은 다음과 같습니다. - 인터넷 게이트웨이 장치 업체에서는 자사의 장치에서 UPnP에 대한 지원을 구현하여 NAT
traversal을 지원해야 합니다.
- 네트워크 응용 프로그램 개발자는 Windows NAT traversal API를 사용하여
NAT의 존재를 인식하고 해당 응용 프로그램에서 필요한 경우 NAT를 통과할 수 있도록 해야
합니다.
- 일반 사용자는 UPnP 및 NAT traversal을 지원하는 인터넷 게이트웨이 장치를
사용하여 응용 프로그램이 최적의 상태로 작동하도록 해야 합니다.
- DSL 및 케이블 모뎀 서비스 공급자는 NAT traversal을 위해 UPnP를 지원하는
인터넷 게이트웨이 장치를 지정, 판매 또는 임대해야 합니다.
NAT traversal은 IPv6 방식을 통해 NAT 필요성이 없어질 때까지 어떤 형태로든
계속 활용될 것입니다. |