이전 글에서는 Network Layer의 프로토콜인 IP와 IP 주소 부여, subnet, DHCP, route aggregation 등에 대해서 정리해 보았다.
그리고 이전 부분에서 계속 언급했던 것은 IPv4의 IP 주소는 한계가 있다는 점이었고, 실제로 2011년에 IPv4의 IP 주소 할당은 끝났다. 그리고 이에 대한 편법 같은 방법 중 하나가 NAT라고 했는데, 이번 글에서는 이 NAT에 대해서 정리해 보려고 한다.
1. NAT : Network Address Translation
NAT는 무엇일까? NAT는 우리가 흔히 집에서 사용하는 공유기라고 생각하면 된다. 즉, local network에 있는 device들이 IPv4의 하나의 주소로 공유하는 것이다. 다음 그림을 살펴보자.

그림의 가운데 NAT를 기점으로 오른쪽은 local network, 왼쪽은 나머지 Internet을 나타낸다. 즉 local 기준으로 가운데 NAT 라우터 하나를 거치면 바로 외부 network랑 이어지는 것이다.
이때, router의 IP 주소를 잘 확인해 보자. 총 2개의 IP 주소가 부여되었는데, 외부에서는 138.76.29.7의 IP 주소, local에서는 10.0.0.4의 IP 주소가 있다.
local network에 있는 모든 device들은 오로지 local network에서만 사용되는 private한 32bit의 IP 주소를 가진다. 주소 형식은 다음과 같다.
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
이렇게 local network에서의 자체 IP 주소를 가진다면 다음과 같은 장점이 있다.
- 모든 장비들에 대해 IP 주소를 부여할 필요 없이 ISP는 NAT에 해당하는 IPv4의 IP address만 할당하면 된다.
- host의 local network의 주소를 외부 네트워크에 알릴 필요 없이 바꿀 수 있다.
- 모든 장치들의 주소를 바꿀 필요 없이 ISP를 바꿀 수 있다.
- 보안 측면에서도 유리하다.
이 NAT는 외부에서 local network로 트래픽을 보낼 때, destination IP 주소를 138.76.29.7로 보낸다. 만약 이 local network의 주소 중 하나인 10.0.0.1로 보내면 NAT에 도달한다고 해도, NAT는 이 트래픽을 무시한다.
NAT에 대해서 더 자세히 알아보자. 외부에서 local network의 host에게 데이터를 보낼 때, 또는, local network에서 외부 네트워크로 데이터를 내보낼 때는 IP address를 어떻게 처리해야 될까?
먼저, local network에서 데이터를 내보낼 경우를 생각해보자. 다음 그림을 살펴보면,

local network의 한 host가 외부 네트워크로 데이터를 전송하려고 할 때이다. 그림에서 작동하는 순서를 설명하면,
- host가 datagram의 src IP 주소와 port 번호에 본인의 IP 주소와 port번호를 실어서 보낸다.
- NAT가 해당 패킷을 받고, src IP 주소 부분과 port 번호 외부 네트워크에서 보는 본인의 IP 주소와 임의의 port 번호로 대체한다.
- 그리고 목적지로 패킷을 보낸다.
이때, NAT에서는 바꾼 IP 주소와 port번호를 NAT translation table에 맵핑해서 다음과 같이 저장한다.

+) port번호를 NAT의 port 번호로 보내지 않는 이유는 port 번호로 local network의 host들을 식별해야 되기 때문이다.
다음으로, 외부에서 local network로 데이터를 보낼 경우를 생각해보자. 다음 그림을 확인해보자.

위의 그림에 대해서 외부 네트워크가 응답(=데이터)을 보내는 상황이다. 이때, 그림의 3,4번이 일어나는데 순서대로 설명하면,
- 목적지가 2번의 패킷을 받고, 응답을 하기 위해 datagram에 목적지의 IP 주소와 포트 번호를 작성한다.
- 이때, local network의 정확한 IP 주소를 모르기 때문에, 받았던 NAT의 IP주소와 포트 번호를 메세지에 작성하는데,
- NAT는 해당 응답 메세지를 받고 NAT translation table을 참조해 맵핑되었던 IP주소와 포트 번호를 확인한다.
- 해당 주소와 포트번호로 목적지 정보를 대체하고, 해당 local network의 host에게 전달한다.
사실 이런 NAT는 다음과 같은 논쟁이 있다.
- 라우터는 3계층의 일만 담당해야 되지만, 위의 NAT 동작 과정에서, NAT는 4계층에 해당하는 port 번호까지 참고해서 주소를 변환한다는 것을 알 수 있다.
- 주소 제한은 IPv6(128bit 짜리 주소 사용)에 의해서 해결되어야 하지만, NAT는 편법이다.
- end-to-end argument를 위반한다.
- 만약 client가 NAT 뒤에 있는, 즉 외부 네트워크에 있는 서버와 직접 연결을 원한다면 복잡한 문제가 생긴다.
그렇지만, NAT가 많이 쓰이는 이유는,
- 주소 부족 문제를 해결했고,
- cellular nets에서 확장적으로 잘 쓰이고 있기 때문이다.
- 또, 사실 사용자들은 IPv6를 사용하던지, IPv4를 사용하던지 크게 신경쓰지 않고 서비스 이용에 불편함만 없으면 되기 때문에, 굳이 IPv6로 대체할 필요가 없다고 생각하는 것이다.
'학교공부 > [컴퓨터 네트워크]' 카테고리의 다른 글
| [컴퓨터 네트워크] - Network Layer_Generalized Forwarding (0) | 2025.06.06 |
|---|---|
| [컴퓨터 네트워크] - Network Layer_IPv6 (0) | 2025.06.05 |
| [컴퓨터 네트워크] - Network Layer_IP (3) | 2025.06.05 |
| [컴퓨터 네트워크] - Network Layer_라우터의 구조 및 기능 (2) | 2025.06.03 |
| [컴퓨터 네트워크] - Network Layer_프롤로그 (0) | 2025.06.02 |