NAT (Network Address Translation)

NAT 를 사용함으로 인해서 IPv4 의 부족 문제를 해결하고 있다. 같은 네트워크 안에 있는 사용자들은 고유의 네트워크 주소를 부여받지만 내부에서만 유효하지 외부에서는 유효하지 못하다. 다른 네트워크에서도 그 주소를 동일하게 사용하고 있기 때문이다. 리턴 패킷은 NAT 라우터 게이트웨이를 통해서 변환되고 다시 패킷을 반환받는다. 호스트가 외부로 보내는 source 와 destination 을 확인하고 이후에 라우터 게이트웨이를 거쳐서 IP 와 PORT 번호가 변환되어 외부로 나간다.


NAT를 사용하게 되면 인터넷 디자인 상의 문제점과 현실적인 문제에 부딪힌다. 라우터는 헤더를 보고 포워딩해주지만, IP패킷의 소스 부분과 데이터부분을 확인해서 데이터 내부의 내용을 고쳐버린다. 이 문제는 Layer Violation 이라고 불리운다. 라우터는 네트워크 레이어 계층까지만 존재하지만 그 상부의 계층의 레이어 기능까지 이용하는 것이다.


또 하나 더,  NAT 환경에서 서버를 사용할 수 없는지. 

NAT 라우터를 통해서 아이피와 포트번호가 변경되어 요청하고 이후에 응답받는 경우에 문제가 발생한다. 일반적으로 IP 를 통해 인터페이스, 즉 호스트를 식별하고 포트번호를 통해서 해당 호스트의 프로세스를 확인하지만 NAT 같은 경우는 IP를 통해서 라우터를 찾고 포트번호를 통해서 호스트를 찾기 때문이다. 어떻게 프로세스를 찾을 것인가? 그럼 해당 서버의 특정 포트에 매핑되어있는 프로세스는 어떻게 운용될 것인가에 대한 문제가 생기는 것이다.


+) 추가 : 왜 NAT 환경에서 서버를 사용할 수 없는지2

[ 2018 04 26 ]

해당 글을 쓰기 위해서 여기를 참고했다.

외부에서 사설 네트워크 망의 서버를 접속하기 위한 경우, 외부의 클라이언트가 공인 IP가 접속을 요구할 것인데 이 과정에서 N개의 사설 IP 중 어떤 IP로 변환해야 할 지 알 수 없는 문제가 발생한다. 외부에서 접속해야 하는 내부 사설 서버에 대해서는 주소변환 설정을 따로 해주어야 하는데, 이때 설정해야 하는 주소 변환이 REVERSE NAT 로 1:1 Mapping, Static Mapping 이라고 한다. 자세한 내용은 링크에서 확인하자.


IPv4 가 디자인된 건 70년대이며, 현재 반세기가 흘렀지만 여전히 사용되고 있다. IPv4의 문제는 두가지가 있는데 address space 와 security 가 있다. 그리고 이러한 해결에 대해서 나온게 IPv6이다. 하지만 IPv6 또한 출현한 지 20년이 되었다. 여기서 그때그때 동적으로 변화하는 IP프로토콜을 사용하자 라는 이야기가 나오고 있는 상황. 전 세계 존재하는 모든 라우터가 한 번에 변화가 되어야하기 때문에 어렵다. 생태계적인 문제.


IP

Subnet mask

Router

DNS

위의 내용은 인터넷을 사용하기 위해서 알고 있어야 하는 정보이다. IP 는 항상 서브넷과 같이 이용된다. 또한 라우터(기본 게이트웨이)는 특정 호스트에 대한 첫번째 라우터이다. 외부로 패킷을 보내기 위한 첫번째 라우터이다. source & destination 을 외부로 보내야 하는데, 특정 라우터를 거쳐야하기 때문에 그 포워딩 기능을 하는 첫번째 라우터에 대한 정보이다. DNS에 대한 정보는 우리가 웹브라우저를 열어서 네이버를 쳤을때, 네이버의 IP 주소를 물어볼 누군가에 해당하는 Local Name Server 가 DNS이다. 위의 정보는 반드시 알고 있어야 한다. 매우 필수적이면서 기본적인 정보다.


그리고 위에서 인터넷을 사용하기 위한 정보들은 DHCP 라는 프로토콜이 하였다.


DHCP(Dynamic Host Configuration Protocol)

Host Configuration 을 하는 프로토콜이다. 어디를 이동하던지 간에 동적으로 호스트 정보를 생성해주겠다는 의미이다. 고정 IP 를 사용하는 경우 DHCP 는 필요없다. 특정 대학에서 고정 IP를 사용하는 정책을 이용한다고 가정하자. 그럼 입학하는 학생들에게 학번과 고정 IP를 부여할 것이다. 그렇게 되면 학교 네트워크에 있을 경우 고정적으로 사용이 가능하다. 여기서 해당 학교의 캠퍼스 학생이 10000명인 경우 고정 IP의 경우 최소 10000개가 필요하다. 여기서 DHCP 를 사용하게 되면 꼭 IP가 10000개가 필요한 것은 아니다.


IP 주소가 필요하다고 요청받으면 빌려주고 다시 IP를 회수하는 작동방식을 가지고 있다. Address Pool을 통해서 유연하게 IP를 사용할 수 있다.


DHCP 서버로부터 IP 를 얻는 순서

(1) 눈 앞이 깜깜한 상황 (누가 정보를 가지고 있는지 모르는 상태)

(2) DHCP Discover 메세지를 보낸다. 모든 IP 주소가 1인 경우에는 브로드캐스트이며 전체에게 전송한다. 서브넷에 있는 모든 멤버들은 메세지를 받도록 한다. 그리고 해당 DHCP Discover 는 DHCP 서버만 의미있게 받아들인다. 어떤 원리로 무시할 수 있는가? 왜냐하면 destination address 가 모두 255.255.255.255 와 함께 포트번호를 보내며 해당 포트번호를 열어놓은 프로세스만 받고 나머지는 드랍된다. 이후에 DHCP 서버에서 offer 가 오며 클라이언트는 다시 request 를 보내다 ACK 를 받는다. 그리고 offer 에는 IP, DNS, 라우터가 무엇인지 전부 다 들어있다.


라우터는 포워딩만 해야하지만 많은 기능들을 가지고 있다. (DHCP, NAT, DNS, ..., + Firewall) 사용자의 모든 액티비티를 관리하고 있다. 우리가 사용하는 무선 공유기는 DHCP, NAT, DNS 등의 기능을 가지고 있기 때문이다. 예를 들면 KT 에서 IP 주소를 하나 할당받았다고 한다고 하더라도 해당 IP를 통해서 가족이 사용하게 된다면 그 가족은 로컬 넷의 서브넷을 가지게 되며 동시에 앞선 내용들도 가진다.


IP헤더의 필드에서 16-bit identifier 와 flag 그리고 offset

IP패킷을 센더가 생성하였다. 헤더 필드중에 하나가 length 이고 이 크기가 4000Bytes 패킷을 생성하였다. 그리고 전송하였다. 각 링크별로 데이터를 보낼 수 있는 유닛 사이즈가 존재하며 이를 MTU(Maximum Transport Unit)라고 한다. 그리고 해당 MTU 가 특정 크기의 패킷 사이즈보다 작다면, 보내지 못한다. 여기서 드랍시키면 너무 아쉽기 때문에 처리할 수 MTU 보다 더 큰 패킷이 들어오게 되면 분리해서 MTU의 사이즈에 맞는 독립적인 패킷으로 전송하는 것이다. 그리고 다시 합쳐져서 원래 패킷으로 변환된다. 



  • 패킷 사이즈는 4000이다. 

  • ID 는 패킷별로 유일하게 센더가 설정한다. (숫자값)

  • flag 는 해당 패킷이 flagment 되었는지 여부

  • offset 는 flagment 부분이 전체 패킷에서 어느정도 차지 (단편화 되기 이전에 시작점으로부터 차이)

    • 첫번째 단편의 옵셋 값은 0 (첫번째 단편이므로 시작 위치가 0)

    • 두번째 단편부터 이전에 단편화된 길이를 8로 나누어 계산 (첫번째가 800 바이트 였다면 두번째 단편화 offset 의 값은 100이다.)

4000Bytes 짜리 패킷이 MTU 1500 Bytes를 만나게 되면 패킷이 분리되어야 한다. 여기서 헤더의 크기는 20byte 이고 실제로 데이터의 크기는 3980Bytes이다. 패킷은 총 3개로 분리되며 정보를 잘 분할해야 한다. 첫번째 플래그먼트를 보면 length = 1500 이며 ID 는 그대로 유지된다. 이후에 합쳐지기 위해서 그리고 flag 는 1로 세팅한다. 이후에 플래그먼트가 있음을 말해주기 위해서. 그리고 offset 은 자기 패킷이 몇번째인지 확인하기 위함에 0이다. (기존의 데이터 잘려져서 위치한 포인트를 의미) 


+) 추가 : IP Flagmentation 에 대한 이야기

나의 글과 함께 여기를 같이 보면 좋을 듯 하다.

IP 단편화라고 부르기도 한다. 단편화를 이해하기 위해선 앞선 MTU를 알아야 한다. MTU 는 최대 전달 단위로써 프레임의 최대 크기이다. 단편화되는 데이터 그램의 크기는 MTU 보다 작아야하며 MTU 보다 큰 경우에는 전송이 불가하다. 사실 Flagmentation 이란 MTU보다 큰 데이터그램은 전송이 불가능하기 때문에 MTU보다 작은 크기로 만들어주는 과정을 뜻하며 세분화, 즉 세그멘테이션(Segmentation) 이라고 하기도 한다. 그리고 단편화 과정을 거쳐서 수신지(목적지)까지 도착하게 되면 재조립 과정을 거친다.


정리 )

  • NAT 란
  • NAT 의 문제점은 무엇이고 설명하기
  • NAT 환경에서 왜 서버 사용을 지양해야 하는지, 그에 대한 해결 방법
  • IPv4 가 가진 문제점
  • cmd창에서 ipconfig -all 을 치고 난 뒤 나타나는 내용들 (IP , Subnet mask, Router, DNS, DHCP) 에 대해 설명하시오
  • DHCP 란
  • DHCP 동작방식
  • IP 헤더 필드에서 16 Bit identifier 와 flag 그리고 offset 설명


Posted by doubler
,