Shine's dev log

NAT(Network Address Translation) 의 개념 본문

컴퓨터 네트워크

NAT(Network Address Translation) 의 개념

dong1 2021. 3. 7. 18:31

1. local 네트워크

 

보통 컴퓨터의 cmd에서 ipconfig 명령어를 통해 IP 주소를 확인해보면, 192.168.~ 이렇게 시작하는 경우가 많을 것이다.

하지만, 네이버에 IP 주소 확인이라고 검색해보면 나오는 IP주소는 위의 주소와 다르게 나온다.

 

같은 컴퓨터로 똑같이 IP 주소를 검색했는데 다르게 나오는 이유는 무엇일까?

 

보통 사용자들이 사용하는 네트워크는 local 네트워크를 사용한다.

아래 그림에서 라우터 오른쪽에 있는 subnet을 local 네트워크라고 칭하는데, 그 속에서는 자체적인 IP 주소를 사용한다. 원래 IP 주소는 겹치면 안되지만, local 네트워크 속에서는 다른 local 네트워크와 같은 IP주소를 써도 상관 없다.

 

예를들어, 110동 901호에 사는 사람과 112동 901호에 사는 사람은 같은 901호에 살지만, 서로 다른 아파트에 살기 때문에 상관이없는 것과 유사한 원리이다.

 

local network

 

보통 local network의 private address 는 10.~ , 172.~ , 192.168.~ 이렇게 세가지 경우로 시작한다.

 

 

 

2. NAT (Network Address Translation)

 

이렇게 local network 속에서는 IP주소 중복을 고려하지 않아도 된다는 점을 이용해 NAT라는 기술이 나왔다.

 

IPv4 주소의 경우, 각 host에게 할당할 수 있는 주소의 개수가 한정적이므로, 조금 더 많은 host에게 주소를 할당해주기 위해 NAT를 사용한다.

 

즉, NAT를 사용하지 않으면 하나의 IP주소로 하나의 host만 연결할 수 있지만, NAT를 사용하면 하나의 IP주소로 여러개의 host를 매핑할 수 있는 것이다.

 

NAT의 기본 구조는 아래와 같다.

 

NAT

 

우선 가장 중요한 것은 local 네트워크 내부의 host를 매핑해주는 NAT translation Table이다.

 

local 네트워크 내부의 host가 패킷을 보내고, 서버가 이를 다시 대답해준다고 할 때, 서버 입장에서는 local 네트워크 입구에서 보낸것으로 생각하므로 53.12.29.5 까지만 보내준다.

 

이렇게 local 네트워크 입구까지 도착한 패킷을 올바른 호스트에게 전해주어야 하는데, 이 때 NAT translation Table이 사용된다. 자세한 동작 단계는 아래와 같다.

 

1) local 네트워크 내의 host는 서버에게 패킷을 보낸다.

2) NAT 라우터는 source 주소를 자신의 주소로 바꾸고, 해당 host를 식별할 수 있는 포트 번호를 새로 부여한다.

3) 서버는 해당 패킷을 받고, 대답하기 위해 destination 주소를 NAT 라우터의 주소로 설정한다.

4) 서버가 보낸 패킷을 받은 NAT 라우터는 NAT translation Table의 포트 번호를 보고 호스트를 특정해 보내준다.

 

 

여기서 중요한 점은, NAT 라우터는 local 네트워크 내의 호스트를 특정하기 위해 포트 번호를 사용한다는 것이다. 만약 16비트 포트 번호를 사용하면 최대 약 60,000개의 호스트를 처리할 수 있다.

 

 

 

3. NAT traversal problem

 

위의 예시는 local 네트워크 내의 호스트가 먼저 패킷을 보내는 경우, 즉 클라이언트일 경우의 사례이다.

패킷이 local 네트워크 내부에서 외부로 나가면서 NAT translation table에 표시를 하고 가므로, 나중에 돌아올때도 이를 참고하면 된다.

 

하지만, local 네트워크 내의 호스트가 서버일 경우, 외부 네트워크에서 local 네트워크로 패킷이 먼저 들어오게 된다. 이럴 경우, NAT translation table에 아무 정보가 없으므로 local 네트워크 내의 어느 host에게 패킷을 줘야할 지 불분명하다. 이를 NAT traversal problem 이라고 한다.

 

대표적인 해결법은 다음과 같다.

 

 sol 1) 직접 지정

  - NAT 라우터의 설정에서 직접 수동으로 포트번호와 host를 매핑해준다.

 

 sol 2) UPnP 활용

  - UPnP의 Internet Gateway Protocol (IGP)를 활용한다. IGP를 통해 자동으로 호스트와 NAT 라우터를 관리해준다.

 

 sol 3) relay 서버 활용

  - local 네트워크 외부에 relay 서버를 활용하여 미리 매핑 정보를 업로드한다.

 

 

 

4. ICMP 프로토콜

 

ICMP (Internet Control Message Protocol)은 네트워크 레벨에서 문제가 생겼을 경우 이를 보고해주는데 사용되는 프로토콜이다. 이 때 전달하는 과정에서 IP 프로토콜을 활용하는데, 주로 IP datagram에 캡슐화되어 함께 전송된다.

 

대표적으로 Ping, Tracert 명령에 사용된다.

 

 

오늘 내용을 정리해보면,

 

1. local 네트워크에서는 IP 주소 중복을 걱정하지 않아도 된다.

 

2. local 네트워크의 특징과 Ipv4 의 한계를 극복하기위해 NAT를 활용하면 더 많은 host를 관리할 수 있다.

 

3. 네트워크 레벨에서 문제점이나 상황을 보고할 떄 ICMP 프로토콜을 사용한다.

 

위 내용은 공부하며 작성한 것으로, 오류가 있을 수 있습니다.

'컴퓨터 네트워크' 카테고리의 다른 글

라우팅 알고리즘 (Link state & Distance vector)  (0) 2021.07.14
IPv6 의 개념  (0) 2021.07.02
IP addressing (CIDR, DHCP)  (0) 2021.03.04
IP 프로토콜 (IP header, fragmentation)  (0) 2021.03.03
Network layer 개요  (0) 2021.02.28