네트워크 통신을 할 때 3계층에서 필요한 IP 주소에 대해 알아보려고 한다.
3계층에서는 3계층 장비인 라우터가 이해하는 논리 주소인 IP 주소를 사용한다.
3계층 주소의 특징
주로 IP 주소는 32비트인 IPv4 주소를 사용한다. IPv4, IPv6 두 체계가 사용되고 있다. 여기서는 IPv4에 대해서 다뤄보려고 한다. IPv4는 8비트 단위를 하나의 옥텟이라고 부른다. 각 옥텟은 .점으로 구분하며 10진수로 표기한다. 하나의 옥텟은 8비트이기 때문에 00000000 ~ 11111111 → 0 ~ 255 까지 사용할 수 있다.
IP 주소는 네트워크 주소와 호스트 주소 두 부분으로 나뉜다.
Classful IP
IP 주소는 네트워크 주소와 호스트 주소를 나누는 구분자가 이동할 수 있어서 네트워크의 크기가 달라질 수 있다. 네트워크의 크기에 따라 필요한 호스트 IP 개수를 할당 할 수 있는 클래스(class) 개념을 도입했다. 크게 A, B, C 클래스로 나뉘고 규모에 따라 나뉘게 된다.
A 클래스는 1개의 옥텟이 네트워크 주소를 나타내고 3개의 옥텟이 호스트 주소를 나타낸다. 첫 번째 .이 나누는 구분자가 된다. 그렇게 255.0.0.0 ~ 255.255.255.255 까지 정해진 네트워크 주소에 호스트 주소 16,777,216개의 주소를 가질 수 있게 된다.
B 클래스는 2개의 옥텟이 네트워크 주소를 나타내고 2개의 옥텟이 호스트 주소를 나타낸다. 두 번째 .이 나누는 구분자가 된다. 그렇게 255.255.0.0 ~ 255.255.255.255 까지 정해진 네트워크 주소에 호스트 주소 65,536개의 주소를 가질 수 있게 된다.
C 클래스는 3개의 옥텟이 네트워크 주소를 나타내고 1개의 옥텟이 호스트 주소를 나타낸다. 세 번째 .이 나누는 구분자가 된다. 그렇게 255.255.255.0 ~ 255.255.255.255 까지 정해진 네트워크 주소에 호스트 주소 256개의 주소를 가질 수 있게 된다.
IPv4의 한계로 IPv6 등장
IPv4의 가장 큰 문제는 기하급수적으로 늘어나는 IP 주소 요구였다. 43억개 중 5억개 정도는 예약되어 있는 IP이기 때문에 37억개 정도를 나눠 사용해야 하는데 이는 턱없이 부족했다. 이를 해결하기 위한 방안이
이 세가지였다.
CIDR 참고 링크
Classful IP의 한계로 Classless IP 등장
Classful의 단점중 하나는 각 클래스에서 모든 IP를 다 사용하지 않아서 낭비되는 IP가 많았다. 네트워크 주소에 사용하지 않는 호스트를 다른 곳에서 사용할 수 없었기 때문에 옥텟 단위의 3단계로 나누는 클래스로는 개선이 어려웠다. 그렇게 class 개념을 버리고 현재 사용하고 있는 classless 주소체계를 사용하게 되었다.
classless는 classful처럼 옥텟만으로 네트워크 주소와 호스트 주소를 나눌 수 없다. 낭비를 줄이기 위해서 비트 단위로 쪼개 사용하는 방법이기 때문이다. 네트워크 주소와 호스트 주소를 나누는 구분자로 서브넷 마스크를 사용하였다.
클래스리스 기반의 IP 네트워크에서는 네트워크를 표현할 때 서브넷 마스크가 반드시 있어야 한다.
서브넷 마스크를 이용하여 네크워크 주소를 구할 때는 0과 1의 And 연산을 이용하여 구한다.
호스트 주소의 각 옥텟을 8비트로 나타낸 주소와 서브넷 마스크를 8비트로 나타낸 주소 각각의 비트를 & 연산을 통해 네트워크 주소를 알 수 있다.
서브넷 마스크 표현 방법
1로 나타낸 부분의 비트 수를 표시하여 나타낸다.
이전의 A 클래스를 비트 단위로 표현하면 /8
로 표현하고
B 클래스는 /16
로 표현하고
C 크래스는 /24
로 표현할 수 있다.
A 클래스 → 11111111.00000000.00000000.00000000
B 클래스 → 11111111.11111111.00000000.00000000
C 클래스 → 11111111.11111111.11111111.00000000
클래스의 기준을 무시하고 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것을 서브네팅이라고 한다. 부여된 주소를 다시 분할 하는 방법이다. 서브네팅으로 서브넷을 나누어 사용할 수 있다.
네트워크 사용자의 서브네팅
IP 와 서브넷 마스크 각각의 옥텟을 2진수 주소 변환한다.
2진수로 바꾼 IP와 서브넷 마스크를 &&로 연산한다. 연산한 결과는 네트워크 주소가 된다.(3번)
네트워크 주소에 서브넷 마스크의 0 부분과 같은 위치를 1로 바꾸면 브로드 캐스트 주소가 된다.(4번)
네트워크 주소의 마지막 숫자에 1을 더한 주소가 이용할 수 있는 첫번째 주소가 된다.(5번)
브로드 캐스트 마지막 숫자에 1을 뺀 주소가 이용할 수 있는 마지막 주소가 된다.(6번)
각각의 구해진 주소를 10진수로 변환하면 우리가 사용하는 IP 주소가 된다.(7번)
1번 서브넷 마스크를 2진수로 변환한다.
2번 서브넷 마스크의 0부분만을 가져온다.
3번 0부분이 몇을 표현할 수 있는지 수를 구한다.
4번 각 자리마다 0부터 구해진 수만큼 그룹을 나눈다.
5번 IP 주소가 이 그룹중에 어디에 속해있는지 찾는다.
6번 그룹의 가장 앞에 있는 주소가 네트워크 주소가 된다.
7번 네트워크 주소에서 1을 더한 값이 사용할 수 있는 첫번째 주소가 된다.
8번 그룹의 가장 뒤에 있는 주소가 브로드 캐스트 주소가 된다.
9번 브로드 캐스트 주소에서 1을 뺀 값이 사용할 수 있는 마지막 주소가 된다.