Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

IP Class

인터넷 주소는 32bit 크기를 가진다. 이를 효율적으로 관리하기 위해서 A 클래스에서 D 클래스 까지 4개의 계층을 둬서 관리한다. 먼저 32bit 주소를 8bit씩 나누고 "."으로 각 필드를 구분한다. 그래서 xxx.xxx.xxx.xxx식의 인터넷 주소 표기 방식이 만들었다. 8bit이므로 0.0.0.0 에서 255.255.255.255까지의 주소 범위를 가진다.

이렇게 8bit씩 4개 필드로 나눈 인터넷 주소는 다시 network prefix와 host Number로 나눈다. network prefix는 말그대로 고정된 주소이고 host 번호는 호스트에 부여하는 번호다. 217.289.56.xxx 네트워크가 있다면, 217.209.56이 network prefix고 마지막 8bit가 호스트 번호다. 이 8bit를 이용해서 호스트를 관리한다. 이 경우 217.208.56.1 ~ 217.208.56.254 까지다.

클래스는 처음 8bit중 4bit의 비트 값을 이용해서 결정한다.
  1. A 클래스
    • 첫 비트가 0이다.
    • 네트워크를 위해 할당된 bit는 7개이다. 호스트 주소는 나머지 7bit로 결정한다. 그러므로 A 클래스의 인터넷 주소는 1에서 126이 된다. 나머지 24 비트는 호스트를 위해서 사용한다. 그러므로 A 클래스 주소를 할당 받은 네트워크는 16777216 개의 호스트를 관리할 수 있다. 대략 1천 6백만이 되는 대규모의 네트워크로, 네트워크가 발당한 국가 혹은 대규모 국제 단체에 할당한다.
  2. B 클래스
    • 첫 비트가 1, 두번째 비트는 0이다.
    • 네트워크에 할당한 bit는 16bit다. 두개는 고정돼 있으니 14개 bit를 이용해서 네트워크 주소를 할당할 수 있다. 호스트에는 16bit가 할당되므로 하나의 네트워크가 관리할 수 있는 호스트는 6만 5천개가 된다.
  3. C 클래스
    • 처음 두 비트가 1, 세번째 비트가 0이다.
    • 네트워크에 할당한 bit는 24bit다. 세개 비트가 고정돼 있으니 21개 bit를 이용해서 네트워크 주소를 할당할 수 있다. 호스트에는 8bit가 할당되므로 하나의 네트워크가 관리할 수 있는 호스트는 256개로 제한된다.
  4. D 클래스
    • 3개 비트가 1, 네번째 비트가 0이다.
  5. D 클래스는 멀티캐스트 주소로 인터넷 상에서 노드를 구분하기 위해서 사용하는 주소는 아니다. 그러므로 인터넷 상에서 사용하는 주소 클래스는 A, B, C 3개가 된다. E 클래스는 현재 사용하지 않고 있다.
    1. E 클래스
      • 남겨두고 사용하지 않음.
    2. 정리해 보자. 인터넷에서 사용하는 클래스만 정리했다.
      클래스 네트워크 갯수 관리 호스트 갯수 IP 범위
      A Class 127 개 약 16백만 1.0.0.1 ~ 126.255.255.255.254
      B Class 16,000 개 약 6만5천 128.1.0.1 ~ 191.255.255.254
      C Class 약 2백만 254 개 192.0.1.1 ~ 223.255.254.254
      이중 127.xxx.xxx.xxx는 루프백을 위해 예약한 주소다. 우리가 일반적으로 사용하는 127.0.0.1이 대표적인 루프백 주소다.

      subnet

      subnetwork의 줄임말로, 특정 네트워크를 논리적으로 나누기 위해서 사용한다. subnet은 network prefix와 Host Number 거기에 subnet Number를 이용해서 계산한다.

      192.168.5.128/24 이런식으로 subnet을 표현하는데, 이것을 CIDR notation 이라고 한다. 어떤 의미인지는 밑에서 자세히 다루도록 하겟다.

      네트워크를 논리적으로 나눴다면, 해당 패킷이 어느 subnet으로 갈지를 결정할 수 있어야 한다. 혹은 호스트가 접근하기 원하는 IP가 같은 subnet에 묶인 IP인지를 확인해야 한다. subnet을 확인하는 방법을 알아보자.

      subnet mask

      올바른 subnet으로 향하는 패킷인지 아닌지는 subnet mask를 이용해서 계산한다. subnet mask는 IPv4 주소의 길이와 같은 32bit이고, 각 클래스 별로 mask가 준비돼 있다.
      A Class subnet mask 11111111 00000000 00000000 00000000  255.0.0.0
      B Class subnet mask 11111111 11111111 00000000 00000000  255.255.0.0
      C Class subnet mask 11111111 11111111 11111111 00000000  255.255.255.0

      이제 IP 주소가 들어오면, 스위치나 라우터는 IP 주소와 subnet mask를 bit 연산을 한다. bit 연산을 한 결과 값이 IP 주소의 network prefix와 같으면 성공 그렇지 않으면 실패로 해서 서브넷으로 보낼 것인지를 결정한다.

      이것을 CIDR notation으로 나타내면 192.168.6.0/24 가 된다. 넷 마스크로 24bit로 해서 입력되는 IP를 계산하겠다는 의미다. 계산에 사용할 network prefix는 비트마스크 크기와 같은 24bit다.

      192.168.5.2이 이 네트워크에 포함되는지는 다음과 같이 계산하면 된다.
         11111111 11111111 11111111 00000000   C Class subnet mask
         11000000 10101000 00000101 00000010   
        ----------------------------------------------------------
         192      168      5        
      24bit의 연산결과 입력 값과 출력 값이 192.168.5로 같으므로, 192.168.5.2 주소는 192.168.6.0/24 서브넷에 포함된 호스트임을 알 수 있다. 사실 이 경우에는 하나의 서브넷만 있으므로 .1 부터 .255까지 모두 같은 서브넷에 있다.

      이제 서브넷을 두개로 나눠 보자. 이때 이용하는게 subnet bit로 host bit의 일부를 subnet mask로 사용해서 subnet을 나눈다.
      CIDR 표기 subnet mask subnet 갯수 서브넷당 호스트
      /24 255.255.255.0 1 254
      /25 255.255.255.128 2 126
      /26 255.255.255.192 4 62
      /27 255.255.255.224 8 30
      /28 255.255.255.240 16 14
      /29 255.255.255.248 32 6
      /30 255.255.255.252 64 2
      192.168.5.0 네트워크를 2개의 서브넷으로 만들어 보자.
      • 첫 번째 subnet : 192.168.5.0/25
      • 두 번째 subnet : 192.168.5.128/25
      해석을 해보자. 넷 마스크 비트를 25bit크기로 했다. 첫 번째 subnet은 서브넷 넘버를 0으로 한다음에 서브넷 연산을 하겠다는 의미다. 이렇게 하면 첫번째 subnet은 192.168.5.1 ~ 192.168.5.127까지의 주소를 관리할 수 있을 것이다.
        11111111 11111111 11111111 00000000     192.168.5.0/25
        11000000 10101000 00000101 00000001     192.168.5.1 
        11000000 10101000 00000101 01111111     192.168.5.127
       ------------------------------------
        192      168      6        0

      192.168.6.129이 이 서브넷에 포함되는지를 계산해 보자.
        11111111 11111111 11111111 00000000     192.168.5.0/25
        11000000 10101000 00000101 10000001     192.168.5.129
        -------------------------------------------------------
        192      168      6        0
      입력값과 출력 값이 다르므로 192.168.5.129는 192.168.5.0/25의 서브넷 호스트가 아니라는 걸 알 수 있다.

      192.168.5.129는 192.168.5.1/25 서브넷에 속하는 호스트다.
        11111111 11111111 11111111 10000000     192.168.5.1/25
        11000000 10101000 00000101 10000001     192.168.5.129
        -------------------------------------------------------
        192      168      6        1

      네트워크 계획

      마지막으로 실제 네트워크 구성을 예로 들어서 subnet을 이해해 보기로 하자.

      joinc 라는 종합대학이 있다. 이 종합대학에는 B 클래스 네트워크인 134.25.0.0이 할당됐다. 나는 네트워크 관리자로서 이 주소를 효율적으로 관리해야 한다. 일단 B클래스 주소를 4개 단과 대학별로 할당하기로 결정했다. 넷 마스크는 B 클래스로 하고 subnet number를 11로 하면 4개의 B 클래스 서브넷을 관리할 수 있다. CIDR notation으로 나타내보자.
      • 134.25.0.0/18
      • 134.25.64.0/18
      • 134.25.128.0/18
      • 134.25.192.0/18
      공과대학은 134.25.64.0/18을 할당 했다. 이 중 134.25.100.0 네트워크를 컴퓨터 공학과에 할당하기로 했다. 헌데 컴퓨터 공학과는 이 네트워크를 8개의 subnet으로 나누기로 했다. CIDR은 134.25.100.0/27을 하면 될테다.

      bc로 비트 연산하기

      이건 팁.

      비트 연산을 하려면 좀 깝깝스럽다. 대개의 계산기가 비트연산을 지원하긴 하지만 개인적으로 썩 만족스럽지가 않다. 예전부터 간단한 계산에 bc를 사용했는데, 혹시나 해서 검색해봤더니 역시나 비트연산을 지원한다. 서브넷 연산 뿐만 아니라 다른 비트 연산에도 사용해 봄직 하다.

      bc에는 ibase와 obase라는 특수 변수가 있어서, 입력과 출력에 사용할 기본 진수를 설정할 수 있다. 인터넷 주소의 경우 10진수 값을 2진 값으로 변환해야할 경우가 있는데, 이때는 obase=2로 하면 된다. 그러면 출력을 2진수로 고정한다. 192.168.5.2의 각 바이트를 2진 변환해보자.
      # bc
      obase=2
      192
      11000000
      168
      10101000
      5
      101
      2
      10

      16진수를 2진수로 변환하고 싶다면, ibase=16으로 obase=2로 하면 된다.
      # bc
      ibase=16
      obase=2
      FF
      11111111
      시간 되면 bc나 좀 자세히 살펴봐야 겠다.

      히스토리

      • 작성일 : 2011년 12월 10일