from Dictionary - IP
IPv4, IPv6
IPv4
####.####.####.###
0 ~ 255 (2^8)으로 구성되며
4옥텟으로 구분되는 형식을 `IPv4`라고 한다.
총 32비트의 주소 공간을 제공한다.
192 . 168 . 0 . 1
11000000 . 10101000 . 00000000 . 00000001
|--------| |--------|
8비트(=1바이트) 옥텟(Octet)
|-----------------------------------------|
IPv4 주소 : 8비트 * 4 = 32비트(4바이트)
IPv6
IPv6의 128비트 주소공간은 다음과 같이 16비트(2옥텟)를 16진수로 표현하여
8자리로 나타낸다.(8옥텟)
2001:0db8:85a3:08d3:1319:8a2e:0370:7334
러나 대부분의 자리가 0의 숫자를 갖게 되므로, 0000을 하나의 0으로 축약하거나,
혹은 아예 연속되는 0의 그룹을 없애고 ':' 만을 남길 수 있다.
따라서 아래의 IPv6 주소들은 모두 같은 주소를 나타낸다.
2001:0DB8:0000:0000:0000:0000:1428:57ab
2001:0DB8:0000:0000:0000::1428:57ab
2001:0DB8:0:0:0:0:1428:57ab
2001:0DB8:0::0:1428:57ab
2001:0DB8::1428:57ab
특수 주소 공간
::/128 - 이 주소는 모든 값을 0으로 설정한 특수한 주소이다. 가상적으로만 사용된다. IP 미설정 상태의 발신 주소이다..
::1/128 - 자기 자신의 주소를 가리키는 루프백 주소이다. 프로그램에서 이 주소로 패킷을 전송하면 네트워크는 전송자에게로 패킷을 반송한다. IPv4의 127.0.0.1 주소와 동일하다.
::/96 - IPv4 호환 주소를 위해 사용되는 주소공간이다.
::ffff:0:0/96 - IPv4 매핑 주소를 위해 사용되는 주소공간이다.
fc00::/7 - IPv6 유니캐스트를 위한 주소공간이다.
fe80::/10 - link-local address를 위한 주소공간이다. IPv4의 자동 설정 IP 주소인 169.254.x.x 에 해당한다.
fec0::/10 - site-local address를 위한 주소공간이다. 네트워크 내부에서만 유효한 주소이며, 2004년 10월 RFC3879에서 폐기되어 더 이상 사용되지 않는다.
ff00::/8 - IPv6 멀티캐스트를 위한 주소공간이다. IPv4의 브로드캐스트는 더 이상 지원되지 않으며, IPv6에서는 대신 멀티캐스트를 사용해야 한다.
네트워크주소와 호스트주소
IP 주소는 네트워크 주소와 호스트 주소 두 부분으로 나뉘게 됩니다. 네트워크 주소는 호스트(단말)들을 모은 네트워크를 지칭하는 주소를 뜻합니다. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 합니다. 호스트 주소는 하나의 네트워크 내에 존재하는 호스트(단말)를 구분하기 위한 주소를 뜻합니다. 그런데 IP 주소에서 네트워크 주소와 호스트 주소를 구분하는 경계점이 고정되어있지 않습니다. 그렇다보니 필요한 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있도록 클래스 라는 개념을 도입했는데요. 클래스는 A, B, C, D, E 클래스가 존재하며 각각의 클래스에 할당되는 IP 주소 갯수와 역할이 다릅니다. A 클래스 -> 네트워크.호스트.호스트.호스트 B 클래스 -> 네트워크.네트워크.호스트.호스트 C 클래스 -> 네트워크.네트워크.네트워크.호스트 A 클래스 -> 1~127.0.0.0 (로컬호스트) B 클래스 -> 128~191.0.0.0 C 클래스 -> 192~223.0.0.0 D 클래스 -> 224~239.0.0.0 중요한 점은 클래스 기반으로는 사용하지 않는다는 점이다. 클래스 기반보다 네트워크 주소를 세밀하게 분할하고 할당하기 위해서 네트워크 크기에 맞춰 1비트 단위로 네트워크를 상세히 분할하는 방법을 사용하는데요. 클래스 개념 자체를 버리는 클래스리스(Classless) 기반의 주소 체계를 사용합니다.
클래스 리스
클래스리스에서는 구분자가 필요한데 이를 서브넷 마스크(Subnet Mask)라고 합니다. 넷 마스크는 IP주소를 네트워크 포션 / 호스트 포션으로 나누는데 사용되는 숫자 조합입니다. 서브넷 마스크는 IP 주소와 같은 길이의 비트로 구성되며, 이진수(Binary)로 표현했을 때 네트워크 포션은 1로, 호스트 포션은 0으로 설정됩니다.
즉, 가령 210.100.100.1의 서브넷 마스크가 255.255.255.0이라면,
255.255.255.0은 1111 1111. 1111 1111. 1111 1111. 0000 0000과 같습니다.
여기서 1인 부분은 네트워크를, 0인 부분은 해당 네트워크 내에 속해있는 호스트를 나타내므로 IP주소와 서브넷 마스크를 논리적 AND 연산 결과 값이 바로 서브넷이 됩니다. 하나의 주소를 서브넷 마스크를 씌워서 작은 네트워크로 만드는 것을 서브넷팅(Subnetting)이라고 합니다.
210.100.100.1 = 1101 0010. 0110 0100. 0110 0100. 0000 0001 = IP주소
255.255.255.0 = 1111 1111. 1111 1111. 1111 1111. 0000 0000 = 서브넷 마스크
210.100.100.0 = 1101 0010. 0110 0100. 0110 0100. 0000 0000 = 서브넷 (AND 연산 결과)
이러면 호스트와 네트워크의 경계를 알 수 있다.
출처: medium.com 출처: tistory.com
표기법
일반적인 표기법으로는 CIDR 표기법이 사용되며, IP 주소 뒤에 슬래시와 비트 수를 숫자로 표기합니다. 예를 들어, 192.168.0.0/24와 같이 나타낼 수 있으며, 이 표기법에서 192.168.0.0은 네트워크 ID를 의미하고, /24는 서브넷 마스크의 길이를 나타냅니다. 24비트 서브넷 마스크는 첫 24비트가 네트워크 ID이고 나머지 8비트가 호스트 ID임을 의미합니다.
따라서 192.168.0.0/24는 192.168.0.0부터 192.168.0.255 까지의 IP 주소 범위를 나타냅니다. 여기서 네트워크 ID와 브로드캐스트 주소를 제외하고 실제로 호스트에 할당할 수 있는 IP 주소의 범위는 192.168.0.1 ~ 192.168.0.254가 됩니다.
본론
그래서 ip/32, ip/24는 무엇인가? IP 주소의 범위를 표현하기 위한 방식이다. 이진수 몇 자리까지 고정값으로 두는지에 대한 정의다.
| Subnet | Subnet Mask (Dec) | Host 수 |
|---|---|---|
| /8 | 255.0.0.0 | 16,777,216 |
| /9 | 255.128.0.0 | 8,388,608 |
| /10 | 255.192.0.0 | 4,194,304 |
| /11 | 255.224.0.0 | 2,097,152 |
| /12 | 255.240.0.0 | 1,048,576 |
| /13 | 255.248.0.0 | 524,288 |
| /14 | 255.252.0.0 | 262,144 |
| /15 | 255.254.0.0 | 131,072 |
| /16 | 255.255.0.0 | 65,536 |
| /17 | 255.255.128.0 | 32,768 |
| /18 | 255.255.192.0 | 16,384 |
| /19 | 255.255.224.0 | 8,192 |
| /20 | 255.255.240.0 | 4,096 |
| /21 | 255.255.248.0 | 2,048 |
| /22 | 255.255.252.0 | 1,024 |
| /23 | 255.255.254.0 | 512 |
| /24 | 255.255.255.0 | 256 |
| /25 | 255.255.255.128 | 128 |
| /26 | 255.255.255.192 | 64 |
| /27 | 255.255.255.224 | 32 |
| /28 | 255.255.255.240 | 16 |
| /29 | 255.255.255.248 | 8 |
| /30 | 255.255.255.252 | 4 |
| /31 | 255.255.255.254 | 2 |
| /32 | 255.255.255.255 | 1 |