OSI 7계층 중 3계층인 네트워크에서 사용하는 논리 주소
우리가 흔히 아는 주소는 IPv4 라는 8비트 단위를 '.' 으로 나눈 4개의 주소 표시 방식이다.
2계층에서는 16진수로 표현하는 것과 달리 IP는 10진수로 각 단위를 표현한다. (0~255)
주소에 레벨이 있어서 네트워크 주소와 호스트 주소로 나뉜다.
네트워크 주소 : 호스트들을 모든 네트워크를 지칭하는 주소, 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 한다.
호스트 주소 : 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소
MAC 주소는 24비트 씩 절반씩 나뉘지만, IP 주소의 경우 이 둘을 구분하는 경계점이 고정되어 있지 않다
네트워크 IP 주소 체계는 필요한 호스트 IP 개수에 따라 네트워크 크기를 다르게 할당할 수 잇는 클래스 개념을 도입했다.
A클래스는 네트워크 주소를 1개의 옥텟, 호스트 주소를 나타낼 수 있는 3개의 옥텟
B클래스는 네트워크 주소를 2개의 옥텟, 호스트 주소를 나타낼 수 있는 2개의 옥텟
C클래스는 네트워크 주소를 3개의 옥텟, 호스트 주소를 나타낼 수 있느 1개의 옥텟
D클래스는 멀티캐스트, E클래스는 미래를 위해 예약한 것이다.
이 주소 체계는 처음 만들었을 당시에는 확장성이 있고, 낭비가 적은 최적의 조건이었으나 인터넷이 상용화되면서 연결되는 호스트 숫자가 폭발적으로 증가했기때문에 IP 주소 요구를 감당하기에는 너무나 부족했다. 또한 클래스 단위로 할당 시 IP가 낭비되는 문제도 있었다.
이러한 IP 주소 부족과 낭비문제를 해결하기 위해 다른 전략들이 생겨났는데
단기 대책으로는 클래스리스, CIDR(Classless Inter-Domain Routing) 기반의 주소 체계
중기 대책으로는 NAT, 사설 IP 주소
장기 대책으로는 IPv6
이 생겨났다.
현재 우리가 사용하는 주소 체계는 클래스리스 기반의 주소 체계이다.
클래스리스 혹은 CIDR 네트워크에서는 별도로 네트워크와 호스트 주소를 나누는 구분자를 사용해야 하는데 이 구분자를 서브넷 마스크 (Subnet Mask) 라고 부른다.
서브넷 마스크는 IP 주소와 네트워크 주소를 구분 할 때 사용하는데 2진수 숫자 1은 네트워크 주소, 0은 호스트 주소로 표시한다.
10진수를 사용해서 255.0.0.0, 255.255.0.0 과 같이 표현하는데 2진수 11111111을 10진수로 표현하면 255가 되어 255는 네트워크 주소 부분, 0은 호스트 주소 부분으로 구분된다.
IP주소도 2진수로 변환한 후, and 연산을 하게되면 IP주소에서 네트워크 주소만 뽑아낼 수 있다.
클래스리스 기반의 IP 네트워크에서는 네트워크를 표현하는 데 반드시 서브넷 마스크가 필요하고 서버나 PC에 IP 주소를 부여할 때도 사용되어야 한다.
이 서브넷 마스크를 표현하는 방법으로는 10진수로 표현하는 방법과 비트단위로 표현하는 방법이 있는데 비트 단위로 표현하는 방법은 서브넷 마스크에서 1 부분이 연속된 자릿수를 표현해주는 것이다.
이렇게 원래의 클래스 기준을 무시하고, 원래 정해진 네트워크보다 더 쪼개 사용하는 것을 서브네팅 이라고 한다.
IP주소 : 103.9.32.146
서브넷마스크 : 255.255.255.192 (11111111 11111111 11111111 11000000)
(이중 뒤의 0인 6비트는 호스트 IP 주소 개수이다. 2의 6승은 64개)
라고 하고 2진수로 바꾼후 and 연산하면 네트워크 주소를 구할 수 있다.
0부터 255까지 64로 나누면 0~63, 64~127, 128~191, 192~255로 나뉜다.
이때, 첫 주소는 네트워크 주소, 마지막 주소는 브로드캐스트 주소가 된다.
네트워크 주소 : 103.9.32.128
브로드캐스트 주소 : 103.9.32.191
유효 IP범위는 103.9.32.129 ~ 103.9.32.190
이된다.
참조한 책 및 사이트
IT 엔지니어를 위한 네트워크 입문