[Network] IP에 대해서 알아보자/IPv4와 IPv6
IP에 대하여
IP는 인터넷 프로토콜의 약자로 OSI계층 중 네트워크 계층에서 사용하는 개념이다. IP는 컴퓨터 및 기기가 인터넷과 연결되어 서로 통신할 수 있도록 하는 주소 체계이다. 개발자의 관점에서 보자면 IP는 특정 HOST에 대한 식별자 역할을 하게 된다.
IP의 특징을 정리하자면 아래와 같다.
- HOST에 대한 식별자 역할을 한다.
- 유니크한 32비트 숫자(IPv4)이다.
- 우리가 보는 IP번호는 이를 쉽게 읽기 위해 8비트씩 끊어서 10진수로 바꾸어 놓은 것이다. 즉 총 4자리이며 한 자리에는 최대 255의 숫자가 올 수 있다.
- 호스트의 네트워크 인터페이스(NIC)를 나타내는 유니크한 번호이다. 따라서 네트워크 인터페이스 카드를 여러개 설치하면, 설치한 대 수만큼 IP번호를 할당받는다.(라우터가 이 복수의 NIC를 사용하는 대표적인 예시)
IP번호 읽기
가장 대중적으로 사용하는 IPv4에 대해서 다룬다.
- IP를 두 부분으로 잘랐을 떄, 앞부분을 Network ID라고 부르고 뒷 부분을 Host ID라고 부른다.
- IP = Net Id + Host Id
- 예를 들어 네트워크 아이디가 24비트라면, 호스트 아이디는 8비트(32-24)를 가진다.
- 이 네트워크 아이디의 길이를 나타내는 것이 서브넷 마스크(넷마스크)이다. 네트워크 아이디와 서브넷 마스크를 AND로 비트연산한 결과가 네트워크 아이디가 된다.
- 같은 네트워크를 사용하는 호스트는 같은 네트워크 아이디를 공유한다.
- 네트워크 아이디의 경우 각 네트워크마다 고유하게 할당되며, 호스트 아이디의 경우 해당 네트워크 내에서 개별 호스트를 식별하는데 사용된다.
즉, 서브넷 마스크를 이용하면 네트워크 아이디와 호스트 아이디를 구분지을 수 있게 된다.
IP 구분하기
192.168.0.6라는 IP가 있다고 한다. 이를 이진수로 변화하면 아래와 같다.
이진수 변환 결과
11000000(192)
10101000(168)
00000000(0)
00000110(6)
이때, 서브넷 마스크는 아래의 형태라고 하자.
255.255.255.0
이를 이진수로 변환하면 아래와 같다.
이진수 변환
11111111(255)
11111111(255)
11111111(255)
00000000(0)
이제 앞에서 부터 각 자리를 AND로 비트연산 하자.
각 자리를 AND 비트 연산한 결과
11000000 10101000 00000000 00000000
이를 십진수로 변환하면
192.168.0.0
즉, 192. 168.0.0이 네트워크 아이디이다. 그리고 나머지 부분이 호스트 아이디가 된다.
다른 말로 255.255.255.0에서 255(2^8)이 3개 이므로 24bit가 네트워크 아이디가 된다.
CIDR표기
이를 CIDR 표기로
192.168.0.6/24로도 표기한다.
192.168.0.6은 네트워크 아이디 + 호스트 아이디이며 24는 네트워크 아이디의 비트수를 의미한다.
IPv4와 IPv6 그리고 NAT
IPv4는 IP버전 4를, IPv6는 IP버전 6을 나타낸다. 어째선지 버전 5는 없다.
IPv6는 1996년에 IPv4의 할당 가능 량(2^32)이 초과될 것을 염려해 도입되었다. IPv6는 2^128(128비트)의 숫자 체계를 사용한다. 하지만 현재는 대다수가 IPv4를 사용하고있다. 이는 NAT을 이용하여 IP를 재활용 하기 때문에 가능하다. 즉, 약 43억(2^32)은 이미 고갈되었으나, Network Address Translation(NAT)을 사용하여 IPv4를 사용한다.
NAT(Network Address Translation)
NAT은 "Network Address Translation"의 약자로, 네트워크에서 IP 주소 변환을 수행하는 기술이다. NAT는 주로 라우터에서 사용되며, 여러 컴퓨터 또는 장치가 하나의 공개 IP 주소를 공유하고자 할 때 사용하게 된다. 내부적으로는 각 호스트들이 유니크한 IP를 사용하여 통신하지만, 외부와 통신할 때에는 NAT를 이용해 각 IP가 변환되어 하나로 묶여 외부와 통신하게 된다. 이 방식을 이용해 IPv4의 부족을 해결하게 되었다.
즉, NAT는 사설 네트워크에 속한 여러 대의 호스트가 하나의 공인 IP주소를 이용해 인터넷에 접속하기 위해 사용한다.
이 기술은 아래의 단점을 가진다.
- 네트워크 계층에 속한 라우터는 헤더를 보고 전달하는 작업만 해야한다. 그러나 이 방식의 경우 들어온 패킷들의 소스 주소와 데이터의 포트 번호를 바꾸게 된다. 소스 주소를 바꾸는 것도 문제이나, 데이터를 바꾼다는 것은 OSI 네트워크 계층이 아닌 전송 계층의 TCP 세그먼트 데이터를 바꾼다는 의미가 된다.
- IP주소는 호스트 인터페이스를 찾아갈 때 쓰이는 것, 호스트 넘버는 해당 호스트 내부에서 프로세스를 찾아갈 때 쓰이는 것이다. 그런데 이 방식의 경우 들어온 패킷의 호스트 번호가 호스트를 특정할 때 쓰이게 된다. 따라서 NAT를 사용한 내부에서는 서버 운용이 불가능하다.
- 이러한 변환 방식을 사용하기 때문에 네트워크 성능에 영향을 끼치게 된다.
Reference