네트워크를 공부하려면 필수적으로 거쳐야 하는 것이 바로 사설망이다.
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 |
멀티 태스킹(Multi-Tasking)의 원리 (0) | 2016.11.21 |
PCB (Process Control Block) (0) | 2016.11.14 |
[Assembly] Intel x86, Local JMP [0xE9] (0) | 2016.11.07 |