## NAT (Network Access Translation)
네트워크에서 IP주소를 변환하는 기술
Private Network와 Public Network 간의 통신을 가능하게 해줌
NAT는 L3(네트워크 계층)에서 동작한다.
---
## 기술 동인
1. IP 주소 부족
2. 보안의 강화
---
## NAT 메커니즘
### 공유기로 보는 메커니즘
| local IP | Port | Remote IP | Port | Port |
| ------------ | ---- | ----------- | ---- | ----- |
| 192.168.0.10 | 3000 | 10.10.10.10 | 80 | 20000 |
| 192.168.0.11 | 3022 | 10.10.10.10 | 80 | 20001 |
- **필드 의미 설명**
- Inside Local: 내부 네트워크의 실제 IP 주소 (→ 출발지 IP) ✅
- Inside Global: NAT에 의해 변환된 공인 IP (외부에 보이는 출발지 IP)
- Outside Local: 내부에서 본 외부 장치의 IP (보통 같음)
- Outside Global: 외부 장치의 실제 IP (도착지 IP)
* **요청**
* `PC#1`이 `Naver`에 `80`포트로 연결하려 한다
* `PC#1`에서 포트(예시: 3000번)가 열리고 해당 트래픽이 공유기로 이동한다. 이 때, 출발지 주소는 `192.168.0.10:3000`이 된다.
* `공유기`는 목적지 데이터를 확인하고 `PC#1`으로부터 받은 트래픽의 출발지 주소를 `public IP`인 `11.11.11.11`로 바꾸고 적절한 포트번호(예시: 20000)으로 **변환**한다.
* 최종적으로 NAVER가 `PC#1`으로부터 받은 주소는 `11.11.11.11:20000`이 된다.
* **응답**
* NAVER는 응답을 해야한다.
* 응답해주는 주소는 `11.11.11.11:20000`으로, 출발지는 `10.10.10.10:80`이다.
* 공유기는 NAVER부터 응답을 받게 된다. 이 때, 목적지 주소의 port가 `20000`이므로 NAT-table을 확인하여 이에 맞는 목적지 주소로 변환하다. `11.11.11.11:20000`에서 `192.168.0.10:3000`로 변환하여 `PC#1`에게 전달해준다
* `PC#1`은 최종적으로 출발지 `10.10.10.10:80`, 목적지 `192.168.0.10:3000`를 받게 된다.
***
## 종류
* Static NAT (고정 NAT)
* 하나의 사설 IP를 하나의 공인 IP로 매핑
* 주로 서버와 같은 특정 장치에 사용
* Dynamic NAT (동적 NAT)
* 여러 사설 IP 주소를 **공유 가능한 IP 주소 풀** 중에 하나로 변환
* PAT (Port Address Translation)
* 하나의 공인 IP를 사용하고 여러 사설 IP를 사용하는 경우, **사설 IP를 각 포트 번호로 구분**