서브넷 (Subnet)과 서브넷 마스크 (mask)

렛츠웹 + 게임/My Tip 2009. 1. 21. 16:54

◎ 서브넷 (Subnet)과 서브넷 마스크 (mask)

 인터넷 주소 클래스는 IP 네트워크에 대해서 3개의 규모로 네트워크를 구분할 수 있도록 설계되었습니다. 32BIT의 IP주소는 얼마만큼의 네트워크 와 호스트가 필요하느냐에 따라 네트워크 ID와 호스트 ID로 구분지을 수 있습니다.

 그러나, 동일한 네트워크에 16,777,214개의 호스트를 가질 수 있는 클래스 A의 경우, IP 라우터에 의해 묶여진 동일 물리적 네트워크 상에 위치한 모든 호스트들은 같은 브로드캐스트 트래픽을 공유하게 됩니다.

 즉, 모든 호스트가 동일 브로드캐스트 도메인에 위치하게 됩니다. 16,777,214개의 포트가 동일한 브로드캐스트 도메인에 위치한다는 것은 현실적으로 바람직 하지 않습니다. 결과적으로 16,777,214개의 포트 주소의 대부분을 지정할 수 없게 되고 그만큼 낭비가 심해질 것입니다. 클래스 B 역시 65534 개의 호스트 역시 현실적으로 문제가 많지요..

 그래서 좀더 작은 브로드 캐스트 도메인을 만들고 호스트 ID의 비트를 잘 이용할 수 잇도록 하기 위해 IP네트워크는 라우터로 경계가 이어지는 작은 네트워크들로 분리 될 수 있습니다. 이렇게 분리도니 네트워크에 새로운 서브넷 네트워크를 지정합니다.

이 네트워크는 기존의 클래스  기반의 네트워크에 서브넷으로 포함 할 수 있습니다.

 아래 그림 1의 예제를 보면 139.12.0.0 의 클래스 B 네트워크는 65534 개의 호스트를 가질 수 있습니다. 너무 많죠..;;; 이러한 갯수로는 나중에 브로드캐스트 트래픽으로 트러블이 생길겁니다. ( 상상해보죠..한꺼번에 브로드캐스트 날리고..그 응답이 한꺼번에 자신에게 올때... 그 과부하...) 139.12.0.0을 서브넷으로 구성하는 것은 네트워크에 대해서 재설정이 필요가 없습니다.

                                

그림 1 ) 서브넷 구성 전 네트워크 139.12.0.0

 네트워크 139.12.0.0은 호스트 비트중 첫번째 9비트에 새로운 서브넷 네트워크를 지정하여 서브넷으로 구성할 수 있습니다. 만약 139.12.0.0 이 서브넷으로 구성되면 그림 2의 경우처럼 자신만의 서브넷 네트워크 (139.12.1.0, 139.12.2.0 , 139.12.3.0)을 가진 분리된 네트워크가 생성됩니다. 라우터는 분리된 서브넷 네트워크를 인식하고 적절한 서브넷으로 IP패킷을 라우팅 합니다.

  IP 네트워크의 나머지 부분에서는 여전히 3개의 서브넷에 있는 포트들을 네트워크 139.12.0.0에 위치하는 것으로 여깁니다.(중요)

네트워크에 존재하는 다른 라우터들은 네트워크 139.12.0.0에 위치하는 서브넷에 대해서 전혀 알지 못하기 때문입니다. 그래서 아무런 재설정이 필요없는 것입니다.

 

 그림 2) 서브넷 구성후의 139.12.0.0

 일단 기본적인 원리만 살펴 봤습니다. 네트워크 139.12.0.0 네트워크를 분할하는 라우터는 네트워크가 어떻게 분할 되는지, 어떤 서브넷이 어떤 라우터 인터페이스 에서 찾을 수 있는지 알 수 있을까요?

 IP 포트에 이러한 새로운 레벨의 정보를 주기 위해서는 새로운 서브넷 을 인터넷 주소 클래스와는 상관없이 정확하게 구분할 수 있도록 해야 합니다. 클래스 기반이든 혹은 서브넷이든 관계없이 IP 포트에게 정확한 네트워크 ID를 제공하기 위하여 서브넷 마스크를 사용합니다.

 ◎ 서브넷 마스크

 서브넷의 출현으로 더이상 IP 주소에서 네트워크를 정하기 위해 IP 클래스 정의에 의존할 수 없게 되엇습니다. 클래스기반 이든 혹은 서브 네트워크가 사용되는지의 여부에 관계없이 IP 주소의 어떤 부분이 네트워크 ID인지를 정의하는 새로운 값이 필요하게 되었죠.

 RFC 950은 서브넷 마스크 (주소 마스크라고도 함) 의 사용에 대해 정의하고 있습니다. 서브넷 마스크는 32BIT의 값으로 네트워크와 호스트를 IP 주소에서 구분하는 역활로 사용합니다.

 서브넷 마스크의 비트는 다음과 같이 정의됩니다.

   - 네트워크 ID에 해당하는 모든 비트는 1로 설정

  - 호스트 ID에 해당하는 모든 비트는 0으로 설정

 TCP / IP 네트워크에 존재하는 모든 호스트는 하나의 세그먼트로 이루어진 네트워크에 위치합니다. 이 경우에도 서브넷 마스크는 필요합니다. 기본 서브넷 마스크 ( 클래스 기반 네트워크에서 사용) 이나 사용자 정의 서브넷 마스크 (서브넷이나 슈퍼넷에서 사용) 중 하나는 반드시 모든 TCP / IP 포트에 정의되어야 합니다.

 * 서브넷 마스크의 점으로 구분한 10진수 표기법

 서브넷 마스크는 보통 점으로 구분된 10진수 표기로 표현합니다. 일단 , 비트가 네트워크 ID와 호스트 ID로 구분되어 지면 ,32BIT의 결과값은 10진수의 표기로 바뀌어 표시됩니다. 비록 점으로 구분된 10진수 표기라는 사실은 같지만 서브넷 마스크는 IP주소와는 다르다는 점을 기억해야 합니다.

 기본 서브넷 마스크는 IP주소 클래스에 의해 결정되며 서브넷으로 분리되지 않은 TCP / IP 네트워크에 사용됩니다.

 

표 1) 점으로 구분된 10진수 표기로 나타낸 기본 서브넷 마스크

 사용자 정의 서브넷 마스크는 서브넷이나 슈퍼넷을 구성할 때 사용되는 서브넷 마스크입니다. 예를 들어 138.96.58.0 이 8BIT 서브넷으로 구성된 클래스 B라고 할때 , 클래스 기반 호스트의 8비트는 서브넷 네트워크 를 표현하기 위해 사용됩니다.  서브넷으로 구성된 네트워크와 그에 해당하는 서브넷 마스크는 다음의 10진수로 표현할 수 있습니다

 138.96.58.0 , 255.255.255.0

 * 서브넷 마스크의 네트워크 접두어 길이 표현

 네트워크 비트는 언제나 상위 비트로부터 연속적으로 선택되어야 하므로 / [ BIT ] 와 같은 표현을 사용하여 네트워크를 정의하는 비트의 갯수를 표시할 수 있스비다.

 이러한 네트워크 접두어 표기법을 이용하여 서브넷 마스크를 간단히 표현할 수 있습니다.

 

표2) 네트워크 접두어 표기법으로 구성한 서브넷 마스크

 예를 들어 클래스 B 네트워크 IP가 138.96.0.0 이고 서브넷 마스크가 255.255.0.0 이라면 네트워크 접두어 표기법으로 다음과 같이 표시할 수 있습니다.

 

 138.96.0.0 /16

사용자 정의 서브넷 마스크의 예로서 138.96.58.0 이고 8BIT로 서브넷이 구성된 클래스 B 네트워크의 경우 서브넷 네트워크를 위해 총 24비트의 서브넷 마스크가 사용됩니다. 서브넷 과 그에 적합한 서브넷 마스크를 네트워크 접두어 표기법으로 표시하면 138.96.58.0 /24 가 됩니다.

 * 주의할 점

 동일한 네트워크에 존재하는 모든 호스트는 반드시 동일한 네트워크를 사용해야 하므로 반드시 동일한 서브넷 마스크로 정의 되어야 합니다.

 예를 들어 , 138.23.0.0/16 은 138.23.0.0/24 네트워크와 동일한 네트워크가 아닙니다.

 네트워크 138.23.0.0/16은 유효한 IP 주소 138.23.0.1 부터 138.23.255.254 까지를 나타냅니다.

 네트워크 138.23.0.0/24는 유효한 IP주소 138.23.0.1 부터 138.23.0.254 까지를 나타냅니다.  

 분명 이 두 네트워크는 동일한 IP 주소 영역을 가지고 있지 않습니다.

 * 내트워크 결정

 여러가지 서브넷 마스크를 사용하는 여러 네트워크에서 하나의 네트워크를 정확하게 찾아내기는 쉽지 않습니다. 그래서 IP는 논리적 AND 연산 비교라는 수학적 방법을 사용합니다.

 AND연산 비교에서 비교되는 두 값 모두 TRUE ( 두 값 모두 1로 존재해야 함 )야만 결과값 역시 TRUE가 됩니다. 만약 한쪽이 FALSE라면 결과값이 FALSE가 되는 것은 당연한 것이죠

IP는 32비트 주소 나누기를 32비트의 서브넷 마스크와 AND연산을 사용해서 나눕니다.  이 연산을 bit-wise 논리적 (LOSICAL) AND 라고 합니다. 이 연산의 결과값은 하나의 나눠진 네트워크가 되는 것이죠

예를 들어 129,56,189,41 의 서브넷 마스크가 255.255.240.0 일때

이를 연산해 보면

10000001 00111000 10111101 00101001         IP주소 

11111111 11111111 11110000 00000000         서브넷 마스크

10000001 00111000 10110000 00000000         네트워크

32비트 IP주소와 서브넷 마스크의 논리적 AND 연산의 결과 네트워크는 129.56.176.0임을 알 수 있습니다.

-----------------------------------------------------------------------------------------------------

◎ 서브넷

 호스트 비트를 이용하여 서브넷을 구성하는 것은 논리적으로 명확하지만 실제 서브넷을 구현하기에는 좀더 복잡합니다.

서브넷을 구성하기 위해서는 다음의 3단계를 거칩니다.

 1. 서브넷을 위해 사용할 호스트의 비트수를 결정합니다.

2. 새로운 서브넷 네트워크들을 열거합니다.

3. 각 새로운 서브넷 네트워크 별로 IP주소를 열거합니다.

 ▶ 호스트 비트의 개수 정하기

 서브넷을 위해 사용될 호스트 비트의 개수는 가능하면 서브넷의 개수와 서브넷 별로 호스트의 개수를 결정하게 됩니다. 호스트 비트를 선택하기 이전에 앞으로의 서브넷과 호스트의 확장성도 고려해서 결정해야 겠지요...

 현재 서브넷 마스크를 위해 필요한 비트보다 좀더 많은 비트를 사용하는 것이 앞으로의 확장에 좀 더 쉽게 대처할 수 있을 것입니다.

 호스트 비트를 더 많이 사용할 수록 더 많은 서브넷을 사용할 수 있습니다. 그러나 상대적으로 호스트의 개수는 줄어들게 되므로 ,너무 많은 호스트 비트를 사용하게 된다면 서브넷의 갯수는 증가되지만 호스트 갯수는 그만큼 제한 될 수 밖에 없습니다.

 반대로 호스트 비트를 너무 적게 사용하면 호스트의 증가에 대처하기는 쉽지만 서브넷 증설에 제약을 받게 되지요.

 아래의 그림은 클래스 B 네트워크에서 호스트 비트중 8비트를 사용하는 서브넷을 나타낸 것입니다. 만약 서브넷을 위해 1개의 호스트 비트를 사용하게 된다면 2개의 서브넷을 사용할 수 잇고 각 서브넷 별로 16,382개의 호스트를 구성할 수 있습니다. 서브넷을 위해 8개의 비트를 사용하는 경우에는 256의 서브넷을 구성할 수 있고 각 서브넷 별로 254개의 호스틀 구축할 수 있습니다.

 

그림 1) 클래스 B 네트워크 ID 서브넷

 실제로, 네트워크 관리자는 하나의 네트워크에서 원하는 최대 노드 개수를 정의합니다. 동일한 네트워크 상의 모든 노드는 동일한 브로드캐스트 트래픽을 공유합니다. 그러므로 , 서브넷 별로 호스트 개수가 증가하기 보다는 서브넷의 갯수가 늘어나는 것을 더 선호합니다.

 서브넷을 위해 사용할 호스트 비트의 갯수를 정하기 위해서는 다음의 가이드라인을 지킵니다.

 1. 필요한 만큼의 서브넷을 결정하고 앞으로 필요할 서브넷의 양을 예측합니다. 모든 물리적 네트워크는 서브넷 자체이므로 , WAN 연결 또한 라우터에 따라 서브넷으로 간주해야 할 필요가 있습니다.

 2. 다음의 경우 서브넷을 위하여 추가적인 비트를 사용합니다.

 -  현재 남아있는 비트에 의해 사용할 수 있는 호스트의 개숫만큼 호스트를 절대로 사용하지 않는 경우

- 앞으로 서브넷의 개수가 증가할 가능성이 있을 경우

 적절한 서브넷 계획을 결정하기 위해선 우선 서브넷으로 구성되어야 할 현재 네트워크부터 살펴봐야 합니다. 서브넷으로 구성될 네트워크는 클래스 기반의 네트워크 이거나 혹은 서브넷 네트워크 ,슈퍼넷 네트워크일 수 있습니다.

 현재 존재하는 네트워크는 고정된 연속적인 네트워크 비트를 가지고 있습니다. 이러한 연속적인 호스트 비트는 가변적입니다.  

필요한 서브넷의 개수와 서브넷 당 호스트의 개수에 근거하여 서브넷을 위해 사용될 호스트 비트를 사용하게 될 것입니다.

 아래의 표는 클래스 A 네트워크의 서브넷입니다. 필요한 서브넷과 서브넷당 최대 호스트 개수에 근거, 서브넷 설계가 가능합니다.

 

표1) 클래스 A에 대한 네트워크 서브넷

 

표2) 클래스 B에 대한 네트워크 서브넷

  

표3) 클래스 c에 대한 네트워크 서브넷

 

▶ 서브넷 네트워크 열거

 호스트 비트에 개수에 따라 서브넷을 사용할 수 있습니다. 그러기 위해서는 우선 새로운 서브넷 네트워크에 대해 살펴야 합니다.

 *  2진수 - 서브넷으로 선택된 호스트 비트의 가능한 모든 조합을 열거합니다. 그리고 각조합의 값을 점으로 구분한 10진수 형태로 변환합니다.

    10진수 - 각 연속적인 서브넷 네트워크에 게산된 증가값을 더하고 점으로 구분한 10진수 표기법으로 변환합니다.

 각 방법은 동일한 결과를 보여줍니다. 위의 방법을 이용해서 서브넷 네트워크에 대한 목록을 구성할 수 있습니다.

=> 서브넷 구성을 위한 방법에는 여러가지 방법이 존재합니다. 그러나 그러한 방법들은 특정 제약조건 (EX : 클래스 기반 네트워크에서 8비트의 경우에만 사용가능) 에서만 사용 가능합니다. 다음 설명하는 방법은 어떠한 서브넷 구성환경 (8비트 이상의 클래스 기반 , 슈퍼넷 , 가변길이 서브넷 등)에서도 사용 가능한 것입니다.

 ▷ 2진 서브넷 구성 방법

 1. 서브넷을 위해 선택된 호스트 비트의 개수를 N이라 할때 .2N 엔트리를 가진 3 컬럼의 테이블을 작성합니다. 첫 컬럼은 서브넷 번호를 나타내고 , 두번째는 서브넷 네트워크의 2진수 표현 , 마지막 3번째 컬럼은 서브넷 네트워크의 10진수 표기결과를 나타냅니다.

    각가의 2진 표기값에서 서브넷으로 사용되는 네트워크 비트는 적절한 값으로 지정하고 나머지 호스트 비트 값은 모두 0으로 지정합니다. 서브넷을 위해 사용되는 호스트 비트의 갯수는 가변적일 것입니다.

 2. 첫번째 테이블 엔트리는 모든 서브넷 비트를 0으로 지정하고 이 값을 10진 표기로 변경합니다. 기존 네트워크는 새로운 서브넷 마스크로 서브넷으로 구성됩니다.

 3. 테이블의 다음 엔트리에는 서브넷 비트의 값을 증가 시킵니다.

4. 이진 값을 10진 표기로 변경합니다.

5. 테이블을 모두 작성할 때 까지 3 과 4 의 과정을 반복합니다.

예) 네트워크가 192.168.0.0 이고 3 비트 서브넷을 구성해야 할 경우

 새로운 서브넷 네트워크를 위한 서브넷 마스크 값은 255.255.224.0 /19 입니다. N=3이므로 테이블은 8(= 23) 개의 엔트리로 작성이 됩니다. 서브넷 1을 위한 엔트리는 모두 0으로 지정한 서브넷입니다. 테이블의 나머지 엔트리는 아래의 표 4 에서 표현 한 것 처럼 서브넷 비트를 연속적으로 증가 시켜 작성하면 됩니다. 서브넷을 위한 호스트 비트들은 밑줄쳐진 것입니다.

 

표4) 2진 서브넷 구성방법 (192.168.0.0 기준)

 

▷ 10진 서브넷 구성 방법

 1. 서브넷을 위해 선택도니 호스트 비트의 갯수를 n이라고 하고 2n 엔트리를 가진 3 컬럼의 태이블을 작성합니다. 첫 컬럼은 서브넷 번호 , 두번째는 32 비트 서브넷 네트워크에 대한 10진수 표시입니다. 마지막 세번째 컬럼은 서브넷 네트워크의 점으로 구분한 10진수 표기된 결과를 나타냅니다.

 2. 서브넷으로 구성되는 네트워크 ID (w.x.y.z)를 점으로 구분한 10진수 표깅레서 N(32비트 네트워크에 대한 10진 표기)로 변경합니다.

     N = w * 1677216 + x * 65536 + y * 256 + z

3. 남은 호스트 비트 개수 h를 이용하여 증가치 i를 구합니다.

     i = 2h

4. 첫번째 테이블 엔트리에는 서브넷 네트워크의 10진 표기인 N과 새로운 서브넷 마스크와 함꼐 w.x.y.z 형태의 서브넷 네트워크가 위치합니다.

 5. 다음 테이블 엔트리에는 그 전 엔트리의 10진 값에 증가지 i를 더합니다.

 6. 서브넷 네트워크 10진 값을 점으로 구분한 표기 (w.x.y.z) 형태로 변경합니다. 변경 시 아래와 같은 공식을 이용합니다. (s는 서브넷 네트워크 10진 값을 나타냅니다.)

 w = INT(s/ 16777216)

x = INT((s mod(16777216))/65536)

y = INT((s mod(65536))/256)

z = s mod (256)

 7. 테이블을 완성할 떄 까지 5,6 과정을 반복합니다.

 예) 네트워크가 192.168.0.0 이고 3비트 서브넷 구성시 , n =3 이 되고 8개의 엔트리를 가진 테이블 생성 . 서브넷 1 엔트리는 모든 서브넷 값이 0입니다. 192.168.0.0 에 대한 10진 표기인 N값은 3232235520 (192 * 16777216 +168 * 65536 계산에 의한 결과 ) 입니다. 13개의 호스트 비트가 남아 있으므로 증가치 값인 I는 213 = 8192 입니다. 테이블의 남은 엔트리들은 8190으로 연속적으로 증가시키면 됩니다.

 

표 5)  10진 서브넷 구성 방법 (192.168.0.0)

 

▷ 모두 0이거나 1인 서브넷

 RFC 950은 원칙적으로 모든 서브넷을 위해 사용되는 모든 비트가 다 0으로 설정되거나(모두가 0인 서브넷) 1로 설정되는 (모두 1인 서브넷) 것을 금지합니다. 모두 0인 서브넷은 초기 라우팅 프로토콜에서 문제를 일으키고 모두 1인 서브넷은 모든 서브넷 직접 브로드캐스트 주소 라는 특별한 브로드캐스트 주소와 충돌을 일으킵니다.

 하지만 RFC 1812는 현재 모두 0 ㅡ 모두 1 서브넷을 CIDR (Classless Information Routing) 호환 환경에서 허용하고 잇습니다.

CIDR-호환환경은 모두 0인 서브넷과 문제를 일으키지 않는 새로운 라우팅 프로토콜을 사용하며 모두가 1인 서브넷과 충돌하는 모든 서브넷 들은 직접 브로드캐스트를 사용하지 않습니다.

 모두 0 혹은 1인 서브넷을 사용하기 이전에 우선 호스트와 라우터가 이것을 허용하는지 확인해야 합니다. ( Window NT sever 계열은 모두 0 혹은 1인 서브넷을 허용함 ) 

 ◎ 각 서브넷 네트워크를 위한 IP 열거

 열거된 서브넷 네트워크를 이용하여 새로운 서브넷 네트워크를 위해 IP주소에 대한 목록을 작성해야 합니다. 각 IP주소를 모두 목록으로 작성하는 작업은 귀찮을 수 있습니다. 그래서 각 서브넷 네트워크에 대해서 IP주소의 범위를 지정하여 IP 주소를 나타낼 수 있습니다

 2진수 - 각 서브넷 네트워크에 대해서 시작과 마지막 IP 주소를 적어주고 점으로 구분한 10진수 표기법으로 변환

10진수 - 각 서브넷 네트워크에 대한 시작과 마지막 IP주소에 가중치를 더합니다. 그 값을 점으로 구분한 10진수 표기법으로 변환

 각 방법은 동일한 결과 를 나타냅니다.

 

 표7) IP주소를 이용한 2진 열거

 

 표8) IP주소에 대한 10진 열거 


posted by 망차니

설정

트랙백

댓글