네트워크를 공부하려면 필수적으로 거쳐야 하는 것이 바로 사설망이다.

NAT가 무엇인지 알고는 있었지만 새로운 사실을 공부한 김에 다시 개념을 정리하도록 하겠다.



NAT란 무엇인가


 NAT는 Network Address Translation의 약자이다.

현재 사용하는 XXX.XXX.XXX.XXX 형태의 IP 주소는 IPv4 형식으로 4 옥텟으로 표현하도록 되어 있다.

여기서 옥텟이란 8개의 연속적인 비트의 집합을 의미하는 것으로 바이트와 같은 단위라고 봐도 무방하다.

즉, IPv4 에서의 주소는 4바이트로 표현할 수 있고 따라서 최대 개수는 2^32 = 4,294,967,296 이다.

이는 약 43억 개이므로 충분하다고 생각할 수 있지만 사실 IP 주소는 그렇게 여유롭지 않다.

그래서 IP 주소의 절약을 위해 NAT 시스템을 도입하였다.


[NAT 개념도]


 NAT는 하나의 공인 IP를 여러개의 사설 IP로 변환하는 시스템이다.

랜카드를 두 개 이상 가진 공유기(라우터)가 사설망과 외부망의 사이에서 중개자 역할을 하는 것이다.

주변에서 많이 쓰는 공유기가 바로 대표적인 NAT 시스템이다.



NAT의 장점


NAT를 사용하는 이유는 크게 두 가지가 있다.


  1. IP 주소 절약


위에서 언급했다시피 IPv4는 최대 43억개 까지밖에 사용할 수 없다.

하지만 사설망을 사용하게 되면 그 활용도가 훨씬 늘어남을 알 수 있다.


[NAT 사용 시 공인IP 주소를 효율적으로 사용할 수 있다]


 한 공인IP당 A클래스 사설망의 경우 16,777,216개, B클래스 사설망의 경우 1,048,576개, C클래스 사설망의 경우 65,536개의 내부 주소 사용이 가능하다. 물론 네트워크 주소와 브로드캐스트 주소를 빼고 서브넷 마스크까지 계산한다면 훨씬 적어지겠지만 원래라면 한 IP만이 사용 가능한 주소를 저렇게 많은 수의 기기가 연결하여 사용 가능하다는 점은 분명히 큰 이점이다.


  2. 보안


[NAT를 사용하면 외부에서 접근이 불가능해져 보안이 강하다]


 밑에서 설명할 내용이지만 사설망은 특별한 설정을 해 주지 않는 이상 외부망에서 사설망 내부 PC로의 접근이 불가능한 구조로 되어 있다. 따라서 네트워크를 통한 공격에 매우 안전해진다.


  3. IP 주소 관리의 편의성


 이건 개인적으로 생각하고 있던 것이지만 서술해두겠다. IP 주소는 통신을 위한 것이므로 충돌이 일어나서는 안된다. 다시 말해, 한 IP 주소는 무조건 한 PC만이 사용해야 한다. 하지만 43억 개나 되는 IP 주소를 개개인의 PC나 휴대폰 등에 전부 등록하는 것은 당연하게도 무리이다. 사설망을 사용하게 되면 공유기가 자신에게 접속하는 기기의 IP만 관리하면 되므로 훨씬 간편하게 IP를 관리하는 것이 가능하다. 실제로 지금 대부분의 공유기는 DHCP를 이용해 사설IP를 동적으로 할당한다.



NAT의 통신 원리


 사설망에서 외부망으로 통신을 시도하면 해당 패킷은 무조건 공유기를 거치게 되어 있다. 여기서는 의미상 게이트웨이라고 하겠다. 당연하게도 처음 발신자가 게이트웨이에게 패킷을 전달했을 때 '보내는 사람의 IP'를 나타내는 SRC_IP는 사설망 내부의 발신자 주소로 채워져 있다. 하지만 만약에 이것이 그대로 전달될 경우, 수신자가 응답하는 상대의 주소는 사설망 내부의 IP가 되므로 전 세계의 수많은 사설망중 어디로 보내야 할지 알 수가 없게 된다.이런 이유 때문에 외부에서 사설망으로의 접근이 불가능하여 NAT가 보안이 뛰어나다는 장점도 있다.


[사설망의 통신 과정. Gateway->PC1은 어떻게 할까?]


 그래서 통신을 위해 게이트웨이는 패킷을 받아서 패킷 안의 IP주소를 자신의 공인IP로 임의수정하여 목적지로 발신한다.

패킷을 받은 수신자는 목적지 IP 주소에 게이트웨이가 집어넣은 공인IP를 넣어서 패킷을 발신할 것이고, 해당 패킷은 게이트웨이에게 도달하게 될 것이다. 이전에 이렇게 거기까지 공부한 이후 어떻게 다시 사설망의 특정 사용자에게 도달이 가능했는지 궁금했었다.


[NAT가 패킷을 전달하는 과정]


 게이트웨이가 발신자의 IP를 수정하여 발신할 때 게이트웨이는 내부에 갖고 있는 테이블에 이를 기록해 둔다. 어떤 주소에서 어떤 주소로, 무슨 프로토콜을 사용하여 발신했는지를 기록한 후, 응답 패킷이 되돌아오면 그 값을 찾아서 해당하는 사설망 기기에게 발신하는 것이다. 이렇게 테이블을 만들어서 저장해놓고 찾아가는 방법으로 이 문제를 해결할 수는 있지만 문제가 한 가지 더 생길 수 있다. 이는 다음에 설명할 NAPT에서 해결된다.



NAPT란 무엇인가


[NAT의 통신 문제. 만약 두 기기가 동시에 접속을 요청한다면?]


 NAT의 통신 방식은 큰 문제가 하나 있다. 바로 여러 개의 사설망 내의 기기가 동시에 같은 외부망 주소로 접속을 요청하는 경우이다. 원래라면 요청한 곳의 주소와 포트를 보고 해당하는 사설망 주소를 찾아서 보내주어야 하는데, 해당하는 주소가 여러 개일 경우 중복되므로 이를 처리할 방법이 없는 것이다.


이를 해결하기 위해 만들어진 것이 NAPT이다.

[NAPT의 통신 과정. 발신자 포트번호까지 사용하므로 문제 없이 통신할 수 있다]


 NAPT는 Network Address Port Translation의 약자로, NAT에서는 발신자의 사설망-외부망 IP를 바꿔서 보내주는 역할만을 수행했다면 이제는 포트까지 바꿔서 보내는 역할을 한다. 이러면서 NAPT의 테이블은 NAT의 테이블에서 Port에 해당하는 컬럼이 추가된다. 이렇게 변경한 결과 게이트웨이는 발신자의 포트 번호를 보고도 구별할 수 있게 되었다. 만약 발신자의 포트 번호까지 같게 패킷이 보내지면 어떻게 되느냐고도 할 수 있는데, 그럴 경우에는 위 그림처럼 Private Port를 임의의 SRC 포트로 바꿔서 보내면 되므로 아무런 문제가 없다.


'Knowledge' 카테고리의 다른 글

리눅스 커널 공부 정리 0x01  (0) 2017.06.20
Memory Segmentation  (0) 2016.12.27
NAT와 NAPT의 개념과 원리  (10) 2016.12.01
멀티 태스킹(Multi-Tasking)의 원리  (0) 2016.11.21
PCB (Process Control Block)  (0) 2016.11.14
[Assembly] Intel x86, Local JMP [0xE9]  (0) 2016.11.07
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

댓글을 달아 주세요

  • 김춘돌 2017.07.03 15:40  댓글주소  수정/삭제  댓글쓰기

    이해가 잘 되네요!

    잘보구 갑니다~~~

    감사합니다~~

  • Asd 2017.08.10 23:20  댓글주소  수정/삭제  댓글쓰기

    그렇다면 랜상에서 192.168.0.2와 192.168.0.3 컴퓨터가 동시에 넥슨 서버에 접속 했을 때 접속이 되는 이유는 저희 집 공유기가 별도의 설정 없이 napt를 해주었기 때문인가요? 아님 다른 이유인가요??

    • __미니__ 2017.08.12 11:46 신고  댓글주소  수정/삭제

      말씀하신 이유가 맞을 거라고 생각합니다.
      넥슨 서버가 항상 동일한 IP에 동일한 Port를 사용한다고 가정했을 때, 동일한 사설망 내의 여러 대의 컴퓨터가 NAT의 환경에서 넥슨 서버에 동시에 접속하는 것은 불가능합니다.

  • 2018.12.23 23:43  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 조성민 2019.03.10 20:54  댓글주소  수정/삭제  댓글쓰기

    안녕하세요^^ 제가 궁금한 부분을 알고 작성하신것처럼 포스팅해주셨어요 ㅎㅎ 감사합니다!!
    예시의 경우는 사설망과 서버(비사설) 간의 통신이고 만약 서버중계없이 사설망과 사설망 간의 통신을 할 때는 포트포워딩이 필요하다 라고 이해를 했는데 맞을까요???

    • __미니__ 2019.03.11 08:46 신고  댓글주소  수정/삭제

      안녕하세요~
      그렇게 이해하셔도 틀리지는 않지만 정확히는 '접근하려는 주소가 다른 사설망 내부에 있느냐 아니냐'에 따라 다릅니다.

      A라는 사설망에서 B라는 다른 사설망 내부에 있는 서버에 접근하려고 한다면 당연히 포트포워딩이 필요하구요, 공인 IP를 가진 서버(비사설)에서 다른 사설망 내부에 있는 서버에 접근하려고 해도 마찬가지로 포트포워딩이 필요합니다.

  • 익명 2020.11.05 20:25  댓글주소  수정/삭제  댓글쓰기

    포트 번호를 통해 서버가 사설망 내의 컴퓨터와 1:1로 통신할 수 있음에도 보안성이 좋다고 하는 것은
    SRC 포트를 게이트웨이가 그때그때 얼마든지 임의로 설정할 수 있기 때문인가요?

    • __미니__ 2020.11.06 11:08 신고  댓글주소  수정/삭제

      보안성이 좋다고 하는 이유는 사설망 외부에서 사설망 내부의 임의의 서버나 포트로 접근이 불가능하기 때문입니다. 본문에도 작성해 두었지만, 포트 포워딩이나 DMZ 설정 등을 따로 하지 않는 이상 사설망에서 외부망으로의 접속은 가능하지만 외부망에서 먼저 사설망 내부로의 접속 시도가 불가능해집니다.

  • 익명 2021.03.24 16:18  댓글주소  수정/삭제  댓글쓰기

    좋은글 감사합니다. 정리를 정말 잘하시네요~!