1. NAT(Network Address Translation)
NAT은 네트워크에서 내부망과 외부망을 나누어주는 기술입니다.
(1) NAT의 도입 배경
IP가 네트워크에서 주소를 찾아가게 해주는데, NAT은 또 왜 필요한 것일까 의문을 가져볼 수 있습니다.
IPv4는 32비트입니다. 이것은 2^32개의 hosts를 지정할 수 있다는 의미입니다. 약 40억개의 IP 주소를 사용할 수 있습니다.
하지만 현대 시대의 네트워크 규모가 커지면서 host의 개수가 IP 주소를 초과합니다. 충분한 수의 IP 주소가 없기 때문에, 기기마다 IP 주소를 부여할 수 없는 상황입니다.
그래서 1996년, IPv6 라는 새로운 버전의 주소체계가 나왔습니다. 이 방식은 2^128개의 host를 지정할 수 있습니다. 하지만 IPv6가 나와도 그에 맞게 모든 router를 교체하는 것이 말처럼 쉽지가 않습니다. 지금껏 IPv4를 사용해왔기 때문에 이미 구성된 인프라를 최대한 활용하기 위해 여전히 IPv4를 사용하는 중인 것입니다. 따라서 부족한 IP 주소를 NAT 방식을 이용해 보완하게 됩니다.
(2) NAT이란?
그래서 NAT은 하나의 공인 IP주소를 사용해 여러 대의 호스트가 네트워크에 접속할 수 있도록 하는 방식입니다. NAT 내부에서는 사설 IP로 통신을 하다가 인터넷에 접속하기 위해서 공인 IP로 변경할 수 있게 해주고, 이를 통해 공인 IP 주소를 나눠써 절약합니다.
쉬운 예시로, 공유기를 떠올릴 수 있습니다. 집에 인터넷 회선을 개통하여 인터넷 공유기로 여러 PC를 연결해 사용하는 방식은 인터넷 공유기에 NAT 기능이 탑재되어 있어 가능한 것입니다.
위의 그림처럼, 공인 IP Address는 안에 또 다른 IP로 10.0.0.4의 사설 IP Address를 가집니다.
이 사설 주소는 해당 네트워크에서만 의미가 있습니다. 사설 주소가 그대로 라우터 외부로 나가게 된다면 수신 측은 알 수 없는 사설망의 IP주소이므로 패킷을 어디로 보내줘야할지 알 수가 없습니다.
따라서 패킷을 외부로 보낼 때 기존 IP주소가 아닌 Router의 IP주소와 Router의 PORT번호까지 바꾸어줍니다. 나갈 때 WAN/LAN 주소를 NAT translation table에 기록하고, 들어올 때 table을 보고 다시 매칭하는 작업을 수행합니다.
이때, PORT번호도 바꾸는 이유는 내부에서는 IP주소가 고유하지만, Port번호는 고유하지 않을 수 있기 때문입니다. 해당 네트워크의 호스트들이 같은 목적지와 통신하고자 할 때, 되돌아오는 패킷의 최종 목적지가 어디가 되어야하는지 모르는 혼선이 생길 수 있습니다. 이러한 혼선을 해결하기 위해 별도의 추가 포트 번호를 설정하여 패킷을 구분하는 방식인 PAT(또는 NPAT)을 사용하게 됩니다.
그래서 이 사설 IP Address는 다른 네트워크 에서는 공인 IP 주소인 138.76.29.7로 인식하게 됩니다. 즉 밖의 다른 네트워크는 내부의 장비들을 하나의 IP를 가지는 하나의 장비로 보게 됩니다.
(3) NAT 동작 순서
NAT의 동작 순서를 정리하자면 아래와 같습니다. 그림의 사설 IP에서 네이버에 접속하는 것을 가정해보겠습니다.
1. 사설 IP Address 10.0.0.4는 임의의 port number(90)과 함께 LAN에 Datagram을 전송
2. router는 Datagram을 받아 NAT translation table에 요청한 사설 IP와 port number을 저장
3. router는 Datagram에 대해 새롭게 출발지 port number(110)을 생성하고, 사설 IP를 공인 IP로 변경
4. 네이버가 요청을 받고 공인 IP Address인 138.76.29.7 에게 응답
5. router는 데이터가 오면 NAT translation table에 저장된 HOST 10.0.0.4(사설 IP 주소) , port number 90에게 데이터를 전송
위 NAT 동작 과정에서 패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 Checksum도 다시 계산되어 재기록해야만 합니다. 이는 필연적으로 네트워크의 성능에 영향을 미치게 됩니다.
4. NAT 문제점
NAT 방식을 이용하는 것에는 문제점도 있습니다.
우선 NAT방식을 이용하면 NAT테이블을 통해 기록된 내용이 있을 때만 직접 통신이 가능하다는 것입니다.
패킷의 요청이 내부에서 외부로 나갔다가 들어오는 것은 가능하지만, 외부에서 요청 패킷이 직접 사설 네트워크 대역으로 들어오는 것은 불가능합니다. 즉, Server의 역할을 하기가 힘듭니다. 기존의 PORT번호는 HOST 내부의 Processing을 찾는 데에 사용해야 하는데 NAT 방식은 Host를 찾는 용도로 사용하기 때문입니다.
그리고 두번째는, 계층화의 핵심이 무너진다는 것입니다. 계층으로 나뉘어진 네트워크 구조에서, 다른 Layer의 정보를 열람해보고 심지어 수정을 가하기도 합니다.
예를 들어, 네트워크 계층에서 packet 내부의 segment 내부의 header의 port 번호를 열람합니다. port 번호는 전달 계층에서 애플리케이션 계층으로 올라갈 때 socket을 구분하는 용도인데, IP를 구분하는 용도로 변질되는 것입니다. 그리고 네트워크 계층에서 packet header의 IP주소를 수정하는 문제도 있습니다.
하지만 NAT는 보안적 측면에서도 장점이 있습니다. NAT는 거의 대부분 방화벽에서 설정을 해주는데, 방화벽을 지나면서 한 번 트래픽을 거르고, IP를 숨겨줄 수도 있기 때문입니다.
참고자료
[컴퓨터 네트워크 - 한양대학교 이석복 교수님]
http://www.kocw.net/home/cview.do?cid=6166c077e545b736
https://the-square-of-y.tistory.com/217
https://blog.naver.com/ds4ouj/222308168562
Computer Networking _ A Top Down Approach, 7th
'CS > Network' 카테고리의 다른 글
[네트워크] IP 단편화&재조립, ICMP (0) | 2024.02.23 |
---|---|
[네트워크] DHCP (0) | 2024.02.21 |
[네트워크] 네트워크 계층 : Internet Protocol(IP) (0) | 2024.02.19 |
[네트워크] TCP Congestion Control (0) | 2024.02.17 |
[네트워크] TCP의 Flow control, 3 / 4 - Way Handshake (0) | 2024.02.16 |