정확한 이해는 아니지만, ip 주소 체계에 대해서 이해할 수 있는 글입니다.
정확한 이해는 darrengwon.tistory.com/1308 를 참고해주세요
# IPv4, IPv6
IPv4는 32비트 (보통 8비트[1byte]로 쪼갠다)를 사용하므로 255.255.255.255가 끝이고, 결국 256^4 = 2^32 개의 유니크한 주소만 가질 수 있다.
IPv4의 주소가 부족해짐에 따라 도입된 IPv6의 경우 128(16 * 8)비트이라서 고갈을 걱정할 염려가 없다.
현재는 IPv4, 6을 혼용해서 사용하고 있고, 대개 IPv4가 이용되고 있으므로 이를 기준으로 설명해보자.
# ip class와 네트워크 ID / 호스트 ID
ip class : 하나의 IP주소에서 네트워크 영역(네트워크 ID)과 호스트 영역(호스트 ID)을 나누는 방법이자, 약속이다.
ip에서 네트워크 부분과 호스트 부분을 구별하여 알기 위해서는 ip 클래스의 개념을 알아야 한다.
예를 들면, A 클래스에 속하는 ip인 172.30.1.12에서 네트워크 주소는 172.30이고 호스트 주손 1.12이다.
네트워크 주소는 당연히 겹칠 수 있지만 해당 네트워크 내부에서 호스트 주소를 유일하다.
A~E 클래스가 존재하지만 보통 A~C 클래스까지만 알아두면 된다.
IPv4 주소 하의 ip class 일부를 살펴보면 다음과 같다.
간단히 식별하기 위한 팁으론, A는 0으로 시작하며, B는 10으로 시작하고, C는 110으로 시작한다.
네트워크 부분 호스트 부분
[A] : 0xxx xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx : 0.0.0.0 ~ 127.255.255.255
* A 클래스에서의 네트워크 주소는 1.0.0.0 ~ 126.0.0.0 까지로 규정되어 있다.
* 참고로 127.0.0.1 은 로컬호스트다.
* xxxx xxxx. xxxx xxxx. xxxx xxxx이 호스트 주소에 해당한다.
* 125.35.2.3 를 예시로 들면 네트워크 ID는 125, 호스트 주소는 35.2.3이 된다.
* 따라서, 사용 가능한 호스트 주소는 (뒤에 세 바이트 부분이므로 2^8^3 = 2^24) 개를 가질 수 있게 된다. 더 정확히는 브로드캐스트로 사용하는 모든 호스트 주소가 1인 부분과 네트워크 주소로 사용하는 모두 0인 부분을 제거해야 해서 2^24 - 2개가 된다.
[B] : 10xx xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx : 128.0.0.0 ~ 191.255.255.255
* xxxx xxxx. xxxx xxxx이 호스트 주소에 해당한다.
* 178.35.26.8이라면, 네트워크 ID는 178.35, 호스트 주소는 26.8이 된다.
* 사용 가능한 호스트 주소는 뒤에 두 바이트 부분이므로 2^8^2 = 2^16개에 네트워크, 브로드캐스트를 2개를 제외한 2^16 - 2개가 된다.
[C] : 110x xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx : 192.0.0.0 ~ 223.255.255.255
* xxxx xxxx이 호스트 주소에 해당한다.
* 사용 가능한 호스트 주소는 2^8 - 2개가 된다.
생각해보면, 일반 가정집에 A 클래스의 ip를 할당받는다면 엄청난 낭비가 될 것이다.
한 네트워크 당 2^24 - 2개의 호스트를 할당할 수 있는데 기껏해야 10개 남짓한 호스트만 사용하고 나머지는 낭비한다는 말이 될테니 말이다.
이러한 문제를 해결하기 위해서 ip를 사용하는 네트워크 장치들의 수에 따라 효율적으로 ip를 사용할 수 있기 위한 개념인 Subnet이 등장하게 된다.
# (Sub)Netmask와 서브넷 마스크의 비트 수 => 호스트 쪼개기
* 서브넷을 만들기 위해서 서브넷마스크가 쓰이며, 고정 ip 비트 갯수가 서브넷마스크의 비트 수이다.
* 넷마스크랑 서브넷마스크는 본래 다른 것이지만 요새는 CIDR 블럭 개념 이후부터 서브넷 마스크만 사용하고 있기 때문에 두 용어를 혼용해서 사용 중이라고 한다.
참고)
클래스 C의 ip를 할당 받았다고 해보자. 195.4.25.* 꼴이라고 가정하자.
그렇다면 2^8 -2 개 만큼의 호스트를 할당할 수 있게 되는데 이게 개인 용으로는 조금 많은편 이어서 이를 분할할 필요가 생겼다.
그래서 호스트 주소를 0nnnn. nnnn. 과 1nnnn. nnnn.으로 나눠서 사용하기로 하였다. (즉, 반절로 나눠서 사용하기로 하였다)
이런 분리된 부분망을 '서브넷'이라고 한다.
그렇다면 1100 0011. 0000 0100. 0001 1001. 0nnnn nnnn 꼴로 사용하게 될텐데, n부분을 제외한 25 비트가 고정된 셈이다. 이를 '서브넷마스크가 25다', 좀 더 정확히는 '서브넷마스크의 bit수가 25다'라고 표현할 수 있다. 보통 ip/25 꼴로 ip 뒤에 적어준다.
기본적으로, A 클래스는 넷마스크가 8, B 클래스는 16, C 클래스는 24이다.
이는 당연한 것으로, 각 클래스 별 네트워크 ID 부분은 변경할 수 없이 고정된 것이기 때문이다.
여튼, 우리는 넷마스크를 통해 어떤 클래스건 쪼개서 사용할 수 있음을 알게 되었다.
좀 더 정확히는 이렇게 기존 아이피의 할당 가능한 호스팅을 분할하는 것을 '서브네팅'이라고 한다.
네트워크를 분리한 하는 행위를 '서브네팅', 합치는 행위를 '슈퍼네팅'이라고 부른다.
서브네팅 : 넷마스크를 활용하여 호스트 주소를 네트워크 주소로 변환함
슈퍼네팅 : 넷마스크를 활용하여 네트워크 주소를 호스트 주소로 변환함
앞서 서브넷마스크의 bit수를 살펴보았는데, 서브넷 마스크를 구하는 방법은
"ip 주소의 네트워크 주소 부분의 비트를 1로 치환한 것"이다.
예를 들어보자 203.0.113.43 이라는 C 클래스의 ip의 네트워크 주소는 203.0.113이다.
이를 비트로 표현한 후 네트워크 부분을 전부 1로 바꿔주고 호스트 부분을 0으로 두면 넷마스크가 나온다.
쉽게 말해 그냥 네트워크 ID부분을 255로 치환하면 된다는 것이다.
예시)
ip : 1100 1011. 0000 0000. 0111 0001. 0010 1011.
NetMask : 1111 1111. 1111 1111. 1111 1111. 0000 0000.
즉, 203.0.113.43 ip의 넷마스크는 255.255.255.0 이다.
* ip주소와 비슷하지 않은가? 비슷하게 생긴 이유는 ip 주소와 넷마스크를 AND 연산하여 네트워크 주소를 얻기 위함이다.
이 치환 방법을 잘 생각해보면, ip의 클래스에 따라 넷마스크가 정해진다는 것을 추측할 수 있다.
왜냐면, 네트워크 ID 부분을 어차피 전부 1로 바꾸는 것이기에 같은 클래스라면 같은 넷마스크를 가질 것이라고 예측할 수 있기 때문이다. 클래스 별로 생기는 넷마스크는 아래와 같다.
서브넷 마스크의 특징으로는 다음과 같은 것들이 있다.
- IP 주소에는 반드시 서브넷 마스크가 있다. => 너무 당연함
- 서브넷 마스크는 기본적으로 255와 0으로 이루어져 있다. => 호스트 부부은 0이고, 나머진 다 1이니까...
- 여기서 255는 네트워크 부분이며 0은 호스트 부분이 된다.
- 255로 된 부분은 무시하시고 0으로 된 부분에서 IP를 나눠쓰는 혹은 IP를 쪼개는 개념이다.
추가적으로, 서브넷 마스크 비트에 따른 서브넷 마스크 값을 표로 정리해둔 것은 아래와 같다.
귀찮을 때 찾아보자.
# 네트워크 주소, 브로드캐스트 주소
서브네팅의 과정을 알기 전에 네트워크 주소와 브로드캐스트 주소를 알아야 한다.
* 네트워크 주소
해당 네트워크의 첫번째 IP주소. IP주소와 서브넷마스크의 AND 연산으로 알 수 있다.
넷마스크는 네트워크 주소를 얻기 위한 것이라고 보아도 무방하다.
예시) c class 203.0.113.43 ip의 넷마스크는 255.255.255.0 이다.
c class ip : 1100 1011. 0000 0000. 0111 0001. 0010 1011.
NetMask : 1111 1111. 1111 1111. 1111 1111. 0000 0000.
----------------------------------------------------------------------------
네트워크 주소 : 1100 1011. 0000 0000. 0111 0001. 0000 0000.
decimal로 변환하면 203.0.113.0와 같다.
여기서 뭔가 이상한 것을 눈치채지 않았는가?
원 ip인 203.0.113.43 은 c 클래스이기 때문에 203.0.113.* 영역 만큼 호스트가 가능한데 이 영역중 가장 첫부분에 해당한다.
맞다. 네트워크 주소는 해당 네트워크의 맨 첫번째 IP이다.
* 브로드캐스트 주소
브로드캐스트(broadcast)는 말 그대로 '방송'이다.
특정 네트워크에 속하는 모든 호스트들에게 데이터를 보내기 위해서 모든 호스트들이 갖게 되는 주소이다.
모든 호스트들에게 정보를 보내므로 '방송'이라는 은유가 적절한 것 같다.
네트워크 주소와 반대로, 해당 네트워크의 맨 마지막 IP이다.
앞서 봤던 203.0.113.43 주소의 브로드캐스트 주소는 203.0.113.225인 셈이다.
# 그래서 서브네팅은 어떻게 되나
쉽게 설명하기 위해 아래와 같은 가정을 가지고 가자.
우리는 c class 203.0.113.43 주소를 사용 중이며 따라서, 서브넷마스크는 255.255.255.0 이다.
네트워크 주소는 203.0.113.0, 브로드캐스트 주소는 203.0.113.255가 된다.
c class는 이론적으로 2^8 - 2개 만큼의 호스트를 가질 수 있지만 이를 2개로 나누는 서브네팅을 진행한다고 가정해보자.
서브넷마스트의 비트수가 그렇다면 25가 되게 된다.
결과적으로 아래와 같이 된다.
203.0.113.0/25
- 별도의 서브넷 마스크, 네트워크 주소, 브로드캐스트 주소가 생김
203.0.113.128/25
- 별도의 서브넷 마스크, 네트워크 주소, 브로드캐스트 주소가 생김
'🌐 Network > 🌐 Network' 카테고리의 다른 글
인캡슐레이션과 디캡슐레이션, MSS와 MTU (0) | 2021.03.08 |
---|---|
OSI 7계층에 대한 이해 (0) | 2021.03.08 |
3 tier 구성에서 Web Server와 WAS의 차이는 무엇인가? (0) | 2021.02.01 |
Forward Proxy vs Reverse Proxy (0) | 2021.02.01 |
스트리밍 서비스(온 디맨드, 라이브)에 대한 이해 (0) | 2021.01.28 |