보통 사용하는 IP주소는 32비트인 IPv4 그리고 Ip주소를 표기는 4개의 옥텟을 "."단위로 구분합니다.
16진수를 사용하는 2계층의 MAC주소와 달리 10진수로 표기하므로 8비트 옥텟은 0 ~ 255의 값을 쓸 수 있습니다.
IP주소는 네트워크 주소와 호스트 주소로 구분이 되며 필요한 호스트의 개수에 따라 네트워크 주소를 다르게 할당할 수 있는 class 개념이 있습니다.
요즘에는 옥텟단위에서 1비트 단위로 구분하는 기술을 사용합니다.
A class - 호스트 약 1600만 개, 첫 번째 옥텟을 네트워크 주소로 사용
(2^8개의 네트워크가 네크워크 당 2^24개의 호스트 주소를 가짐)
B class - 호스트 약 65000개, 두 번째 옥텟까지 네트워크 주소로 사용
(2^16개의 네트워크가 네트워크 당 2^16개의 호스트 주소를 가짐)
C class - 호스트 약 250개, 세 번째 옥텟까지 네트워크 주소로 사용
(2^24개의 네트워크가 네트워크 당 2^8개의 호스트 주소를 가짐)
맨 앞 옥텟의 값을 보고 class를 판별할 수 있습니다
A class
10진수 : 0 ~ 126
2진수 : 0000 0000 ~ 0111 1111
설명 : 127은 루프백 주소로 사용
B class
10진수 : 128 ~ 191
2진수 : 1000 0000 ~ 1011 1111
C class
10진수 : 192 ~ 223
2진수 : 1100 0000 ~ 1101 1111
위에서 사용한 클래스 개념을 사용한 체계를 클래스 풀이라고 부릅니다.
해당 방식은 기하급수적으로 늘어나는 IP주소 요구를 감당하기에는 너무 부족하고
A class를 할당받은 조직에서 이 주소를 제대로 사용하지 못하는 문제도 존재했습니다.
그에 대한 대책이 클래스리스(CIDR, classless Inter-Domain Routing) 방식입니다.
CIDR방식은 옥텟 기준으로 나누지 않고 별도의 구분자를 사용하는데 이를 서브넷 마스크(Subnet Mask)라고 합니다.
NAT, 사설IP 주소, IPv6도 IP주소 부족에 대한 해결방안
네트워크 주소와 IP 주소를 구분할 때 2진수 숫자 1은 네트워크 주소 0은 호스트 주소를 표현합니다.
예를 들어 103.9.32.146 주소에 255.255.255.0 서브넷 마스크를 사용한다면
네트워크 주소는 103.9.32.0
호스트 주소는 0.0.0.146
이 됩니다.
표현 방법
비트 단위로 표현하거나 10진수로 표현합니다.
비트 단위 : 1로 비트 자릿수를 연속적으로 표현
10진수 : 32자리 2진수 제일 뒤에 서브넷 마스크 비트 자릿수를 "/{subnet mask}"에 표현
비트 단위는 말 그대로 11111111.11111111.11...
처럼 표현을 하며
10진수로 표현하는 것은 192.168.101.32/24
로 보여줍니다.
10진수로 표현하는 경우의 예
A class는/8
B class는/16
C classs는/24
원래 부여된 클래스 기준를 무시하고 새로운 네트워크, 호스트 구분자를 정해 더 쪼개는 것을 의미합니다.
네트워크 사용자의 입장
사용자는 자신이 사용할 수 있는 범위가 어디인지를 고려한다.
IP 주소 (사용자의 IP주소)
10진수 : 103.9.32.146
2진수 : 0110 0111. 0000 1001. 0010 0000. 10010010
서브넷
10진수 : 255.255.255.192
2진수 : 1111 1111. 1111 1111. 1111 1111. 1100 0000
네트워크 주소(서브넷 마스크의 1로 채워진 비트가 마스킹하는 IP주소의 값)
10진수 : 103.9.32.128
2진수 : 0110 0111. 0000 1001. 0010 0000. 10010010
브로드 캐스트 주소 (네트워크 주소 비트를 제외한 모든 비트 1로 채움)
10진수 : 103.9.32.191
2진수 : 0110 0111. 0000 1001. 0010 0000. 10111111
첫 번째 주소(네트워크 주소는 사용이 불가)
10진수 : 103.9.32.129
2진수 : 0110 0111. 0000 1001. 0010 0000. 10010011
마지막 주소(브로드 캐스트 주소는 사용이 불가)
10진수 : 103.9.32.190
2진수 : 0110 0111. 0000 1001. 0010 0000. 10111110
자신이 속한 네트워크 범위(2진수는 마지막 옥텟을 표현)
10진수 : 103.9.32.128 ~ 103.9.32.191
2진수 : .10010010 ~ .10111111
네트워크 설계자의 서브네팅
사용자와 반대로 설계자는 서브넷 마스크가 지정되어 주어지는 것이 아니라 네트워크 크기를 고민해 서브넷 마스크를 결정하고 반영해야 한다.
반영 포인트
예시
회사에 총 12곳의 지사가 있으며 이 지사들에는 최대 12대의 IP가 필요하다.(PC, 복합기, IP 카메라..)
현재 가진 네트워크는 103.9.32.0/24
가능하면 사설 IP대역을 사용하는 것이 좋음. 최대한 같은 크기의 네트워크를 할당하고 10진수로 표현해도 쉽게 이해할 수 있는 C클래스 단위인 24비트로 쪼개 할당하는 것이 바람직합니다.(네트워크 관리자, 사용자 모두 구분하기가 쉬워진다.)
네트워크를 잘 설계하면 관리하기 쉽고 네트워크 장비 성능도 향상됩니다.
잘 설계된 네트워크는 라우터가 관리하는 경로가 적고 관리하기가 쉬움
첫 번째 경우
10.1.1.0/24
, 10.1.2.0/24
, 10.1.3.0/24
는 10.1.0.0/16
네트워크에 대한 경로만 가져도 모든 10.1.x.0 네트워크로 패킷을 포워딩할 수 있습니다.
두 번째 경우
만약 1.1.0.0./24
, 1.2.0.0/24
, 1.3.0.0/24
네트워크를 설계했다면
라우터는 존재하는 네트워크 수만큼 모든 경로를 알고 있어야 합니다.
하지만 첫 번째 경우도 사설 IP대역으로 네트워크 설계를 해야 합니다.
예시처럼 3개만 사용하는 경우 나머지 253개의 네트워크를 낭비하게 됩니다.
공인 IP : 인터넷에 연결이 가능하고 전세계에서 유일해야 하는 것
사설 IP : 인터넷에 접속하지 않거나 NAT(Network Address Translation)기술을 사용하는 경우 사설 IP주소(공유기, 회사 방화벽 사용하는 경우)를 사용할 수 있습니다.
이 글은 정말 인상적이었습니다.