NAT는 Network Address Translation의 약자로 하나의 공인 ip로 여러 호스트(pc)가 인터넷에 연결될 수 있도록 하는 기술이다. 보통 라우터나 방화벽에 설치되는 기술이다. 주소를 변환하는 과정에서 속도 저하가 발생된다.
<예시 상황>
위와 같은 조건에서 HOST가 ROUTER를 통해 SERVER와 통신하는 과정을 알아본다. 아래 과정은 NAT의 한 종류인 PAT다.
HOST가 SERVER로 신호를 보내기 위해 패킷 헤더에 출발지와 목적지를 기록.
출발지 : 10.0.0.1
목적지 : 200.100.10.1
이때 ROUTER에서 HOST가 외부로 신호를 보낸다는 것을 인지하고 출발지를 자신의 공인ip 주소로 변경해 기록하고, 해당 정보들로 NAT 테이블을 생성.
출발지 : 10.0.0.1 -> 150.150.0.1
목적지 : 200.100.10.1
<NAT 테이블>
| 프로토콜 | 사설ip | 출발지ip | 목적지ip |
|---|---|---|---|
| TCP | 10.0.0.1 | 150.150.0.1 | 200.100.10.1 |
위 과정을 통해 SERVER에 신호가 도착한다면 SERVER는 데이터를 수신해 처리하고 응답한다. 이때도 패킷 헤더에 출발지와 목적지를 기록한다. 하지만 이때의 목적지ip는 ROUTER의 공인 ip주소로 기록한다.
출발지 : 200.100.10.1
목적지 : 150.150.0.1
해당 패킷을 ROUTER가 받게 되면 기존에 기록해두었던 NAT 테이블을 참조해 목적지를 ROUTER의 공인 ip에서 사설 ip로 변경한다. 이러면 통신 완료
출발지 : 200.100.10.1
목적지 : 150.150.0.1 -> 10.0.0.1
※ 만약 여러 사설 ip들이 같은 SERVER와 통신을 원한다면?
<NAT 테이블>
| 프로토콜 | 사설ip | 출발지ip | 목적지ip |
|---|---|---|---|
| TCP | 10.0.0.1 | 150.150.0.1 | 200.100.10.1 |
| TCP | 10.0.0.2 | 150.150.0.1 | 200.100.10.1 |
| TCP | 10.0.0.3 | 150.150.0.1 | 200.100.10.1 |
다음과 같은 NAT 테이블이 기록되어 어떤 사설 ip가 SERVER로 신호를 보냈던 SERVER에서 되돌아오는 패킷에 목적지가 150.150.0.1로 표시되어 있기 때문에 어떤 사설 ip로 응답을 보내야 하는지 모르게 될 것이다. 이를 위해서 포트를 이용해 각각의 사설 ip들을 구분하는 방식을 이용한다. 이를 PAT 또는 NAPT라고 한다.
즉, 다음과 같은 NAT 테이블이 생성됨
<NAT 테이블>
| 프로토콜 | 사설ip | 사설망포트 | 출발지ip | 목적지ip |
|---|---|---|---|---|
| TCP | 10.0.0.1 | 1 | 150.150.0.1 | 200.100.10.1 |
| TCP | 10.0.0.2 | 2 | 150.150.0.1 | 200.100.10.1 |
| TCP | 10.0.0.3 | 3 | 150.150.0.1 | 200.100.10.1 |