PromleeBlog
sitemap
aboutMe

posting thumbnail
IP 주소와 서브넷 마스크 - 코딩과 함께 배우는 네트워크 3일차
IP Address and Subnet Mask - Learning Network with Coding Day 3

📅

🚀

들어가기 전에 🔗

지난 시간에는 OSI 7계층과 TCP/IP 모델이라는 네트워크의 큰 그림을 살펴보았습니다.
오늘은 그 그림 속에서 각 컴퓨터나 장비가 서로를 어떻게 찾아가는지에 대한 이야기, 바로
IP 주소
서브넷 마스크
에 대해 알아보겠습니다.

🚀

IP 주소란 무엇일까요? 🔗

IP 주소(Internet Protocol Address)는 인터넷에 연결된 모든 장치(컴퓨터, 스마트폰, 서버 등)를 식별하기 위해 부여되는 고유한 번호입니다.
우리가 편지를 보낼 때 받는 사람의 집 주소를 적는 것처럼, 데이터를 주고받을 때도 데이터를 받을 장비의 IP 주소를 알아야 합니다.
IP 주소는 OSI 7계층 중 3계층인 네트워크 계층에서 사용되며, 데이터가 올바른 목적지로 전달되도록 하는 핵심적인 역할을 합니다.
IP 주소의 역할
IP 주소의 역할

🚀

IPv4 주소: 32비트의 고전적인 주소 체계 🔗

우리가 흔히 IP 주소라고 말할 때는 주로 IPv4(Internet Protocol version 4)를 의미합니다.
IPv4 주소는 32비트(bit) 길이로 이루어져 있으며, 보통 8비트씩 네 부분으로 나누어 각 부분을 0부터 255까지의 십진수로 표현하고 점(.)으로 구분합니다.
32비트로는 약 43억(2^32) 개의 고유한 주소를 만들 수 있습니다.
처음 인터넷이 만들어질 때는 충분하다고 생각했지만, 인터넷 사용이 폭발적으로 늘어나면서 스마트폰, 태블릿, IoT 기기 등 인터넷에 연결되는 장치가 매우 많아졌습니다.
👨‍💻
결국, IPv4 주소는 점점 부족해지는 상황에 이르렀습니다.

🚀

IPv6 주소: 무한대의 주소 공간 🔗

IPv4 주소 고갈 문제를 해결하기 위해 등장한 것이 바로 IPv6(Internet Protocol version 6)입니다.
IPv6 주소는 128비트 길이로 이루어져 있어, IPv4에 비해 훨씬 더 많은 수의 고유한 주소를 만들 수 있습니다.
👍
2^128개는 거의 무한대에 가깝다고 할 수 있을 만큼 어마어마하게 큰 숫자입니다.

IPv6 주소는 16비트씩 여덟 부분으로 나누어 각 부분을 네 자리의 16진수로 표현하고 콜론(:)으로 구분합니다.
IPv6는 주소 공간 확장 외에도 보안 기능 강화, 주소 자동 설정 등의 장점을 가지고 있습니다.
현재는 IPv4와 IPv6가 함께 사용되고 있으며, 점차 IPv6로 전환되고 있는 과정입니다.

🚀

서브넷 마스크: 네트워크와 호스트를 구분 🔗

IP 주소는 단순히 하나의 숫자가 아니라, 그 안에
네트워크 부분(Network ID)
호스트 부분(Host ID)
으로 나뉘어 있습니다.
네트워크 부분은 어떤 네트워크에 속해 있는지를 나타내고, 호스트 부분은 그 네트워크 안에서 특정 장비를 가리킵니다.

이때, IP 주소의 어디까지가 네트워크 부분이고 어디부터가 호스트 부분인지를 알려주는 것이 바로
서브넷 마스크(Subnet Mask)
입니다.
서브넷 마스크도 IP 주소처럼 32비트(IPv4 기준)로 되어 있으며, 네트워크 부분은 1로, 호스트 부분은 0으로 채워져 표현됩니다.
위 예시에서 서브넷 마스크 255.255.255.0을 이진수로 바꾸면 11111111.11111111.11111111.00000000이 됩니다.
이것은 IP 주소의 앞 24비트(세 덩어리)가 네트워크 부분이고, 뒤 8비트(마지막 한 덩어리)가 호스트 부분임을 의미합니다.
즉, 192.168.1 까지가 네트워크를 나타내고, .100 이 그 네트워크 안의 특정 장비를 가리키는 것입니다.

🚀

CIDR 표기법: 서브넷 마스크를 간결하게 🔗

서브넷 마스크를 255.255.255.0처럼 길게 쓰는 대신, 더 간결하게 표현하는 방법이 바로
CIDR(Classless Inter-Domain Routing)
표기법입니다.
CIDR 표기법은 IP 주소 뒤에 슬래시(/)를 붙이고, 그 뒤에 네트워크 부분의 비트 수를 적는 방식입니다.
위 예시에서 /24는 서브넷 마스크의 앞 24비트가 1이라는 뜻이고, 이는 255.255.255.0과 동일한 의미입니다.
CIDR 표기법은 IP 주소 할당과 라우팅을 더 유연하고 효율적으로 관리할 수 있게 해줍니다.

🚀

네트워크 주소와 브로드캐스트 주소 🔗

하나의 네트워크 범위(서브넷) 안에는 두 가지 특별한 IP 주소가 존재합니다.
바로
네트워크 주소
브로드캐스트 주소
입니다.
이 두 주소는 일반적인 컴퓨터나 장비에 할당하여 사용할 수 없습니다.

간단한 계산 예시 (Python) 🔗

IP 주소와 서브넷 마스크를 알면 네트워크 주소와 브로드캐스트 주소를 계산할 수 있습니다. Python 코드로 간단히 비트 연산을 통해 네트워크 주소를 구하는 예를 살펴봅시다.
ip_address_str = "192.168.1.100"
subnet_mask_str = "255.255.255.0"
 
def ip_to_int_list(ip_str):
  return [int(octet) for octet in ip_str.split('.')]
 
def int_list_to_ip_str(ip_list):
  return ".".join(map(str, ip_list))
 
ip_parts = ip_to_int_list(ip_address_str)
mask_parts = ip_to_int_list(subnet_mask_str)
 
network_address_parts = []
for i in range(4):
  network_address_parts.append(ip_parts[i] & mask_parts[i])
 
network_address_str = int_list_to_ip_str(network_address_parts)
print(f"IP 주소: {ip_address_str}")
print(f"서브넷 마스크: {subnet_mask_str}")
print(f"네트워크 주소: {network_address_str}")
실행결과
IP 주소: 192.168.1.100
서브넷 마스크: 255.255.255.0
네트워크 주소: 192.168.1.0
위 코드는 각 옥텟을 정수로 변환한 뒤, IP 주소의 각 부분과 서브넷 마스크의 각 부분을 비트 AND 연산(&)하여 네트워크 주소를 계산합니다.
브로드캐스트 주소는 네트워크 주소에서 호스트 ID 부분을 모두 1로 채워서 만들 수 있습니다.
IP 주소, 서브넷 마스크, 네트워크 주소, 브로드캐스트 주소의 관계
IP 주소, 서브넷 마스크, 네트워크 주소, 브로드캐스트 주소의 관계

🚀

결론 🔗

오늘은 인터넷 세상의 집 주소와 같은 IP 주소(IPv4와 IPv6), 그리고 그 주소에서 어느 동네인지 알려주는 서브넷 마스크에 대해 배웠습니다.
또한, 서브넷 마스크를 간결하게 표현하는 CIDR 표기법과, 네트워크의 시작과 끝을 알리는 특별한 주소인 네트워크 주소 및 브로드캐스트 주소의 개념도 살펴보았습니다.

이러한 주소 체계를 이해하는 것은 우리가 만든 프로그램이 어떻게 다른 컴퓨터와 정확하게 통신하는지 파악하는 데 매우 중요합니다.
다음 시간에는 우리 로컬 네트워크 안에서 장치들이 서로를 찾는 데 사용되는 MAC 주소와 ARP 프로토콜에 대해 알아보겠습니다.

참고 🔗