본문 바로가기
IT, 개발/JAVA

서브넷 마스크를 CIDR 형식으로 변환 (255.255.255.0 -> /24)

by 개발자스터디 2024. 10. 29.
반응형

 

 

서브넷 마스크를 CIDR 형식으로 변환하는 방법에 대해 알아보도록 하겠습니다.

이번 글에서는 서브넷 마스크와 CIDR 표기법의 개념을 간단히 알아보고, 이를 JavaPython으로 변환하는 방법을 예제 코드와 함께 확인해보려고 합니다.

 

1. 서브넷 마스크와 CIDR이란?

1-1. 서브넷 마스크

서브넷 마스크는 IP 네트워크에서 IP 주소를 네트워크 부분호스트 부분으로 나누기 위해 사용되는 32비트 숫자입니다.

IPv4 주소와 동일하게 4개의 옥탯(octet)으로 표현되며, 일반적으로 255.255.255.0과 같은 형식으로 표기됩니다.

서브넷 마스크는 네트워크를 세분화하여 IP 주소를 효율적으로 사용할 수 있게 합니다.

 

각 옥탯은 8비트를 나타내며, 0과 1로 이루어진 이진수로 표현됩니다.

 

예를 들어, 255.255.255.0은 2진수로 11111111.11111111.11111111.00000000입니다.

 

255 255 255 0
11111111 11111111 11111111 00000000

 

여기서 1로 설정된 비트는 네트워크를 나타내며,

1이 아닌 부분(0으로 된 부분)은 호스트를 위한 영역으로 사용됩니다.

 

1-2. CIDR 표기법

CIDR(Classless Inter-Domain Routing) 표기법은 서브넷 마스크를 슬래시와 숫자 형식으로 나타냅니다.

/24, /16과 같이 네트워크 주소 뒤에 /와 네트워크 비트 개수를 적는 방식입니다.

예를 들어, 255.255.255.0의 CIDR 표기는 /24로, 이는 네트워크 비트가 24개임을 의미합니다.

 

 

 

반응형

 

 

2. 서브넷 마스크를 CIDR로 변환하기

서브넷 마스크를 CIDR 형식으로 변환하려면, 서브넷 마스크의 2진수 표현에서 1로 설정된 비트 개수를 세면 됩니다. 이를 통해 네트워크 비트 수를 CIDR 표기법으로 나타낼 수 있습니다.

 

1-1. Java 예제 코드

아래는 Java에서 서브넷 마스크를 CIDR로 변환하는 코드입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class SubnetMaskToCIDR {
    public static void main(String[] args) {
        String subnetMask = "255.255.255.0";
        int cidr = convertSubnetMaskToCIDR(subnetMask);
        System.out.println("CIDR notation for " + subnetMask + " is: /" + cidr);
    }
 
    // 서브넷 마스크를 CIDR로 변환하는 메서드
    public static int convertSubnetMaskToCIDR(String subnetMask) {
        String[] octets = subnetMask.split("\\.");
        int cidr = 0;
 
        for (String octet : octets) {
            int value = Integer.parseInt(octet);
            // 각 옥탯을 2진수로 변환하여 1의 개수 세기
            cidr += Integer.bitCount(value);
        }
 
        return cidr;
    }
}
 
cs

 

  1. split: 입력된 서브넷 마스크를 .으로 나누어 각 옥탯을 가져옵니다.
  2. Integer.parseInt: 각 옥탯을 정수로 변환하고, bitCount 메서드를 통해 해당 정수의 1의 개수를 계산합니다.
  3. 누적: 모든 옥탯의 1의 개수를 누적하여 CIDR 값을 계산합니다.

 

코드를 실행하면 다음과 같은 결과가 출력됩니다.

CIDR notation for 255.255.255.0 is: /24
 

 

1-2. Python 예제 코드

다음은 Python에서 서브넷 마스크를 CIDR로 변환하는 예제입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def subnet_mask_to_cidr(subnet_mask):
    # 서브넷 마스크를 '.'으로 분리하여 각 옥탯 가져오기
    octets = subnet_mask.split(".")
    cidr = 0
 
    for octet in octets:
        # 10진수를 2진수로 변환하고, 1의 개수 세기
        cidr += bin(int(octet)).count("1")
 
    return cidr
 
# 예제 사용
subnet_mask = "255.255.255.0"
cidr = subnet_mask_to_cidr(subnet_mask)
print(f"CIDR notation for {subnet_mask} is: /{cidr}")
 
cs

 

 

  1. split: Java와 마찬가지로 split 메서드를 사용해 서브넷 마스크를 분리합니다.
  2. bin: 각 옥탯을 이진수로 변환하여 1의 개수를 count("1") 메서드로 계산합니다.
  3. 누적: 각 옥탯의 1의 개수를 누적하여 CIDR 값을 반환합니다.

 

 

코드 실행 결과입니다.

CIDR notation for 255.255.255.0 is: /24

 

 

 

 

3. 결론

서브넷 마스크를 CIDR 형식으로 변환하는 것은 IP 네트워크를 이해하고 관리하는 데 유용합니다.

JavaPython에서는 서브넷 마스크의 각 옥탯을 2진수로 변환한 후, 1의 개수를 합산하여 CIDR 값을 쉽게 계산할 수 있습니다.

이를 통해 네트워크 비트 개수를 정확하게 식별하고, 네트워크 주소를 더욱 효율적으로 관리할 수 있습니다.

 

 

728x90
반응형