NAT(Network Address Translation)이란 IP 패킷에 있는 소스와 목적지 주소를 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술이다. NAT을 이용하면 다음과 같은 이점이 있다.
공유기에 연결된 컴퓨터로 통신할 경우, 컴퓨터에서 나오는 트래픽은 공유기(라우터)를 항상 거치게 되어 있다. 컴퓨터의 사설망 IP 주소를 그대로 이용할 경우, 수신 측이 답장을 보낼 때 해당 IP 주소에 대한 정보가 없으므로 어느 경로로 패킷을 보내야 할지 알 수 없다.
따라서 라우터는 트래픽이 나갈 때, 소스 IP 주소를 자신의 공인망 IP 주소로 바꾼 뒤 패킷을 전송한다. 이를 받은 수신 측은 소스 주소를 목적지 주소로 하여 라우터로 재발송한다.
하지만, 이 과정에서 라우터가 패킷을 받을 뿐 기존 소스 주소인 컴퓨터로 보내지지 않는다. 따라서 라우터는 내부 네트워크에서 트래픽이 나갈 때 테이블을 통해 기존 소스 주소를 기억한다.
| 프로토콜 | 사설 IP 주소 | 라우터 IP 주소 | 목적지 IP 주소 |
|---|---|---|---|
| TCP | 10.0.0.2 | 15.0.0.1 | 175.118.89.129 |
여러 호스트가 같은 목적지 주소로 패킷을 보낸 상황의 NAT 테이블은 다음과 같다.
| 프로토콜 | 사설 IP 주소 | 라우터 IP 주소 | 목적지 IP 주소 |
|---|---|---|---|
| TCP | 10.0.0.2 | 15.0.0.1 | 175.118.89.129 |
| TCP | 10.0.0.3 | 15.0.0.1 | 175.118.89.129 |
이 때, 목적지로부터 라우터 주소인 15.0.0.1을 목적 주소로 하는 패킷이 발송되면 라우터는 어떤 사설 IP 주소로 보내진 패킷인지 구별할 수 없다.
따라서 포트 넘버를 같이 기록하는 NAPT(Network Address Port Translation)를 이용하여 이를 해결한다. 위와 같은 상황에서 NAPT 테이블이 다음과 같다고 가정하자.
| 프로토콜 | 사설 IP 주소 | 사설 포트 넘버 | 라우터 IP 주소 | 라우터 포트 넘버 | 목적지 IP 주소 |
|---|---|---|---|---|---|
| TCP | 10.0.0.2 | 50 | 15.0.0.1 | 10001 | 175.118.89.129 |
| TCP | 10.0.0.3 | 51 | 15.0.0.1 | 10002 | 175.118.89.129 |
이 때, 15.0.01을 목적 주소로 하는 패킷이 발송되더라도 수신 패킷의 라우터 포트 넘버를 통해 어떤 사설 IP 주소로 온 패킷인지 구분할 수 있다.