![[네트워크] IP 주소 체계, 클래스와 CIDR 표기법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV8uDl%2FbtsKNqrPqET%2F1qkbX27Z4kkDrWvUhsgNL0%2Fimg.png)
이전 게시글에서 IP와 관련한 내용을 톺아보았습니다.
[네트워크] IP(Internet Protocol)와 관련된 것들 톺아보기
목표OSI 7 계층에서, 3 계층인 Network 계층의 대표적인 프로토콜, IP(Internet Protocol)에 대해서 톺아보겠습니다.전체적인 구조와 흐름을 복습할 예정입니다. 개요통신을 위해서는 많은 절차와 작업이
chanos.tistory.com
이번 게시글에서는 IP 주소 체계에 대해서 정리해 볼 텐데요.
보통 IP 주소라고 하면 192.168.10.2와 같은 32비트 형식을 생각하는데요. 알게 모르게 192.168.10.2/32와 같은 형식도 많이 접했을 것입니다.
처음엔 조금 낯설지만 익숙해지면 어떤 네트워크에 속한 주소인지 한눈에 알 수 있습니다. 특수 목적을 가진 IP인지도 바로 알 수 있습니다.
어쩌다가 이런 형태를 띄게 되었는지, 어떠한 장점이 있는지 시간의 흐름대로 확인해 보도록 하겠습니다.
기존 IPv4 운영 방식과 문제점
🔹 클래스 방식
과거 1980년 대에는 IP 주소를 클래스 방식으로 구분하여 할당했습니다.
이 때는 인터넷 초기이므로 표준화된 방식이 필요했고, 네트워크 크기를 기준으로 클래스로 구분하는 방식으로 운영했습니다.
네트워크 크기라는 것을 이해하기 위해서는 네트워크와 호스트라는 개념을 알고 있어야 합니다.
다음은 설명을 위해 A 클래스 주소 형식을 그림으로 나타낸 것입니다.
8비트까지는 네트워크고, 8번째 비트부터 32 비트까지는 호스트를 의미한다고 표현하고 있습니다. 이해를 위해 1.2.3.4라는 IP가 있다고 가정하겠습니다.
각 10진수 숫자 하나 당 8비트를 차지하기 때문에, 1은 네트워크를 나타내고, 2.3.4는 호스트를 나타냅니다.
쉽게 말하면 1이라는 네트워크 안에 2.3.4번 호스트가 포함되어 있는 것입니다. 이 네트워크의 범위를 2진수로 나타내면 다음과 같습니다.
00000001.00000000.00000000.00000000(1.0.0.0) - 00000001.11111111.11111111.11111111(1.255.255.255)
즉, 8비트까지는 고정이고 8~32번까지 어떤 숫자가 들어가든 이 네트워크에 포함된다고 할 수 있습니다. (특수 목적 제외)
1.1.1.2, 1.2.3.4, 1.10.20.30, 1.123.123.123 등등 약 2^24 개의 호스트가 이 네트워크에 포함됩니다.
네트워크를 표현하는 비트 수가 많아질수록, 이 네트워크에 포함될 수 있는 호스트의 수는 적어지겠죠? 대신 더 많은 네트워크를 구성할 수 있습니다. 지금 말하려고 하는 방식은 이 범위를 조절하면서 네트워크 크기에 따라 클래스를 구분하는 것입니다.
클래스는 A부터 E까지 총 5개가 존재하며, 자세한 내용을 표로 보면 다음과 같습니다.
클래스 | 주소 범위 | 상위 비트 | 용도 | 전체 비율 | 네트워크 수 | 호스트 수 |
A | 0.0.0.0 - 127.255.255.255 | 0 | 유니캐스트/특별한 용도 | 1/2 | 128 | 16,777,216 |
B | 128.0.0.0 - 191.255.255.255 | 10 | 유니캐스트/특별한 용도 | 1/4 | 16,384 | 65,536 |
C | 192.0.0.0 - 223.255.255.255 | 110 | 유니캐스트/특별한 용도 | 1/8 | 2,097,152 | 256 |
D | 224.0.0.0 - 239.255.255.255 | 1110 | 멀티캐스트 | 1/16 | 해당 없음 | 해당 없음 |
E | 240.0.0.0 - 255.255.255.255 | 1111 | 예비용 | 1/16 | 해당 없음 | 해당 없음 |
표에서 볼 수 있듯이 주소의 범위를 할당해서 클래스를 구분하는 방식입니다. 각 범위를 구분하기 위해 상위 비트가 정해져 있습니다.
각 클래스에 포함되는 임의의 IP를 2진수로 표현해 보겠습니다.
클래스 A : 10.0.10.201 > 00001010.00000000.00001010.11001001
클래스 B : 172.16.0.10 > 10101100.00010000.00000000.00000001
클래스 C : 192.168.1.1 > 11000000.00000001.00000010.00000011
클래스 D : 224.10.2.10 > 11100000.00001010.00000010.00001010
클래스 E : 240.10.20.2 > 11110000.00001010.00010100.00000010
각 클래스에 맞는 상위 비트를 갖고 있는 것을 볼 수 있습니다. 그래서 상위 비트 4개만 보면 어떤 클래스인지 알 수 있지요.
클래스마다 범위가 지정되어 있으니 익숙해진다면 IP를 보고 어느 클래스인지 감을 바로 잡을 수 있습니다.
일반적으로 사용되는 통신에 사용되는 클래스는 A, B, C 클래스입니다.
3개의 클래스 중에 네트워크 규모에 따라 적절한 클래스를 할당하는 방식으로 운영됩니다. 각 클래스마다 상세 내용을 확인해 보겠습니다.
🔸 클래스 A
네트워크와 호스트를 설명하기 위해 클래스 A인 1.2.3.4를 예시로 들었는데요. 그래서 동일한 그림을 볼 수 있습니다.
네트워크 부분이 8비트, 호스트 부분이 24비트로 구성되어 있습니다. 한 네트워크에 최대 약 1600만 개 이상의 호스트를 연결할 수 있어요.
구글과 같은 글로벌 대기업이나 국가 기관은 네트워크를 사용하는 사용자가 매우 많을 텐데요.
이렇게 대규모 네트워크를 구성해야 한다면 많은 호스트를 연결할 수 있는 클래스 A가 적합합니다. 전 세계의 수백만 개 IP 주소를 각 네트워크에 할당하는 방식입니다.
🔸 클래스 B
클래스 B는 네트워크 부분이 16비트, 호스트 부분도 16비트로 구성되어 있습니다. 한 네트워크에 약 65,536개의 호스트가 연결됩니다.
대학교를 생각해 보면, 학과/동아리/교직원 등등 상대적으로 많은 네트워크와 많은 사용자들이 존재합니다.
적당히 큰 규모의 네트워크를 구성해야 한다면, 클래스 B가 적합합니다. 이 정도 규모의 네트워크가 필요한 경우가 많아, 인기가 매우 많았습니다.
🔸 클래스 C
클래스 C는 네트워크 부분이 24비트, 호스트 부분은 8비트로 구성되어 있습니다. 한 네트워크에 연결되는 호스트는 최대 254개로 제한됩니다.
작은 조직이나 개인 네트워크와 같이 호스트가 많이 없는 소규모 네트워크를 구성할 때는 클래스 C가 적합합니다.
🔸 클래스 D, E
클래스 D, E는 특수한 목적으로 사용됩니다.
클래스 D는 멀티캐스트 용도로 사용됩니다. 즉, 특정 그룹의 장비들에 데이터를 전송할 때 사용됩니다.
전송 대상한테 일일이 보내는 게 아니라, 한 번의 전송으로 보낼 수 있기 때문에 네트워크 리소스를 절약할 수 있습니다.
스위치, 라우터 같은 장비들도 해당 대역으로 들어오면 멀티캐스트임을 알고 적절하게 처리합니다.
클래스 E는 연구 및 실험 목적으로 예약된 IP로, 일반적으로는 사용되지 않습니다.
인터넷의 발달로 더 많은 주소가 필요해질지도 모르니, 확장 가능성을 고려해서 남겨둔 주소 공간입니다.
프로토콜을 개발하거나 테스트 목적으로 사용될 수는 있으나, 일반적으로 사용되지 않습니다.
🔹 클래스 방식의 문제점
클래스 방식은 간단하고 직관적이어서 초기 인터넷 환경에서는 적합했습니다. 간단하니 장비를 개발하기도 좋고, 주소도 빠르게 할당할 수 있습니다. 예측 가능한 범위 내에서 돌아가다 보니 운영에 용이하다는 장점이 있습니다.
하지만, 인터넷은 빠르게 발전했고 네트워크/호스트 크기가 고정되어 있어서 점차 문제점이 부각되기 시작했습니다.
인터넷을 사용하는 장치가 늘어날수록, 주소가 낭비되고 유연하게 관리할 수 없다는 단점이 치명적으로 다가왔습니다.
어떠한 문제점이 있는지 하나씩 확인해 보겠습니다.
🔸 클래스 B에 대한 수요 과다
첫 번째 문제점은 수요 불균형입니다. 한정된 특정 자원에만 수요가 몰리면서 효율적으로 운영할 수가 없었습니다.
클래스 A는 너무 대규모 네트워크이고, 클래스 C는 너무 소규모 네트워크에 적합하기 때문에, 대부분 클래스 B를 선호했습니다.
대학, 연구소, 중견 기업 등등 많은 곳에서 적합하지만 제공할 수 있는 네트워크는 16,384개밖에 없습니다.
이렇듯 클래스 B의 주소 공간은 제한적이기 때문에 전 세계적으로 클래스 B의 주소 공간이 빠르게 소진되었습니다.
🔸 네트워크 리소스 낭비
모자란 클래스 B를 할당받아도, 모든 자원을 활용하는 것은 아니라는 것이 두 번째 문제점입니다.
네트워크 부분과 호스트 부분이 고정적으로 지정되어 있어서 낭비되는 주소 공간이 발생합니다.
만약, 수 천 개의 호스트만 있는 기업에서 클래스 B를 할당받으면 나머지 주소 공간은 사용되지 않습니다.
이렇게 사용되지 않는 주소들이 많이 발생하면서 주소 고갈을 더욱 빠르게 만들었습니다.
유연성도 크게 떨어뜨리는데, 클래스 C를 할당받아서 100여 개의 호스트를 운영하다가, 규모가 커지는 경우 클래스 B를 다시 할당받아야 합니다.
이렇게 고정된 크기는 확장/축소가 힘들고, 설계하는 데 있어서 유연성을 크게 제한합니다.
라우팅 측면에서도 문제가 있습니다. 라우터/스위치는 IP 주소를 바탕으로 데이터그램을 목적지로 전달해야 하는데요.
라우터/스위치와 같은 장비는 어떤 IP를 어디에 보내야 할지 라우팅 테이블에 저장하고 있습니다.
위 사진에서도 특정 인터페이스로 어떤 목적지를 가진 데이터그램이 들어오면 어디로 전달할지 나타내고 있는데요.
라우팅 테이블에서 여러 개의 선택지 중 하나를 고를 땐 Longest Prefix Matching이란 방식을 사용합니다.
짧게 설명하면 IP 주소의 앞 비트부터 가장 비슷한 선택지를 골라 해당 목적지로 전달하는 방식입니다.
클래스 방식은 네트워크 부분이 고정되어 있어서, 같은 네트워크 내에 있는 많은 경로를 모두 학습해야 합니다.
목적지로 가기 위해서 같은 네트워크에 있는 노드를 불필요하게 거쳐가는 상황도 많이 발생했습니다.
즉, 라우팅 테이블이 비효율적으로 커져서 네트워크 성능이 크게 저하되는 현상이 발생하곤 했습니다.
여러 문제점들이 겹치면서 클래스 방식은 인터넷이 발전하는데 걸림돌이 되었고, 결국 CIDR 방식으로 넘어가게 되었습니다.
CIDR의 도입
🔹 CIDR (Classless Inter-Domain Routing)
클래스의 근본적인 문제는 클래스 간 고정된 경계였습니다. 네트워크와 호스트의 크기가 고정되어 있어서 IP 주소를 비효율적으로 사용하게 됩니다.
CIDR은 서브넷 마스크를 통해 필요에 따라 네트워크와 호스트의 크기를 유연하게 조절할 수 있게 해 줍니다.
네트워크가 고정되어 있는 것이 아니라, 몇 비트까지 네트워크인지 표기해서 자유롭게 사용할 수 있습니다.
우리는 네트워크가 몇 비트인지 나타내는 것을 프리픽스(Prefix)라고 합니다.
기본적으로 CIDR은 IP 주소/프리픽스 길이로 표기합니다. 위에서 봤던 각 클래스들을 CIDR 방식으로 표기하면 다음과 같습니다.
클래스 | CIDR 표기 |
클래스 A | 0.0.0.0/8 - 127.255.255.255/8 |
클래스 B | 128.0.0.0/16 - 191.1255.255.255/16 |
클래스 C | 192.0.0.0/24 - 223.255.255.255/24 |
클래스 D | 224.0.0.0/4 |
클래스 E | 240.0.0.0/4 |
클래스 A~C를 보면 IP 주소 뒤에 /8, /16, /24라고 적혀있는데요. 위에서 봤던 네트워크 비트 수와 동일한 것을 알 수 있습니다.
즉, 프리픽스는 네트워크 비트 수를 나타내는 것입니다.
만약, 호스트가 100개 정도인 네트워크가 있다고 가정해 보겠습니다.
클래스 방식이라면 클래스 C를 할당받아서 네트워크 24비트, 호스트 8비트를 할당받았을 것입니다. 154개의 IP 주소가 사용되지 않습니다.
반대로, CIDR 방식이라면, 네트워크 25비트, 호스트 7비트만 할당해서 26개의 주소만 사용되지 않을 것입니다.
이를 IP 주소로 표기하면 X.X.X.X/25 로 표기할 수 있겠습니다.
이로서 낭비되던 네트워크 리소스와 IP 주소를 아낄 수 있게 되었습니다.
또한, 적절한 크기의 네트워크를 할당받으면서 라우팅 테이블의 크기도 줄어 라우팅 성능도 증가하게 됩니다.
한눈에 어느 네트워크 범위에 포함되는 주소인지 알 수 있어서 편리하다는 장점이 있습니다.
🔹 CIDR 활용과 계산법
CIDR을 처음 접하게 되면 다소 복잡해 보일 수 있습니다. CIDR을 활용하는 예시를 통해 익숙해지는 시간을 갖겠습니다.
CIDR은 다음 게시글에서 자세히 다룰 서브넷에서 유용하게 활용되는데요. 쉽게 말하면 네트워크를 나눠서 사용하는 것입니다.
학교에서 네트워크를 구축해야 하는데, 다음 요구사항을 충족해야 한다고 가정해 보겠습니다.
- 네트워크 할당이 필요한 학과는 3개이다.
- 각 학과는 다른 네트워크가 할당되어야 한다.
- 각 학과에 필요한 호스트는 약 300개 정도이다.
요구사항을 만족하기 위해, 학교에 큰 네트워크를 할당하고 각 학과에 서브넷을 할당해야 합니다. 이를 다이어그램으로 표현해 보겠습니다.
학교는 192.168.0.0/16 범위의 네트워크가 할당되어 있습니다. 네트워크 비트와 호스트 모두 16비트임을 알 수 있습니다.
학교가 가질 수 있는 네트워크의 범위는 다음과 같습니다.
192.168.0.0 - 192.168.255.255
학교는 갖고 있는 네트워크를 나눠서 각 학과에다가 할당해주려고 합니다.
각 학과는 약 300개의 호스트를 갖고 있으니 2^8(256)개는 모자라고, 2^9(512)개는 할당되어야 합니다.
그래서 각 학과의 네트워크는 23의 프리픽스를 갖고 9개의 호스트 비트를 갖는 것입니다.
각 학과가 가질 수 있는 네트워크의 범위는 다음과 같습니다.
컴퓨터학과(192.168.0.0/23) : 192.168.0.0 - 192.168.1.255
화학과(192.168.2.0/23) : 192.168.2.0 - 192.168.3.255
수학과(192.168.4.0/23) : 192.168.4.0 - 192.168.5.255
생명공학과(192.168.6.0/23) : 192.168.6.0 - 192.168.7.255
CIDR로 표현하니 192.168.X.X는 다 학교에 포함되는 네트워크임을 한눈에 알 수 있습니다.
이렇게 망이 구성되면 어떤 이점이 있는지 확인해 보겠습니다.
CIDR을 활용해 얻을 수 있는 이점
큰 네트워크를 학과별로 나누어서 사용하니까 낭비가 최소화됩니다.
만약 이 구조를 클래스 방식으로 했다면, 모든 학과가 클래스 B를 할당받아 많은 주소가 낭비되는 것을 예상할 수 있습니다.
또한, 각 학과의 네트워크를 독립적으로 구분해 놨기 때문에 충돌을 방지할 수 있습니다.
해당 네트워크가 아닌 요청을 차단함으로써 보안을 강화할 수 있습니다.
컴퓨터학과에서 개발용으로 운영하는 서버가 있다면, 다른 학과나 외부에서 온 요청은 차단해야 합니다.
이때, CIDR로 표기하면 더욱 간편하게 처리할 수 있습니다. 192.168.0.0/23에 포함되지 않는 주소의 요청은 차단하면 되니까요.
각 학과에 할당된 네트워크를 유연하게 조절할 수도 있습니다. 필요에 따라 학교의 네트워크를 더 할당하거나, 반대로 축소시킬 수도 있습니다.
가령 컴퓨터학과의 인기가 갑자기 많아지면, 192.168.0.0/23이 갖는 500여 개의 호스트로는 부족해질 수 있습니다.
프리픽스를 22로 조절하면 192.168.0.0 - 192.168.3.255 범위를 가지며 지원하는 호스트 수가 두 배로 늘어나게 됩니다.
물론 다른 네트워크의 상황을 함께 고려해야겠지만요.
CIDR 계산법
위에서 든 예시 중에 컴퓨터학과에서 개발용으로 서버를 구축하는 상황을 말씀드렸습니다.
외부에서 온 요청을 차단함으로써 보안을 강화할 수 있다고 말씀드렸는데요. 해당 대역에 포함되는 주소인지 어떻게 알 수 있을까요?
계산 방법을 이해하려면 서브넷 마스크(Subnet Mask)라는 개념을 알고 있어야 합니다.
서브넷 마스크는 네트워크 비트는 1, 나머지는 0으로 표현한 것을 의미합니다.
네트워크 비트는 앞에서부터 1로만 표현되고, 111101과 같이 0이 섞일 수 없습니다. 0이 나오게 되면 그 뒤로는 쭉 0이고, 이는 호스트를 의미합니다.
192.168.0.0/23의 서브넷 마스크는 다음과 같습니다.
11111111.11111111.11111110.00000000
네트워크 비트인 23번째 비트까지 1이고, 뒤로는 0으로만 구성돼있는 것을 볼 수 있습니다.
요청이 들어오면, 발신자의 주소와 서브넷 마스크를 AND 연산하여 해당 네트워크에 포함되는지 판단할 수 있습니다.
192.168.0.5에서 요청이 들어왔는데, 컴퓨터학과에 포함되는 주소인지 판단하는 과정은 다음과 같습니다.
먼저, 해당 주소를 2진수로 변환합니다.
11000000.10101000.00000000.00000101
이 주소를 서브넷 마스크와 AND 연산을 진행합니다. (둘 다 1이어야 1)
10진수 : 192.168.0.0
2진수 : 11000000.10101000.00000000.00000000
결과가 192.168.0.0이므로, 192.168.0.0/23에 포함되는 것을 알 수 있습니다. 즉, 컴퓨터학과에 포함되는 주소입니다.
또 다른 예시로 192.168.2.1에서 요청이 왔을 때, 컴퓨터학과에 포함되는 주소인지 확인해 보는 과정을 확인해 보겠습니다.
2진수 변환 : 11000000.10101000.00000010.00000001
서브넷 마스크 : 11111111.11111111.11111110.00000000
------------------------------------------------------- AND 연산
결과 : 11000000.10101000.00000010.000000
AND 연산의 결과를 10진수로 표현하면 192.168.2.0입니다.
이는 192.168.0.0/23에 포함되지 않고, 192.168.2.0/23에 포함되는 네트워크이므로, 컴퓨터학과에 포함되는 주소가 아닙니다.
위 예시는 최대한 간단하게 구성하려고 해서 굳이 계산을 하지 않아도 네트워크에 포함되는 주소인지 쉽게 알 수 있습니다.
네트워크 구성이 복잡해지면 계산이 필요한 경우도 있으니, 계산 방법을 숙지해 놓는 것이 좋습니다.
/0, /32 가 의미하는 것?
CIDR로 표기된 주소들을 보면, 0.0.0.0/0 이나 192.168.10.2/32와 같이 프리픽스가 0, 32인 경우를 자주 볼 수 있습니다.
먼저, 프리픽스가 0이면 네트워크 비트가 없는데요. 이는 모든 IPv4 주소를 의미합니다.
보통 0.0.0.0/0을 많이 사용하는데요. 특정 IP를 지정하는 것이 아니고, 모든 IP 주소를 의미하는 포괄적인 범위라고 이해하면 좋습니다.
보통 기본 경로(Default Route)로 많이 활용되는데요. 경로가 지정되지 않은 경우 0.0.0.0/0으로 취급되어 라우팅됩니다.
위에서 본 라우팅 테이블을 보시면, Default의 서브넷 마스크(Genmask)가 0.0.0.0인데요.
다음 포스팅에서 보겠지만, 이는 0.0.0.0/0을 의미합니다. OS에 따라서 Default 대신 0.0.0.0/0으로 표기되는 경우가 많습니다.
참고로, 모든 IPv4 주소를 의미한다는 것은 1.2.3.4/0이나 10.20.30.40/0이나 동일한 의미라는 것입니다.
프리픽스가 32이면 호스트 비트가 없는데요. 32비트 모드 네트워크 비트로 활용된다는 것을 의미합니다.
즉, 단일 IP 그 자체를 의미합니다. 192.168.10.2/32라는 CIDR 표기가 있으면, 192.168.10.2 만을 의미하는 것입니다.
네트워크 내에서 특정 장치(NIC 등)나 기기를 가리키는데 활용됩니다.
🔸 CIDR의 단점
CIDR은 클래스 방식의 단순하고 직관적이라는 장점을 포기하고, 효율성과 성능을 챙기는 방식입니다.
자유도가 올라간 만큼, 네트워크 관리자가 설정을 잘못하면 오히려 비효율적이고 성능도 떨어지게 됩니다.
만약, 관리자가 두 개의 네트워크를 관리한다고 가정해 보겠습니다.
하나는 192.168.1.0/24, 또 다른 하나는 192.168.1.128/25로 설정하면, 192.168.1.128~255까지 겹치게 됩니다.
이는 정상적인 통신을 방해하게 되며, 트래픽이 잘못된 경로로 전달되거나, IP 주소가 충돌할 수 있습니다.
또는 라우팅 테이블에서 CIDR을 잘못 설정한다면, 트래픽이 아예 전달되지 않거나 비효율적으로 돌아서 전달될 수 있습니다
특수한 목적의 IPv4
일부 IP 주소는 특수한 목적을 갖고 사용됩니다. 특정 클래스, CIDR에 포함된다고 해서 똑같이 사용되는 게 아니라는 것이지요.
프로그래밍 언어에서 int와 같이 예약된 단어를 변수명으로 못 쓰는 것처럼, 특정 주소는 임의로 사용할 수 없습니다.
많은 분들이 알고 계실 127.0.0.1이 대표적인데요. 로컬에 띄운 웹서버와 통신할 때 많이 사용하셨을 것이라고 생각됩니다.
이런 주소들을 특수 목적 IP 주소(Special Purpose IP Addr) 혹은 예약된 IP 주소(Reserved IP Addr)이라고 합니다.
이번 문단에서는 이러한 주소들을 정리해 보도록 하겠습니다.
사설 IP 주소 (Private IP Address)
사설 IP도 다음 게시글에서 정리할 내용 중 하나인데요. LAN에서만 유효한 IP를 사설(Private) IP라고 합니다.
다른 LAN에서도 동일한 주소를 사용하고 있고, 이게 외부망(Public Network)으로 나오게 되면 충돌될 가능성이 있어 사용하지 않습니다.
각 클래스 별로 내부에서 사용하는 Private IP 대역은 다음과 같습니다.
클래스 | CIDR | 범위 |
클래스 A | 10.0.0.0/8 | 10.255.255.255 |
클래스 B | 172.16.0.0/12 | 172.16.0.0 - 172.31.255.255 |
클래스 C | 192.168.0.0/16 | 192.168.0.0 - 192.168.255.255 |
이 주소들은 자주 보실 수 있을 텐데요.
위 CIDR 예시에서도 클래스 C에 포함되는 Private IP로 예시를 들었고, 보통 공유기에서 와이파이 연결하면 Private IP를 할당받습니다.
저도 네트워크 설정에서 확인해 보니 클래스 B에 포함되는 Private IP에 연결되어 있는데요.
https://whatismyipaddress.com/ 와 같은 서비스에서 확인하는 IP랑은 다른 것을 볼 수 있습니다.
실제 외부랑 통신할 땐 NAT(Network Address Translate)를 통해 Public IP로 변환되어 나가기 때문입니다.
루프백 주소
루프백 주소는 자기 자신을 가리키는 IP 주소를 의미합니다. 보통 127.0.0.1로 알고 계시는데요, 실제 범위는 다음과 같습니다.
127.0.0.0/8 (127.0.0.0 - 127.255.255.255)
애플리케이션에서 로컬 통신을 하거나, 네트워크 인터페이스를 테스트할 때 사용됩니다.
Ubuntu와 같은 일부 리눅스에서 인터페이스 설정을 보면 lo라고 표현되는데 Loopback에서 앞 두 글자를 딴 것입니다.
멀티 캐스트와 브로드 캐스트 주소
멀티 캐스트는 특정 그룹에 속한 장치에 데이터를 전송하기 위해 사용됩니다. 네트워크 상의 여러 호스트에 데이터를 효율적으로 보낼 수 있습니다.
위에서 보신 것처럼 클래스 D에 해당하며, 범위는 다음과 같습니다.
224.0.0.0/4 (224.0.0.0 - 239.255.255.255)
또한, 브로드캐스트는 네트워크 내에 모든 장치에 패킷을 전송하는 것을 의미합니다.
대표적으로 ARP 프로토콜이나 DHCP 동작 과정에서 사용되곤 합니다. 특정 주소를 모를 때 모두에게 보내보는 것이지요.
브로드캐스트 용도로 사용되는 주소는 네트워크의 마지막 주소입니다. (IPv6는 조금 다릅니다)
브로드캐스트나 멀티캐스트는 잘못 사용하면 트래픽이 과도하게 늘어날 수 있어서 주의가 필요합니다.
인터넷 게이트웨이 주소
Default Gateway는 네트워크 내에서 다른 네트워크로 트래픽이 나갈 때 경로를 지정하는 장치입니다. 대표적으로 라우터가 있는데요.
일반적으로 Default Gateway는 네트워크 범위의 첫 주소를 사용합니다. 모든 네트워크가 그런 것은 아니지만, 많은 네트워크가 그렇습니다.
일부 네트워크는 마지막 IP 주소(Ex. 192.168.1.254)를 Default Gateway로 설정하기도 합니다.
다시 말하면, Default Gateway로 설정된 네트워크는 예약된 IP이므로 임의로 사용할 수 없습니다.
링크-로컬 주소
링크-로컬 주소(Link-Local Address)는 브로드 캐스트 도메인 내 통신에서만 유효합니다.
즉, LAN에서 통신할 때만 유효한 주소라는 것인데요.
Static IP가 할당되어 있지도 않고, DHCP 서버도 못 찾으면 자신의 IP를 할당하기 위해서 사용합니다.
범위는 다음과 같습니다.
169.254.0.0/16 (169.254.0.0 - 169.254.255.255)
이 주소들은 ARP Request로 LAN 내에 충돌되는 IP가 있는지 확인하고 임시로 사용하는 주소입니다.
브로드캐스트 도메인 내부 통신만 유효하니, Private IP처럼 외부와 통신은 불가능한 주소입니다.
그 외
이 외에도 여러 개가 있는데요. 환경에 따라서 조금씩은 상이합니다.
운영체제가 Windows라면 DHCP가 동작하지 않을 때 APIPA(Automatic Private Addressing)을 활용한다고 말씀드렸는데요.
이때 사용되는 주소가 169.254.0.0/16입니다.
또한, 위에서 언급했던 연구 및 실험 목적으로 예약된 240.0.0/4 나 특정한 의미를 갖는 0.0.0.0도 있겠습니다.
정리
IPv4 주소 체계를 중심으로 과거 클래스 방식에서 CIDR로 넘어오는 과정을 살펴보았습니다.
비효율적인 IP 관리 문제를 해결을 목적으로 네트워크를 편하게 관리할 수 있게 되었습니다.
하지만 컴퓨터, 핸드폰, IoT 장비의 증가로 인해 IPv4는 여전히 부족한 상황입니다. 이에 IPv6가 나왔지만 여전히 IPv4를 많이 쓰고 있습니다.
IPv6를 호환하는 장비 보급 문제 등 현실적으로 어려운 문제들이 많기 때문인데요.
이를 해결하기 위해 서브넷, NAT 등 다양한 기술들이 사용되고 있습니다. 이를 다음 포스팅에서 정리해 보도록 하겠습니다.
출처: TCP/IP Illustrated Volume 2
'Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] IP(Internet Protocol)와 관련된 것들 톺아보기 (0) | 2023.09.16 |
---|