NAT이란?
NAT(Network Address Translation)은 네트워크 주소 변환이라고 해석된다.
그럼 무엇을 어떻게 변환해주느냐? Internal(Private) Address와 External(Public) Address를 변환해주는 것이 NAT이다.
여기서 Internal Address와 eAddress가 무엇인지 알 필요가 있다.
사실 Internal IP Address와 Internal Port, External IP Address와 External Port가 있는데 그냥 내맘대로 묶어서 Internal Address와 Private Address로 불렀음.
Internal Address : 내부 주소라는 뜻으로, Private Address, 사설 아이피 등으로도 불린다. IANA(Internet Assigned Numbers Authority, 대충 공인 아이피 발급 기관) 에서 발급한 IP 주소가 아닌 사설 기관에서 발급한 IP를 말한다. 우리가 사용하는 공유기에 묶인 기기들은 대부분 이 사설 아이피를 사용한다. 이 주소는 인터넷에 직접 연결되고 라우팅될 수 없다. 다만 NAT을 통해 연결될 수 있다. IPv4주소를 절약하기 위하여 사용중이다. IPv6로 완전히 이전되면 사용할 필요는 없을 것 같다.
이 사설 IP는 정해진 대역 내에 존재하는데 그 대역은 아래와 같다.
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
만약 자신의 IP 주소가 이 범위 안에 있으면 사설 IP를 사용중이라고 보면 된다.
External Address : 외부 주소라는 뜻으로, Public Address, 공인 아이피 등으로 불린다. IANA에서 발급한 공인 IP이다. 즉 세상에 단 하나만 존재하는 유일한 IP 주소이다. 따라서 전세계 통신 사업자 망을 통해 라우팅(통신)이 가능하다.
SK브로드밴드는 보통 사설 IP를 생성하고, KT인터넷은 보통 공인 IP를 생성한다고 함. 진짠가?
변환 방식
NAT은 사설 IP와 공인 IP를 묶은 테이블(NAT Binding Table) 을 생성해서 관리한다. 이때 NAT의 종류에 따라 테이블이 조금 달라진다. NAT은 Basic NAT과 NAPT(Network Address Port Translation)가 있는데, 둘의 차이는 사설 IP와 공인 IP가 1:1 관계냐, n:1 관계냐로 나뉜다.
- Basic NAT : 사설 IP와 공인IP가 1:1 관계이다. IPv4 주소 절약은 안되지만 사설 아이피는 외부에서 접근이 불가능하므로 보안용으로 사용된다. 보통 기업이 많이 사용한다. NAT Binding Table은 Private IP/Public IP/Binding Lifetime의 형태이다.
- NAPT : 사설 IP와 공인IP가 n:1 관계이다. 일반 가정에서 많이 쓰인다. 그냥 NAT라고 하면 NAPT를 의미하는 경우가 많다. NAT Binding Table에는 Basic NAT에서 Port 번호까지 포함된 Private IP/Private Port/Public IP/Public Port/Binding Lifetime의 형태가 된다.
내부에서 외부로 나가는 트래픽을 Outbound Traffic 이라고 하고, 외부에서 내부로 들어오는 트래픽을 Inbound Traffic 이라고 한다. 이 트래픽들이 NAT을 통과할 때 NAT Binding Table을 참조하여 패킷을 적절히 조작해준다.
- Inbound Traffic : NAT Binding Table을 참조하여 패킷의 Destination address를 Public IP/Port로 바꿔준다. 또한 IP Header Checksum, TCP/UDP Header Checksum도 바꾸어준다.
- Outbound Traffic : NAT Binding Table을 참조하여 패킷의 Source address를 Public IP/Port로 바꿔준다. 또한 IP Header Checksum, TCP/UDP Header Checksum도 바꾸어준다.
Source/Destination Address?
Source Address는 패킷의 출발지 주소, Destination Address는 패킷의 도착지 주소를 의미한다. Source/Destination IP/Port도 마찬가지.
변환과정
NAT의 주소 변환 과정은 크게 3 단계로 나뉜다.
- Address Binding : Private IP를 가진 단말이 최초로 Outbound Traffic을 보내면 NAT 장비가 해당 Traffic에 대해 Private Address와 Public Address를 결정하고, NAT Binding Table에 Session 엔트리를 만든다.
- Address Lookup & Translation : 이후 보내지는 Outbound/Inbound Packet들을 만들어진 NAT Binding Table을 참조해 적절히 변환해준다. (변환방식 참조)
- Address Unbinding : NAT Binding Table의 각 엔트리들에 대해 일정 시간이상 traffic이 발생하지 않으면 해당 Session 엔트리를 제거해준다.
*Outbound Traffic이 발생할 때 Address Binding이 이루어 진다는 점에 주목할 필요가 있다. 이는 곧 Inbound Traffic이 먼저 발생하면 Address Binding 작업이 이루어지지 않고 해당 패킷은 그냥 버려진다는 의미이다. 다음 글에 설명할 Connection Reveral을 이해할 때 필요하다.
'네트워크, 서버' 카테고리의 다른 글
Overlapped 모델(콜백함수) (0) | 2022.04.30 |
---|---|
WSAEventSelect model (0) | 2022.04.29 |
Select model (0) | 2022.04.28 |
Socket Options (0) | 2022.04.28 |
웹 서버 vs 게임 서버 (0) | 2022.01.23 |