현재 국내 통신사업자는 유선 액세스(FTTH, Ethernet, DSL 등)를 제외한 (거의) 모든 액세스 망에 NAT 장비를 적용하고 있습니다.
용어의 정의 (Terminology)
1. TU Ports
TCP와 UDP 헤더에는 각각 TCP Source & Destination Port #와 UDP Source & Destination Port #가 존재하는데 이를 총칭하여 TU Ports라고 부릅니다. 혹은 Transport Identifier라고도 부릅니다. 보통 단말(Client)이 서버(Server)와 TCP 혹은 UDP 통신 시 TU Destination Port는 0 ~ 1023 (Well Known Ports, which is defined by IANA) 혹은 1024 ~ 49191 (Registered Ports, which is not defined by IANA) 중에 하나의 값[RFC 1700에 정의]을 사용하며(대표적인 예. HTTP는 TCP Destination Port = 80 사용), TU Source Port는 OS 마다 서로 다른 범위(대략 30,000~60,000)의 값 중에 하나를 random하게 사용하는데 이를 Ephemeral Port라고 부릅니다(http://en.wikipedia.org/wiki/Ephemeral_port 참조).
2. Public/Global/External Network
IANA(Internet Assigned Numbers Authority) 기관에서 할당 받은 Globally Unique한 IP 주소를 가진 네트워크를 말하며 따라서 이 네트워크는 전세계 통신 사업자 망을 통해 라우팅(통신)이 가능합니다. 흔히 "공인 IP 네트워크"라고 부릅니다.
3. Private/Local Network
IANA에서 할당 받지 않은 IP 주소를 가진 네트워크를 말하며 인터넷에서 라우팅 될 수 없습니다. 흔히 "사설 IP 네트워크"라고 부릅니다.
IANA에서는 아래 3개의 IP 블럭을 이 용도로 정의하고 있습니다.
4. Session
NAT에 의해 변환(translation)되는 트래픽의 단위를 Session으로 정의하고 있는데(A session is defined as the set of traffic that is managed as a unit for translation), 쉽게 말해 TCP/UDP Session은 {source IP address, source TU port, destination IP address, destination TU port}로 구분되는 것을 말합니다.
5. Application Level Gateway (ALG)
응용에 따라 Payload(TCP/UDP 헤더 이후에 나오는 Application specific한 데이터)에 IP address or/and TU port 정보가 실리는 경우가 있습니다. ALG란 응용 별로 Payload 내의 IP address or/and TU port 정보를 변환(translation) 해 줄 수 있는 기능(agent)이 NAT 장비에 올라가 있는 경우이며(Application awareness inside the NAT), 보통 이 NAT 장비는 어떤 어떤 응용(예. FTP, SIP, RTSP, etc)을 지원한다라는 식의 응용 프로그램 리스트를 함께 얘기하곤 합니다. 세상에 쏟아져 나오는 각종 응용 프로그램에 대한 ALG를 NAT 장비가 모두 지원한다는 건 비현실적이기 때문에 ALG를 지원하는 NAT 장비는 그리 많지 않은 듯 합니다.
NAT란? (What is NAT?)
NAT(Network Address Translation)란 한마디로 Private Network에 위치하는 단말이 Public Network(인터넷)과 통신이 가능하도록 상호 간에 연결 시켜 주는 기능입니다.
Traditional NAT would allow hosts within a private network to transparently access hosts in the external network, in most cases. In a traditional NAT, sessions are uni-directional, outbound from the private network. Sessions in the opposite direction may be allowed on an exceptional basis using static address maps for pre-selected hosts. (RFC 3022)
Traditionally, NAT devices are used to connect an isolated address realm with private unregistered addresses to an external realm with globally unique registered addresses. (RFC 2663)
|
NAT의 종류
RFC 3022/2663에서는 NAT를 Basic NAT와 NAPT(Network Address Port Translation)로 구분하여 설명하고 있으며, 이 2개를 총칭하여 Traditional NAT라고 부르고 있습니다. "IPv4 주소의 절약"이라는 목적을 위해 사용되는 NAPT가 현재 일반적인 NAT 장비의 방식이며, 따라서 그냥 NAT라고 하는 경우에 NAPT를 의미하는 경우가 많으며 현재 모든 유무선 공유기는 NAPT 방식을 지원하고 있습니다.
Basic Network Address Translation or Basic NAT is a method by which IP addresses are mapped from one group to another, transparent to end users. Network Address Port Translation, or NAPT is a method by which many network addresses and their TCP/UDP (Transmission Control Protocol/User Datagram Protocol) ports are translated into a single network address and its TCP/UDP ports. Together, these two operations, referred to as traditional NAT, provide a mechanism to connect a realm with private addresses to an external realm with globally unique registered addresses. (RFC 3022)
|
Basic NAT
■ Definition : 목적 및 정의
기업망(Enterprise Network)에서 보안의 목적(방화벽)으로 사용하며, Private IP 주소를 가지는 단말 개수 만큼 Pubilc IP 주소를 가지고 인터넷과 연결됨
Nodes on private network could be enabled to communicate with external network by dynamically mapping the set of private addresses to a set of globally valid network addresses. (RFC 3022)
■ Translation : Translation 규칙
1:1 translation (1 = Public IP, 1 = Private IP)
■ Mapping : Translation되는 패킷 정보
- Outbound Traffic: Translation {Private Source IP Address} to {Pubilc source IP Address}
- Inbound Traffic: Translation {Public Destination IP Address} to {Private Destination IP Address}
■ Packet Modification : Translation 수행 시 변경되는 패킷 정보
- Outbound Traffic: Source IP Address, IP Header Checksum
- Inbound Traffic: Destination IP Address, IP Header Checksum
1. Address Binding
Private IP Address를 가진 단말이 보낸 Outbound Traffic에 대해 Basic NAT 장비가 {Private IP Address}에 대한 {Public IP Address}를 결정하고(1:1 mapping) NAT Binding Table에 세션 엔트리 생성
2. Address Lookup and Translation
NAPT (Network Address Port Translation)
■ Definition : 목적 및 정의
Public IP 주소 절약을 목적으로, Private IP 주소를 가지는 여러대의 단말이 하나의 Public IP 주소를 통해 인터넷과 연결되는 방식
Nodes on the private network could be allowed simultaneous access to the external network, using the single registered IP address with the aid of NAPT. (RFC 3022)
■ Mapping : Translation되는 패킷 정보
- Outbound Traffic: Translation {Private Source IP Address, Local TU Source Port} tuple to {Pubilc Source IP Address, Registered TU Source Port} tuple
- Inbound Traffic: Translation {Public Destination IP Address, Registered TU Destination Port} tuple to {Private Destination IP Address, Local TU Destination Port}
■ Packet Modification : Translation 수행 시 변경되는 패킷 정보
- Outbound Traffic: Source IP Address, IP Header Checksum, TU Source Port, TCP/UDP Header Checksum
- Inbound Traffic: Destination IP Address, IP Header Checksum, TU Destination Port, TCP/UDP Header Checksum
■ Translation Phases of a Session : Translation 3 단계
1. Address Binding
Private IP Address를 가진 단말이 보낸 Outbound Traffic에 대해 NAPT 장비가 Private IP Address와 TU Source Port에 대한 Public IP Address 및 TU Source Port를 결정하고(1:N mapping) NAT Binding Table에 세션 엔트리 생성
2. Address Lookup and Translation
■ Deployment Example : 적용 예
Wi-Fi Hotspot, SOHO, Home, 3G/LTE LSN
이해하기 쉽게 설명해 주셔서 감사합니다. 질문이 있습니다.
NAPT 에서 local port 를 resistered port 로 translation 하는 이유가 무었입니까. private ip 를 매핑하기 위함이라면 local port 를 그대로 사용해도 될것 같은데요..
감사합니다.
NAT는 내부 단말의 IP만 변경하고 내부 단말의 발신 포트 번호는 그대로 유지하는 경우고 NAPT는 IP 및 내부
단말의 발신 포트 번호를 모두 변경하는 것을 말하게 되는데,
만약 NAPT 장비내부에 2개 이상의 단말이 있다면 두 단말이 같은 시점에 동일한 registered port 번호를 사용하여
통신을 할 수 있기 때문에 이런 경우를 방지하기 위해 NAPT에서는 일반적으로 내부 IP & PORT를 모두 변경하는
방법을 선택합니다. (NAPT 입장에서는 내부에 단말이 있는지의 여부와 해당 단말이 언제 어떤 포트 번호를 발신 포트로 쓸 지 알 수 없지요)
물론 NAPT 구현 시 local port 를 그대로 유지하고 두번째 단말이 동일 포트를 사용하려고 할 때만 신규 포트를
할당해서 매핑하도록 구현을 해도 문제는 없습니다. 구현상의 문제일 뿐이지요.
참고로 일반적인 OS에서 TCP/UDP 포트를 할당할 때는 registered port인 1024번 포트부터 순차적으로
증가시키면서 round-robin 형태로 포트번호를 할당합니다. 이렇게 하는 이유는 이미 사용된 포트에 대한 명시적인
종료가 안된 상태에서 다른 서비스에 동일 포트를 할당하게 되면 잘못된 데이터 전달이 발생할 수도 있고, OS
내부적으로도 포트 자원 관리가 용이하기 때문이지요.
안녕하세요. 버너님
설명 감사합니다. 동일 포트를 동시에 사용하는 경우를 방지하고자 포트번호 translation 이 필요하다는 점을 알았습니다. 제가 헷갈렸던 부분중 하나는 local port 를 registered port 로 translation 한다는 내용인데 각각의 의미가 무었인지요 ? NAPT 를 사용하는 경우 local port 가 할당되고 사용하지 않는 일반적인 경우는 registered port 가 할당됩니까 ?
감사합니다.
안녕하세요 창모형
공유기 내에서 어떤일이 일어나는지 평소 생각없이 사용하였는데 궁금해서 찾아보니 좀처럼 찾기가 어렵네요.
알기쉬운 설명 감사합니다. 이해가 쏙쏙 됩니다.