본문 바로가기
학교 수업/컴퓨터 네트워크

Network layer :: 3-3. NAT(Network address translation)

by Godgil 2020. 6. 17.

 

오늘은 NAT이라는 걸 배워볼거야.

먼저 제목에 적혀있듯이, 그냥 해석을 하면 네트워크 주소 변환이야.

 

IPv4의 주소는 32비트를 가진다고 했었어, 그러면 이 IP주소로 표현할 수 있는

총 주소의 개수는 2의 32제곱이 될거야. 계산기로 계산해보면 4,294,967,296이 나와

 

상당히 많은거 아니야??라고 생각할 수 있는데, 아니야. 턱없이 부족해

 

그래서 이 주소 부족문제를 해결하기 위해서 IPv6로 옮겨야 한다고 주장하는데, NAT이 너무 잘 작동을 하니까, 막 그럴 필요를 못느끼고 있는거야. 그래서 IPv6의 도입이 상당히 느리다고 해.

 

NAT은 어떤 방식인지 간단하게 설명하면, NAT 한 라우터가 단순히 IP주소를 바꿔치기 하는거야.

그러니까 하나의 Global한 IP주소를 가지고, 여러개의 local IP를 만들 수 있는거지.

 

바깥의 인터넷에서 이 NAT 라우터는, 단순히 라우터처럼 보이지 않고, 하나의 특정한 주소를 가진 단말기처럼 작동하는거야.

 

집에서 컴퓨터의 IP주소를 확인해 보면

거의 100% 192.168...으로 시작하거나, 172....이런식으로 시작할거야.

이게 컴퓨터의 Local한 IP주소인거야. NAT을 사용하는거지

 

위의 그림에는 예로 그냥 10.0.0.4를 들어놨는데,

바깥 global한 네트워크에서 10.0.0.4로 패킷을 보내면 찾아 갈 수가 없어, 왜냐면 안쪽에 있는 local network에서만 쓰는 IP주소니까 바깥에서는 확인이 안되는거지. 뒤에서 더 설명할게.

 

어쨋든, 이 local network에서 global network로 데이터그램을 보내고 싶다고 하면,

가장 먼저 NAT 라우터한테 내 데이터그램이 보내질거란 말이지.

그럼 이 NAT 라우터는, source IP주소와 source port number를  자기가 가지고있는 IP주소와 포트넘버로 바꿔치기 하는거야,

바꿔치기 하면서 기존 정보를 NAT라우터에 TABLE형태로 기록해 두는거지.

 

어? 그러면 IP주소를 바꾸는건 알겠는데, port number는 왜 바꾸는거야?

port number가 같을 수도 있기 때문이야, 내 컴퓨터랑 친구 컴퓨터에서 동시에 포트 39232를 통해 global network로 보낼 수 있거든, 그렇게 되면 나갈때는 별 문제가 없겠지만, 다시 우리 local network로 들어 올 때, 찾을 수가 없는거야 누가 보냈는지 서로 자기꺼라고 할테니까.

 

핵심은 이거거든, 하나의 Global IP address를 가지고 여러 개의 단말을 쓸 수 있다는거야.

 

이걸 잘 확인할 수 있는 방법이 뭐냐면,

 

컴퓨터의 콘솔창에서 ipconfig을 통해 IP주소를 확인해보면

짜잔~ 이런식으로 192.168.의 형태로 나온단말이지?

그런데, 네이버에 IP주소를 확인 할 수 있는 방법이 있거든 그냥 IP주소 확인이라고 검색하면 되는데,

내 IP주소는 14.33...의 형태래 다르게 나오지? 

네트워크 관점에서 살펴보면, 네이버에서 내 IP를 확인하는 방법은

내가 보낸 패킷의 IP헤더를 뜯어서 거기에 있는 IP주소를 보여주는거란 말이지.

 

1. 192.168로 처음에 내가 패킷을 네이버로 보내려하면

2. 내가 속해있는 NAT라우터는 14.33...의 형태로 바꿔치기해서 네이버에 보내고

3. 네이버는 그걸 그대로 믿는거지.

4. 위의 IP 정보를 보여줄때는 당연히 네이버는 14.33의 형태로 내 NAT라우터에게 보낼거고

5. 내 NAT 라우터는 나갈때 매핑했던 정보를 가지고 내 컴퓨터를 찾아서, 정보를 줄 수 있는거야.

 

위의 과정이 순서대로 일어나는거야.

 

 

그러니까 네이버에서는 내 컴퓨터 주소를 내가 속해있는 NAT라우터의 IP주소로 확인한다는 거지.

 

근데 중요한건 내 컴퓨터에서 NAT 라우터를 지날때 global한 IP주소가 매핑이 되는거야. 그러니까 나갈때 매핑이 된단소리지. 그래서 global network에서 바로 내 컴퓨터를 찾으려면 찾을 수가 없는거야

 

혹시 막 옛날에 멀티 가능한 게임을 해 본 사람이 있는지 모르겠는데, IP주소를 치라고 해서 친구 IP주소를 받아서 입력하면 찾을수가 없다고 나오거든, 그게 NAT시스템 때문에 그런거야. 나갈때만 매핑이 되는거니까.

 

바깥의 글로벌한 네트워크에서는 분명히 내 컴퓨터의 IP주소인 192.168....으로 패킷을 보낼텐데, 나는 한 NAT라우터의 사설망 안에 있거든, 당연히 찾을 수가 없는거지. 그래서 막 하마치같은 IP연결해주는 프로그램을 사용해서 멀티 게임을 친구랑 같이 한 경험이 있었어. 배울때 갑자기 생각나더라구.

 

이제 바깥의 인터넷에서 이 NAT 라우터는, 단순히 라우터처럼 보이지 않고, 하나의 특정한 주소를 가진 단말기처럼 작동하는거야. <<< 이 말의 의미를 알 것 같지?

 

 

NAT 서비스의 장점이 뭘까?

당연히 하나의 global한 IP주소를 가지고 여러대의 사설 네트워크를 만드는 거라서 IPv4의 주소부족 문제를 해결 할 수 있는거야. 이게 너무 잘 작동하거든

또, 하나의 사설 네트워크를 만드는거라서, 다른 사설 네트워크에서도 192.168하는 똑같은 IP주소가 여러 개 존재 할 수 있다라는거야. 큰 장점이지.

 

당연히 장점이 있으니 단점도 있을거야

NAT 서비스의 단점은

p2p서비스가 잘 작동을 안해. p2p는 이제 각각의 피어들이 동등한 관계로 서버가 되면서 동작을 하는건데,

한번 내부의 NAT 라우터를 거쳐야하기 때문에 바깥쪽에서는 내 컴퓨터를 찾을 수가 없는거지, 그래서 작동을 잘 안해.

또 port number를 바꾸어 버렸어, port넘버는 트랜스포트 레이어의 영역이거든, 근데 이 port number를 network layer에서 막 바꿔치기 한다는거지,

이게 왜 문제가 되냐면, 인터넷의 계층 철학을 무시하는거기 때문이야.

 

그래서 결론적으로는, IPv4의 주소 부족 문제를 해결하기 위한거지만, IPv6로 가는 대안이 있음에도 불구하고 사용하는 일종의 꼼수라는거야. IPv6로 해결하는게 바람직한거지.

 

댓글