IP 주소는 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트 폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유한 주소이다.
IP는 Internet Protocol을 의미한다. OSI 7계층 중 3계층인 네트워크 계층에서는 IP 프로토콜을 사용한다.
그리고 이 프로토콜에서 IP주소를 사용하여 호스트와 네트워크 장비를 식별한다.
IP관리 기관은 IP주소 체계 발전에 따라 여러 기관을 거쳐왔다.
클래스풀(Classful) 네트워크 시절에는 NIC(Network Information Center),
클래스리스(Classless) 네트워크 시절에는 IANA(Internet Assigned Numbers Authority, 인터넷 할당 번호 관리 기구)가 있었다. 최종적으로는 국제적인 관리 체제를 위해 DNS와 IP주소 할당을 모두 관리하는 ICANN(Internet Corporation for Assigned Names and Numbers, 국제 인터넷 주소 관리 기구)로 관리기구가 변경되었다.
ICANN에서는 전 세계 인터넷 주소의 구조를 정하고 아시아태평양 네트워크 정보센터(APNIC, Asia Pacific NIC)와 같은 각 지역별 네트워크 정보센터(NIC, Netwoprk Information Center)에 세부 주소 할당 방안을 위임한다. 그리고 이 지역별 네트워크정보센터는 각 국가별 네트워크정보센터들로 구성되어 있다. 우리나라는 한국인터넷정보센터(KRNIC, Korea NIC)가 IP 주소를 할당하고 관리하고 있다.
가장 널리 사용되는 IP 주소 버전으로, 보통 IP 주소라고 하면 IPv4를 의미한다. 32bit, 즉 0 또는 1만 사용하여 표기하는 2진수 32자리로 구성되어 있다.
다음과 같이 전체 32bit를 8bit씩 4개의 그룹으로 나누어 .
으로 구분하고, 알아보기 어려운 2진수를 10진수로 변환하면 IPv4 주소 표기가 완성된다. 여기서 8bit로 구분된 구간을 옥텟(Octet)이라고 부른다.
8bit를 10진수로 변환하면 0~255 사이의 값을 갖게된다. 따라서 다음 그림과 같이 각 옥텟 별로 0~255의 범위를 갖게 되고, 이를 종합하면 0.0.0.0 ~ 255.255.255.255
로,
총 2의 32승인 약 43억(4,294,967,596)개의 IP 주소를 사용할 수 있다.
IPv4의 주소를 128bit 크기로 확장한 차세대 인터넷 프로토콜 주소이다. 다음과 같이 128bit를 16비트씩 8그룹으로 나누고 :
(콜론)으로 구분한다. 2진수를 16진수로 변환한다. 표기 시 0은 생략하여 쓸 수 있다.
0
블록(0000
)은 하나의 ::
로 대체될 수 있다.0
블록을 ::
로 대체하였다.0DB8
블록의 선행하는 0
을 생략하여 DB8
로 변경되었다.이 두가지를 종합하여 최종적으로 다음과 같이 생략할 수 있다.
2001:0DB8:AC10:FE01:0000:0000:0000:0000 -> 2001:DB8:AC10:FE01::
128 비트로 표현할 수 있는 2의 128승인 약 340간 개(340,282,366,920,938,463,463,374,607,431,768,211,456개...)의 주소를 갖고 있어 고갈의 위험이 거의 없다.
하지만 기존의 주소 체계를 변경하는 데 비용이 많이 들어 아직 상용화되지는 않고 있다.
IP 주소는 네트워크 ID와 호스트 ID로 구성된다.
여기서 네트워크 ID는 하나의 LAN(Local Area Network)을 나타낸다. 어떤 네트워크 인지를 나타내 다른 네트워크와 구분하는 역할을 하고, 호스트 ID는 해당 네트워크의 어느 호스트인지를 나타내 네트워크 내의 다른 호스트와 구분하는 역할을 한다. 정리하자면 다음과 같다.
인터넷에 접속 가능한 네트워크를 만들기 위해 IP 주소 할당을 신청하면 할당 기관에서는 네트워크 ID까지만 할당한다. 네트워크 ID를 할당받으면 네트워크 관리자가 호스트 ID를 결정하여 네트워크 ID와 호스트 ID를 합친 IP 주소를 개별 호스트에 설정하는 것이다.
그런데 IP 주소에서 어디까지가 네트워크 ID이고, 어디까지가 호스트 ID일까?
이를 구분하기 위해 클래스를 기준으로 네트워크와 호스트를 나누는 방식이 도입되었다.
클래스로 주소를 나눈다고 하여 Classful이라고 한다.
IP 주소를 A, B, C, D, E의 다섯 가지 클래스로 나누어 관리하는 초기 인터넷의 주소 할당 방식이다.
실질적으로 A, B, C 클래스가 사용되고 D, E는 특수 목적 클래스이다.
네트워크와 호스트의 크기에 따라 클래스가 달라진다.
또한 호스트 ID의 모든 bit가 0
이거나 1
인 번호는 각각 네트워크 주소와 브로드 캐스트 주소로 사용하기 때문에 항상 총 갯수에서 2개를 제외해주어야 한다.
각 클래스는 고정된 네트워크 부분과 호스트 부분을 가지므로 비교적 간단하게 구할 수 있다.
네트워크 부분을 제외한 모든 호스트 bit를 0
으로 설정하면 네트워크 주소가 되고,
네트워크 부분을 제외한 모든 호스트 bit를 1
로 설정하면 브로드캐스트 주소가 된다.
예를들어 B 클래스에 속하는 IP 주소 150.100.5.25
의 네트워크 주소와 브로드캐스트 주소는 아래와 같다.
B 클래스는 처음 두 개의 옥텟이 네트워크 부분이다.
1. 네트워크 주소 : 150.100.0.0
2. 브로드캐스트 주소 : 150.100.255.255
네트워크 주소는 컴퓨터가 자신의 IP 주소를 아직 알지 못할 때, 네트워크 설정이나 초기화를 할 때 사용된다. 일반적으로 시스템이 네트워크에 연결되기 전 임시로 사용하는 IP 주소이고 인터넷에서 사용되지 않는다.
0
으로 시작한다.1.0.0.0
~ 126.0.0.0
)0.0.0.0
은 네트워크 주소로 예약되어 있어 제외된다.127.0.0.1
은 루프백 주소로 예약되어 있어 제외된다. (localhost 라고도 불린다.)10
으로 시작한다.128.0.0.0
~ 191.255.0.0
)110
으로 시작한다.192.0.0.0
~ 223.255.255.0
)1110
으로 시작한다.224.0.0.0
~ 239.255.255.255
범위를 가진다.1111
으로 시작한다.240.0.0.0
~ 255.255.255.255
범위를 가진다.이렇게 클래스를 나누어 IP 주소를 할당하는 것은 전세계적으로 확장되어가는 네트워크의 갯수를 따라가지 못했다.
수많은 기업들이 각자의 네트워크를 형성하면서 대부분의 기업들의 사원 수를 만족하는 B클래스를 많이 사용하기 시작했다. 사원이 300명이어도, 1000명이어도, 10000명이어도 A클래스를 사용하기엔 너무 많고, C클래스를 사용하기엔 부족해 선택지가 B클래스밖에는 없었던 것이다.
이에 따라 IP 주소 낭비가 많이 발생했고 이를 해결하기 위해 정해진 클래스 없이 사용하자는 의미의 Classless IP 주소 체계가 등장했다.
클래스 없이 IP 주소를 보다 효율적으로 사용할 수 있도록 하는 IP 주소 할당 방법이다.
서브넷 마스크를 사용한 서브네팅과 슈퍼네팅을 통해 IP 주소의 낭비를 줄인다.
서브넷 마스크는 IP 주소 내에서 네트워크 부분과 호스트 부분을 구분하는 데 사용되는 32bit 숫자이다.
IP 주소와 함께 사용되어 네트워크 ID와 호스트 ID를 식별한다.
IP 주소와 같은 형식이지만 다른 점은 서브넷 마스크는 연속된 1과 연속된 0으로 구성되어있다는 것이다.
다음 그림과 같이 네트워크 부분은 bit가 1
로 표시되고, 호스트 부분은 0
으로 표시된다.
이런 방법으로 8bit 단위로만 네트워크를 나웠던 클래스 방식에 구애받지 않고 1bit 단위로 네트워크 부분을 식별할 수 있어 더 세분화된 네트워크를 만들 수 있다.
다음과 같이 32bit 서브넷 마스크를 10진수로 표기하여 IP 주소와 함께 사용할 수 있다.
CIDR 표기법이라고도 한다. 다음과 같이 네트워크 부분의 bit 수를 /
와 같이 IP 주소 뒤에 표기하면 된다. 10진수 표기보다 간단하고 직관적이다.
prefix값이 커질수록 서브넷은 더 작아지고 사용가능한 호스트 수는 감소한다.
반대로 작아질수록 서브넷은 커지고 사용가능한 호스트 수가 증가한다.
➡️ IP 주소 계산기 에서 prefix에 따른 IP 주소 정보를 알 수 있다.
고정된 네트워크 부분과 호스트 부분을 가지는 Classful IP 주소와 달리
Classless IP 주소는 서브넷 마스크에 따라 네트워크 부분과 호스트 부분이 달라진다.
주어진 IP 주소는 다음과 같다.
IP 주소 : 192.168.10.0/23
bit로 변환 시 : 11000000.10101000.00001010.00000000
서브넷 마스크 : 255.255.254.0
bit로 변환 시 : 11111111.11111111.11111110.00000000
다음과 같이 서브넷 마스크를 사용한 AND, OR 연산을 통해 구할 수 있다.
네트워크 주소 : 다음과 같이 IP 주소와 서브넷 마스크의 각 bit를 AND 연산(두 bit 모두 1일때만 1 반환)한다.
따라서 네트워크 주소는 192.168.10.0
이 된다.
11000000.10101000.00001010.00000000 (IP 주소)
AND
11111111.11111111.11111110.00000000 (서브넷 마스크)
-----------------------------------
11000000.10101000.00001010.00000000 = 192.168.10.0
브로드캐스트 주소 : 네트워크 주소와 서브넷 마스크의 반대인 와일드카드의 각 bit를 OR 연산(bit가 하나라도 1이면 1반환)한다. 따라서 브로드캐스트 주소는 192.168.11.255
가 된다.
11000000.10101000.00001010.00000000 (네트워크 주소)
OR
00000000.00000000.00000001.11111111 (와일드카드)
-----------------------------------
11000000.10101000.00001011.11111111 = 192.168.11.255
와일드카드는 서브넷 마스크와는 반대 개념으로,
1
과0
이 반전된 bit 패턴을 가진다.
주로 ACL(Access Control List)에서 특정 IP 주소 범위에 대한 규칙을 정의할 때 사용된다.
인터넷이 급속도로 성장하면서 그에 따라 IP주소의 수요도 급증하게 되었고, 43억개의 주소로는 감당이 되지 않았다. 이러한 문제에 대응하기 위해서 사설 IP 주소를 사용하게 되었다.
사설 IP 주소는 일반적으로 IP 주소 관리 기관에서 발급받는 공인 IP 주소와는 달리, 한 네트워크 안에서만 내부적으로 사용되는 IP 주소 이다.
예를 들어, 공유기를 사용한 인터넷 환경에서 공유기까지는 공인 IP 주소를 할당하지만 공유기에 연결되어 있는 기기에는 각각 사설 IP 주소를 할당한다. 사설 IP 주소는 이 네트워크 안에서만 고유하므로 각 네트워크들은 같은 IP 주소를 사용할 수 있고, 이는 IP 주소의 절약으로 이어진다.
이러한 주소 범위들은 인터넷 상에서는 사용되지 않으며, 주로 가정, 사무실, 학교 등의 내부 네트워크에서 사용된다.
사설 IP 주소는 다음과 같이 지정된 범위의 IP 주소를 사용해야 한다.
10.0.0.0
~ 10.255.255.255
(10.0.0.0/8
)172.16.0.0
~ 172.31.255.255
(172.16.0.0/12
)192.168.0.0
~ 192.168.255.255
(192.168.0.0/16
)IPv6에서 사설 IP 주소는 유니크 로컬 주소(Unique Local Addresses, ULA)라고 불린다.
ULA의 범위는 다음과 같다.
FC00::/7
: 첫 7bit가 1111 110
인 IPv6 주소들을 포함한다. 이는 FC00::/8
과 FD00::/8
이렇게 두 개의 서브넷으로 나뉜다. FC00::/8
: 첫 8bit가 1111 1100
인 IPv6 주소들을 포함한다. 현재까지 특별한 사용 방식이나 정책이 정해지지 않아 실제 네트워크에서 거의 사용되지 않는다.FD00::/8
: 첫 8bit가 1111 1101
인 IPv6 주소들을 포함한다. 실제 네트워크에서 ULA로 가장 널리 사용된다. 주소의 나머지 부분은 일반적으로 랜덤하게 생성되어 전 세계적으로 유니크한 ULA를 만든다. 하나의 네트워크를 좀 더 작은 네트워크로 분할하는 것을 서브네팅이라고 하고, 그 분할된 네트워크를 서브넷이라고 한다. 서브네팅을 통해서 네트워크를 좀 더 작은 네트워크로 분할하여 IP 주소를 효율적으로 사용할 수 있다.
네트워크를 나눈 서브넷의 수는 2의 거듭제곱으로 제한된다.
서브넷을 나눌 때 네트워크 부분에 할당되는 bit 수(네트워크 부분의 길이)가 서브넷의 가능한 수를 결정하기 때문이다.
예를 들어, 네트워크 부가 24bit이고, 호스트 부가 8bit인 192.168.1.0/24
네트워크의 bit 할당에 따른 서브넷 수와 호스트 수는 다음과 같다.
이 중 192.168.1.0/24
네트워크를 4등분하는 서브네팅을 좀 더 살펴보자.
네트워크를 4등분으로 나누기 위해 호스트 부에서 bit를 2개 가져와 네트워크 부에 할당한다. 이로써 서브넷 마스크가
11111111.11111111.11111111.00000000 (255.255.255.0) 에서
11111111.11111111.11111111.11000000 (255.255.255.192) 로 변경되면서 (네트워크 부가 변경)
총 4개의 서브넷이 생성된다.
또한 호스트 부가 8bit 에서 6bit로 줄어 각 서브넷 당 64(2^6)개의 호스트를 가지게 된다.
그리고 이렇게 나뉜 서브넷의 각 범위는 서브넷 구분비트를 통해 구분한다.
서브넷 구분비트는 원래 IP 주소의 호스트 부분에서 서브네팅 시 네트워크에 할당한 bit 수만큼 할당한다.
다음과 같이 서브넷 구분비트가 할당된다.
원래 주소의 호스트 부분인 4번째 옥텟 : 11000000.10101000.00000001.00000000
네트워크에 할당한 bit 수 : 2개일 때,
다음과 같이 원래 주소의 호스트 부분의 앞 2자리를 서브넷 구분비트로 할당한다.
11000000.10101000.00000001.00000000
이 서브넷 구분비트가 가지는 조합은 00, 01, 10, 11 로 총 4개로 구분되어질 수 있고,
이를 적용해보면 다음과 같이 각 64개의 호스트 부 범위가 나온다.
서브넷 1 호스트 : 00000000 ~ 00111111 (0 ~ 63)
서브넷 2 호스트 : 01000000 ~ 01111111 (64 ~ 127)
서브넷 3 호스트 : 10000000 ~ 10111111 (128 ~ 191)
서브넷 4 호스트 : 11000000 ~ 11111111 (192 ~ 255)
이로써 각 서브넷은 64개의 호스트를 가지게 되는데,
여기서 가장 첫번째 주소인 네트워크 주소와 가장 마지막 주소인 브로드캐스트 주소를 제외해주어야 해서
결과적으로 각 서브넷은 64-2인 62개의 호스트를 갖게된다.
이 과정을 통해 나뉜 서브넷은 다음과 같다.
서브넷 1 192.168.1.0/26
네트워크 주소: 192.168.1.0
브로드캐스트 주소: 192.168.1.63
사용 가능한 호스트 주소 범위: 192.168.1.1
~ 192.168.1.62
서브넷 2 192.168.1.64/26
네트워크 주소: 192.168.1.64
브로드캐스트 주소: 192.168.1.127
사용 가능한 호스트 주소 범위: 192.168.1.65
~ 192.168.1.126
서브넷 3 192.168.1.128/26
네트워크 주소: 192.168.1.128
브로드캐스트 주소: 192.168.1.191
사용 가능한 호스트 주소 범위: 192.168.1.129
~ 192.168.1.190
서브넷 4 192.168.1.192/26
네트워크 주소: 192.168.1.192
브로드캐스트 주소: 192.168.1.255
사용 가능한 호스트 주소 범위: 192.168.1.193
~ 192.168.1.254
서브네팅이 네트워크를 분할하는 것이었다면, 슈퍼네팅은 반대로 네트워크를 합치는 것이다.
이에 따라 여러 경로를 하나의 경로로 요약하여 라우팅 테이블에 등록되는 경로 수를 줄이고 라우팅 프로세스의 효율성을 향상시킬 수 있다.
효과적인 슈퍼네팅을 위해서는 다음 규칙을 따라야한다.
201.1.0.0
, 201.1.1.0
, 201.1.2.0
, 201.1.3.0
)201.1.0.0
, 201.1.1.0
, 201.1.2.0
, 201.1.3.0
)를 슈퍼네팅할 경우 전체 슈퍼넷 블록은 256*4 인 1024개의 호스트를 수용할 수 있는 크기를 가지게 된다.201.1.0.0
)는 전체 슈퍼넷 블록 크기인 1024(2^10)로 나누어 떨어져야 한다. 이를 확인하기 위해서는 201.1.0.0
를 이진수로 변환하고, 마지막 10bit가 0인지 확인하면 된다.201.1.0.0
= 11001001.00000001.00000000.00000000위 규칙을 만족하는 2개의 C클래스 규모 네트워크 192.168.0.0/24
, 192.168.1.0/24
를 슈퍼네팅 해보자.
먼저 두 네트워크 주소를 이진수로 표현하고, 공통된 bit 수를 확인한다.
192.168.0.0
→ 11000000 . 10101000 . 00000000 . 00000000
192.168.1.0
→ 11000000 . 10101000 . 00000001 . 00000000
공통된 bit가 23개임을 확인할 수 있다. 네트워크 부분이 이와 같이 변경됨에 따라 서브넷 마스크는 다음과 같이 /24
에서 /23
으로 변경된다.
전 : 11111111 . 11111111 . 11111111 . 00000000 (255.255.255.0, /24)
후 : 11111111 . 11111111 . 11111110 . 00000000 (255.255.254.0, /23)
이 과정을 통해 슈퍼네팅된 네트워크는 다음과 같다.
192.168.0.0/23
192.168.0.0
192.168.1.255
192.168.0.1
~ 192.168.1.254
https://better-together.tistory.com/118
https://yozm.wishket.com/magazine/detail/2108/
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-IP-%EA%B8%B0%EC%B4%88-%EC%82%AC%EC%84%A4IP-%EA%B3%B5%EC%9D%B8IP-NAT-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A7%90-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC
https://aws.amazon.com/ko/what-is/cidr/
https://www.scaler.com/topics/supernetting/