cidrsubnet 함수
cidrsubnet 함수 (cidrsubnet Function)
cidrsubnet 함수는 주어진 IP 네트워크 주소 접두사 내에서 서브넷 주소를 계산해요. 네트워크를 작은 서브넷으로 나눌 때 유용하답니다.
출처: Packer 공식 문서
본문
cidrsubnet 함수는 주어진 IP 네트워크 주소 접두사 내에서 서브넷 주소를 계산해요.
cidrsubnet(prefix, newbits, netnum)
prefix 는 RFC 4632 섹션 3.1 에 정의된 대로 CIDR 표기법으로 주어져야 해요.
newbits 는 접두사를 확장할 추가 비트 수예요. 예를 들어 /16 으로 끝나는 접두사와 4 인 newbits 값이 주어지면, 결과 서브넷 주소는 /20 길이를 가져요.
netnum 은 newbits 보다 많지 않은 이진 자릿수로 표현할 수 있는 정수예요. 이 값은 접두사에 추가되는 추가 비트를 채우는 데 사용돼요.
이 함수는 IPv6와 IPv4 접두사 모두 받아들이고, 결과는 항상 주어진 접두사와 같은 주소 체계를 사용해요.
관련 함수 cidrsubnets 와 달리, cidrsubnet 은 사용할 특정 네트워크 번호를 지정할 수 있게 해 줘요. cidrsubnets 는 한 번에 여러 네트워크 주소를 할당할 수 있지만, 0부터 시작해 자동으로 번호를 매겨요.
Examples (예시)
> cidrsubnet("172.16.0.0/12", 4, 2)
172.18.0.0/16
> cidrsubnet("10.1.2.0/24", 4, 15)
10.1.2.240/28
> cidrsubnet("fd00:fd12:3456:7890::/56", 16, 162)
fd00:fd12:3456:7800:a200::/72
Netmasks and Subnets (넷마스크와 서브넷)
cidrsubnet 을 사용하려면 몇 가지 네트워크 주소 개념에 익숙해야 해요.
가장 중요한 개념은 IP 주소(IPv4든 IPv6든)가 근본적으로 이진 자릿수로 구성된다는 거예요. 관례적으로 4개의 십진 옥텟(IPv4)이나 16비트 16진수 시퀀스(IPv6)로 표현하지만요.
위의 cidrsubnet("10.1.2.0/24", 4, 15) 예시를 보면, 함수는 먼저 주어진 IP 주소 문자열을 동등한 이진 표현으로 변환해요.
10 . 1 . 2 . 0
00001010 00000001 00000010 | 00000000
network | host
접두사 문자열 끝의 /24 는 주소의 처음 24비트(즉 처음 3개 옥텟)가 네트워크를 식별하고, 나머지 비트(이 경우 32 - 24 = 8비트)가 네트워크 안의 호스트를 식별한다는 것을 지정해요.
CLI 도구 ipcalc 는 CIDR 접두사를 이진수로 시각화하는 데 유용해요. 같은 접두사 문자열을 ipcalc 에 제공해서 위 변환을 확인할 수 있어요.
$ ipcalc 10.1.2.0/24
Address: 10.1.2.0 00001010.00000001.00000010. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 10.1.2.0/24 00001010.00000001.00000010. 00000000
HostMin: 10.1.2.1 00001010.00000001.00000010. 00000001
HostMax: 10.1.2.254 00001010.00000001.00000010. 11111110
Broadcast: 10.1.2.255 00001010.00000001.00000010. 11111111
Hosts/Net: 254 Class A, Private Internet
이것은 몇 가지 추가 정보를 주지만 (약간 다른 표기법으로) 십진수에서 이진수로의 변환도 확인하고, 이 네트워크에서 가능한 호스트 주소 범위도 보여줘요.
cidrhost 가 단일 호스트 IP 주소 계산을 허용하는 반면, cidrsubnet 은 주어진 네트워크 접두사 안에 새 네트워크 접두사를 만들어요. 즉 서브넷을 만드는 거죠.
cidrsubnet 을 호출할 때 두 개의 추가 인자 newbits 와 netnum 도 전달해요. newbits 는 결과 접두사가 비트 단위로 얼마나 더 길어질지 결정해요. 여기 예시에서는 4 를 지정했으므로 결과 서브넷의 접두사 길이는 24 + 4 = 28비트가 돼요. 이 비트들이 다음과 같이 나뉜다고 상상할 수 있어요.
10 . 1 . 2 . ? 0
00001010 00000001 00000010 | XXXX | 0000
parent network | netnum | host
원래 "호스트 번호"였던 8비트 중 네 비트가 이제 서브넷 번호로 용도가 바뀌었어요. 네트워크 접두사가 더 이상 정확한 옥텟 경계에 떨어지지 않으므로, 사실상 IP 주소의 마지막 십진수를 두 부분으로 나눠, 절반은 서브넷 번호를, 나머지 절반은 호스트 번호를 나타내게 됐어요.
그런 다음 netnum 인자가 이 네 개의 새 서브넷 비트에 어떤 숫자 값을 인코딩할지 결정해요. 현재 예시에서 15 를 전달했는데, 이진수로 1111 이에요. 위의 XXXX 세그먼트를 채울 수 있게 되죠.
10 . 1 . 2 . 15 0
00001010 00000001 00000010 | 1111 | 0000
parent network | netnum | host
이것을 다시 일반 십진 표기법으로 변환하려면 마지막 옥텟의 두 부분을 다시 결합해야 해요. 11110000 을 이진수에서 십진수로 변환하면 240이 되고, 새 접두사 길이 28과 결합해 결과 10.1.2.240/28 을 만들 수 있어요. 다시 이 접두사 문자열을 ipcalc 에 넘겨 시각화할 수 있어요.
$ ipcalc 10.1.2.240/28
Address: 10.1.2.240 00001010.00000001.00000010.1111 0000
Netmask: 255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
Wildcard: 0.0.0.15 00000000.00000000.00000000.0000 1111
=>
Network: 10.1.2.240/28 00001010.00000001.00000010.1111 0000
HostMin: 10.1.2.241 00001010.00000001.00000010.1111 0001
HostMax: 10.1.2.254 00001010.00000001.00000010.1111 1110
Broadcast: 10.1.2.255 00001010.00000001.00000010.1111 1111
Hosts/Net: 14 Class A, Private Internet
새 서브넷은 호스트 번호에 사용할 수 있는 4비트를 가지므로, 네트워크 자신의 주소와 브로드캐스트 주소를 빼면 할당에 사용할 수 있는 호스트 주소가 14개 있다는 뜻이에요. 따라서 cidrhost 함수에 1부터 14 사이의 값을 제공해 그 호스트 주소들을 계산할 수 있어요.
> cidrhost("10.1.2.240/28", 1)
10.1.2.241
> cidrhost("10.1.2.240/28", 14)
10.1.2.254
CIDR 표기법과 서브넷팅에 대한 자세한 내용은 Classless Inter-domain Routing 을 참고하세요.
Related Functions (관련 함수)
cidrhost함수는 주어진 네트워크 주소 접두사 내에서 단일 호스트의 IP 주소를 계산해요.cidrnetmask함수는 CIDR 표기법의 IPv4 네트워크 접두사를 넷마스크 표기법으로 변환해요.cidrsubnets함수는 접두사 아래에서 여러 연속 주소를 한 번에 할당하고 자동으로 번호를 매겨요.
더 알아보기 (Learn more)
- 이 페이지는 Packer 공식 문서에서 가져왔어요.