Subnetting

주소지정 원칙

IP_주소 지정 법을 알아보자. 네트워크층에서는 논리적 주소를 사용해서 네트워크상의 호스트들을 구별한다고 했는데 통신하고자 하는 호스트가 같은 세그먼트에 있는지 아니면 다른 세그먼트에 있는지 결정하는 것은 네트워크층의 책임이다. 다른 세그먼트에 있다면 적절히 설정된 라우터가 있어야 목적지까지 데이터를 빠르고 안전하게 전달 할 수 있을 것이다.
IP에서 논리적 주소는 32비트 길이인데 각각의 비트는 0 혹은 1로 이뤄진 2진 주소이다. 따라서 각 노드에 대해서 32비트로 주소를 기억한다는 것은 사람으로써는 거의 불가능해서 보통 이 숫자를 10진수로 변환시켜 사용한다.
32비트인 2진수 11001010110011000010100100101001을
10진수로 만든다면 옥텟(octet:8비트 단위)으로 나눠서 4 옥텟마다 점(.)을 찍어서
11001010.11001100.00101111.00101001로 만든 다음,
2^7+2^6+2^3+2^1.2^7+2^6+2^3+2^2.2^5+2^3+2^2+2^1+2^0.2^5+2^3+2^0 해서 각 옥텟을 10진수로 전환하면 202.204.47.41이 되는데 32개의 0과 1보다 기억하기 쉬울 것이다. 하지만 사람에게는 이 숫자도 복잡하므로 DNS 서버를 사용해서 www.naver.com식으로 간단히 기억해서 사용한다.

IP_주소 클래스

모든 IP주소는 두 부분으로 나뉘는데 첫 번째 부분은 네트워크 부분으로 호스트가 어느 네트워크에 위치하고 있는지를 결정해주는 역할을 하며 Net ID로 부른다. 우편번호에서 앞의 세 자리, 즉 지역번호와 같은 의미이다. 그리고 두 번째 부분은 호스트 자신을 가리키며 Host ID라고 하는데 우편번호에서 번지수와 같은 의미이다. 지역번호와 번지수만 알면 우편물을 보낼 수 있듯이 Net ID와 Host ID만 알면 데이터를 어디든지 보낼 수 있다. 이렇게 IP주소(192.168.100.100) 체계는 Net ID(192.168.100.0)와 Host ID(0.0.0.100)로 구분할 수 있기 때문에 ‘계층적 주소체계’(Hierarchical Addressing Scheme)를 이룬다. 주소에 체계가 있으므로 체계적인 관리가 가능하다. 하지만 MAC_주소(00:00:30:A4:56:FE)는 00:00:30:A4:56:FE라는 주소가 어디에 있는지 어떻게 구성되어 있는지 체계를 알 수 없으므로 ‘평면적 주소체계’(Plane Addressing Scheme)라고 하고 주소를 체계적으로 관리할 수 없다.

▪ IP주소는 네트워크 부분과 호스트 부분으로 구별한다고 했는데 네트워크 부분을 구별하기 위해서 5개의 클래스를 정의해 두었다.
a. 192.168.100.32는 전형적인 class C인 IP
주소(네트워크주소+호스트주소)
b. 192.168.100.0은 네트워크주소
c. 0.0.0.32는 호스트 주소
d. 192.168.100.255는 192.168.100.0 네트워크에만 뿌리는 멀티캐스트(다이렉티브 브로드캐스트) 주소
e. 255.255.255.255(모두 1)는 모든 네트워크에 뿌리는 브로드캐스트 주소
f. 0.0.0.0(모두 0)은 모든(Any) 네트워크
주소이다.

▪ 호스트 비트나 네트워크 비트를 이용한 문제를 풀 때에는 ‘2^n-2=호스트수/네트워크수’로 계산하는데 모두 0과 모두 1인 두 가지 경우를 미리 빼는 것이다. 요즘엔 IP_주소가 모자라서 'subnet 0'식으로 첫 번째 네트워크 ID(0 범위)주소의 호스트들도 사용한다고 선언하고 그 네트워크에 딸린 호스트 IP 들을 모두 사용하는 추세이다.

클래스는 다음과 같다.
클래스 Net ID(decimal) Net ID(bit 수) 네트워크 수 Host ID(bit 수) 호스트 수
A 1~126 8 126 24 16,777,214
=>127.0.0.1은 loopback(=localhost) <-(::1)
B 128.0~191.255 16 16,384 16 65,534
C 192.0.0~223.255.255 24 2,097,152 8 254(223)
D 224~239 : Multicast
E 240~253 : Laboratary

▪ IP_주소는 일반적으로 Class A, Class B, Class C, Class D, Class E, 그리고 기타 특수 목적용으로 주소를 나누는데, 많이 사용되는 Class A, B, C를 집중적으로 알아보자.

▪ 클래스별로 사설 IP가 지정되어 있는데 내부 Local LAN에서만 사용되고 외부 WAN(인터넷)에서는 사용되지 못하는 주소로써
① Class A는 10.0.0.0~10.255.255.255.255 이고
② Class B는 172.16.0.0~172.31.255.255 이며
③ Class C는 192.168.0.0~192.168.255.255로써 공적 IP_주소로 지정되지 못한다.

▪ 사설 IP 중에서도 예약되어 있는 ID(Internet Draft) 주소는 내부 Local LAN에서도 사용될 수 없는 주소이다.
④ 0.0.0.0 ~ 0.255.255.255는 제한된 용도로 사용되는 특수한 예약주소이고,
⑤ 192.0.2.0는 TEST-NET이라고 불리는 문서화 및 예제 코드를 위한 예약주소이며,
⑥ 169.254.0.0 ~ 169.254.255.255는 DHCP 서버가 존재하지 않을 경우 운영체제가 자동으로 할당해주는 예약주소이다.
⑦ 127.0.0.1은 loopback 주소로 네트워크 테스트용으로만 사용한다.

=>일반적으로 조직은 IP_주소의
▪ 처음 20%는 서버에게
▪ 그다음 50%는 워크스테이션에게
▪ 그다음 10%는 프린터
▪ 마지막 20%는 라우터나 그 밖의 네트워크 장비에게 할당한다는 암묵적(implicity) 룰이 있다.

서브넷 마스크(Subnet Mask)

서브넷 마스크는 넷 마스크로도 불리는데 동일한 네트워크에서 서로 어떻게 네트워크가 구분되어 있는지 알려준다. 네트워크ID와 호스트_ID를 구별하기 위한 계산을 수행할 때 IP주소와 Subnetmask를 2진수로 ANDing(1,1=>1, 0,1과 0,0, 그리고 1,0은 0) 해서 처리한다.

모든 호스트는 이 서브넷마스크로 자신이 어느 네트워크에 속해 있는지 알게 된다. 즉, 호스트 A는 호스트 B가 자신과 동일한 네트워크에 들어있는지 아닌지를 서브넷마스크로 판단한다. 라우터도 이것으로 판단한다.

▪ 192.168.100.23 255.255.255.0과
192.168.101.24 255.255.255.0은 서로 다른 네트워크에 존재한다.
▪ 192.168.100.23 255.255.255.0과
192.168.100.24 255.255.255.0은 서로 같은 네트워크에 존재한다.
▪ 192.168.100.23 255.255.255.0과
192.168.100.24 255.255.255.240도 서로 다른 네트워크에 존재한다.

192.168.17.19 = 11000000.10101000.00010001.00010011
255.255.255.0 = 11111111.11111111.11111111.00000000
ANDing 11000000.10101000.00010001.00000000 =>192.168.17.0와
192.168.17.20 = 11000000.10101000.00010001.00010100
255.255.255.240=11111111.11111111.11111111.11110000
ANDing 11000000.10101000.00010001.00010000 =>192.168.17.16는 다른 네트워크이다.

=>서브네팅된 네트워크, 완전히 다른 네트워크, 그리고 다른 VLAN에 속한 노드들은 서로 다른 네트워크에 존재하므로 이들은 반드시 라우터를 통해서만 통신이 된다.

Route Summary

Route Summary(경로요약)는 Route Aggregation(경로집합)으로도 불리는데 뒤에서 알아볼 슈퍼네팅(Supernetting)도 이와 유사한 기법으로 만들어 준다. IP 네트워크에서 도메인 내부가 복잡하게 서브네팅(Subnetting)되어 있을 때 이들 경로를 하나의 경로로 모으는 기법이다. 이렇게 해주면 내부 네트워크의 상태를 외부에 알리지 않게 되어서 보안이 좋아지고, 라우팅 테이블에 하나의 네트워크만 올라가기 때문에 라우팅 테이블이 가벼워져서 네트워크 트래픽 효율도 좋아지며, 불필요한 업데이트가 없으므로 네트워크가 효과적으로 운영되게 된다. 이에 비해서 도메인 내부의 복잡한 서브네팅 정보가 그대로 라우팅 테이블로 올라가서 내부의 모든 네트워크 정보가 외부로 알려지는 구조를 Flat Routing이라고 부른다.
=>Router(config)#no atuo summary 하면 sh ip route 했을 때 Classless 하게 서브넷의 주소들로 보인다.

Route Summary를 만들려면 여러 IP주소에서 맨 좌측으로부터 서로 공유되는 비트까지의 개수를 계산해서 서브넷마스크를 정하고, 이들 중 가장 큰 범위나 첫 번째 네트워크주소를 네트워크 ID로 주면 된다.
예를 들어 다음과 같은 내부의 네 개의 네트워크
192.168.10.0 255.255.255.0
192.168.11.0 255.255.255.0
192.168.12.0 255.255.255.0
192.168.13.0 255.255.255.0에서 192.168. ~ .0 까지는 모두 같으므로
11111111.11111111.00001010.00000000
11111111.11111111.00001011.00000000
11111111.11111111.00001100.00000000
11111111.11111111.00001101.00000000이어서
11111111.11111111.11111000.00000000이므로 세 번째 111110000는 2^7+2^6+2^5+2^4+2^3=248이되어 서브네트는 255.255.248.0이고, 192.168.10.0이 첫 번째 네트워크이므로 192.168.10.0 255.255.248.0 네트워크_주소와 서브넷마스크가 이 네 개의 네트워크를 대신하게 된다.

일반적으로 많이 사용되는 Class C 네트워크에서
▪ /24라면 Default로 24비트가 네트워크 비트이고, 나머지 8비트가 호스트 비트이다.
2^8은 2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7=1+2+4+8+16+32+64+128=255개의 호스트가 가능하다.
▪ /27이면 Subnetting으로 27비트가 네트워크 비트이고, 나머지 5비트만 호스트 비트이다.
2^5은 2^0+2^1+2^2+2^3+2^4=1+2+4+8+16=31개의 호스트가 가능하다.
이 경우에는 몇 개의 네트워크로 나누는지에 따라서 다르겠지만 적어도 255개의 호스트는 못 가지게 된다. 예를 들어서 8개의 서브넷이 있다면, 각 서브넷에는 31개의 호스트가 들어가므로 8x31=248개의 호스트가 가능하지만, 여기서 각 서브넷당 네트워크 주소와 다이렉티브 브로드캐스트 주소를 각각 빼면 248-(8(네트워크 주소)+8(다이렉티브 브로드캐스트 주소))=232개의 호스트 주소만 가능하다.
=>서브네팅에서는 호스트수 감소, 네트워크수 증가이다.
▪ /23이면 Supernetting으로 23비트가 네트워크 비트이고, 나머지 9비트가 호스트 비트이므로
2^9은 2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7+2^8=511개의 호스트가 가능하다. 슈퍼네팅은 현실적으로 브로드캐스트 영역이 너무 커서 네트워킹되기 어렵다.
=>슈퍼네팅에서는 호스트수 증가, 네트워크수 감소이다.

Amazon AWS, MS Azure, Google GCP cloud와 같은 상용 클라우드 상의 가상머신들은 IP주소를 AWS 등에서 자동으로 할당받는데, 조직의 관리자가 이 IP를 고정으로 변경할 수 있다. 클라우드에서는 무수한 가상머신들에게 공적 IP가 할당되어야 외부에서 접속할 수 있기 때문에 초기에는 사설 IP를 사용하지 않았고 서브네팅이나 슈퍼네팅도 별로 사용하지는 않았었다.
현재 클라우드의 가상머신들은 class A의 주소 2^24개의 16,777,216개 중 하나를 받아서 10. ~으로 시작되는 주소나, 간혹 class B의 2^16개의 6,5536개 중 하나를 받아서 172.16. ~ 으로 시작되는 주소를 자주 볼 수 있다.
하지만 클라우드 가상머신들끼리도 Class A나 Class B의 공적 IP
주소를 확보하지 못하기 때문에 동일한 조직의 내부에서는 사설 IP를 사용하고 외부로 나갈 때 공적 IP로 변경해주는 NAT를 사용하는 실정이다. 따라서 곧 클라우드의 가상머신들도 무한하게 주소를 할당받을 수 있는 IPv6 주소로 갈 것이다.

IPv6

현재 우리가 사용하고 있는 IP주소 체계를 IPv4(IP version 4)라고 하는데 1980년도 초부터 사용해온 것으로 지금의 엄청난 양의 각종 기기에 IP주소를 할당하기에는 이제 턱없이 부족한 실정이다. IPv4는 32비트이므로 2^32=43억 개 정도지만 실제로 사용할 수 있는 주소는 2억 5천만 개 정도이다. 현재의 네트워크 성장 추세와 신흥 IP 수요국가로 떠오른 중국과 얼마 지나지 않아서 떠오를 인도, 그리고 아프리카 인구 등을 고려하면 IP주소 고갈 문제는 실로 심각한 것이 될 것이다. 또 IPv4 주소를 컴퓨터에게만 할애되는 것은 아니라는 사실도 이런 IP 공급 부족을 부추기고 있다. IP Phone이나 IP TV, 그리고 미들웨어(Embeded System)를 이용한 홈 네트워킹으로 냉장고, 온도 조절기, 세탁기, 밥통 등에도 IP주소를 줌으로써 생활의 편리를 더욱 도모하는 추세이다. 현재는 거의 IP_주소가 고갈된 상태이다.

IPv4의 주소 고갈 문제를 해소하기 위해서
① 내부 LAN에서는 사설 IP주소를 사용하고 WAN으로 나갈 때에는 공적 IP로 만들어주는 NAT 기법을 사용하거나,
② 서브넷마스크를 이용한 서브네팅(네트워크
수 증가)/슈퍼네팅(호스트수 증가)을 사용하거나,
③ DHCP(Dynamic Host Configuration Protocol)로 사용하지 않는 IP
주소를 회수해서 다른 노드에게 부여하는 방식 등이 있다. DHCP 서버는 호스트들에게 IP_주소를 임대(leased)하는 방식이다.
이렇게 IPv4의 주소 절약에 나름대로 최선의 노력을 하고 있지만 IPv4 자체가 가지고 있는 한계(32비트 중에서도 네트워크와 호스트 주소로 나뉘는 체계) 때문에 IPv4 주소 고갈 문제는 피할 수는 없게 되었다.

IPv4는 또 다른 구조적인 문제를 가지고 있는데
① 데이터 헤더가 OSI 계층을 따라 내려가면서 복잡하게 캡슐화되어서 실제로 네트워크를 흐르는 데이터의 오버헤드(overhead)가 매우 크게 된다.
② 또 주소가 부족하므로 사설 IP_주소를 많이 사용하게 되어서 주소 충돌이라는 주소 관리 문제도 있고,
③ iptables나 IPSec로 설정하는 보안에서도 문제가 발견되고 있다.
④ TCP에서의 3-way handshakes 과정에서도 많은 허점이 내재되어 있다.
⑤ 하지만 가장 큰 문제 할 수 있는 것은 네트워크 트래픽을 다량으로 발생시키는 필요악과도 같은 브로드캐스트를 없앨 수 없다는 것이다. IPv4에는 유니캐스트, 멀티캐스트, 그리고 브로드캐스트가 있는데 IPv6에서는 유니캐스트, 멀티캐스트, 그리고 브로드캐스트가 빠지고 애니캐스트가 생겼다.

이런저런 이유로 새로운 IP_주소에 대한 연구가 이미 1990년대 초에 IETF(Internet Engineering Task Force)에서 시작되었는데 이 연구의 첫 번째 과제는 기존 IPv4에게 영향을 주지 않으면서도 새로운 주소체계인 IPv6가 사용되게 하는 것이었다. 따라서 새롭게 출시되는 IP 기기(프린터, 복사기, ...)에는 IPv4와 IPv6가 함께 들어있는 것을 볼 수 있다(dual stack).
중간에 현재의 RSVP(ReSource reserVation Protocol)와 유사한 디지털 멀티미디어의 QoS(Quality of Service)를 위해서 실험적으로 운영했던 IPv5가 있었지만 이내 사라졌다.

0개의 댓글