운영체제의 임주 중 하나는 한정된 물리 메모리(RAM)라는 작업 공간을 여러 프로세스에게 효율적으로 나누어주는 것입니다. 폰 노이만 구조에 따라 모든 프로그램은 실행되기 위해 반드시 메모리에 적재되어야 하며, 공간을 관리하는 것이 시스템 전체 성능을 결정합니다.

 

 운영체제가 물리 메모리를 관리하는 다양한 전략과 기법, 이 과정에서 발생하는 문제점과 해결책에 대하여 작성했습니다.

주소 변환 :  논리 주소에서 물리 주소

프로세스는 자신만의 독립적인 메모리 공간을 가진 것처럼 동작합니다. 이때 프로세스가 사용하는 주소를 논리 주소(Logical Address)라고 하며, 이는 항상 0번지부터 시작하는 상대적인 주소 체계입니다. 그러나, 실제 RAM에 부여된 고유한 주소를 물리 주소(Physical Address)라고 합니다.

운영체제는 메모리 관리 유닛(MMU)이라는 하드웨어의 도움을 받아 논리 주소를 물리 주소로 실시간 변환합니다. MMU는 재배치 레지스터(Relocation Register)에 저장된 프로세스의 실제 시작 주소(기준 주소)를 논리 주소에 더하여 물리 주소를 계산합니다.

물리 주소 = 논리 주소 + 재배치 레지스터 값

위와 같은 주소 변환 메커니즘으로 프로세스는 메모리의 어느 위치에 적재되더라도 문제없이 실행될 수 있습니다.

메모리 할당 기법 : 연속 할당과 분산 할당

운영체제가 프로세스를 메모리에 배치하는 방식은 두 가지로 나뉩니다.

연속 할당 방식

프로세스를 하나의 연속된 덩어리로 메모리에 할당하는 방식입니다. 초기 운영체제에서 사용되던 단순한 방법이며, 고정 분할과 가변 분할 방식으로 나뉩니다.

  • 고정 분할 (Fixed Partitioning) : 메모리를 미리 정해진 고정된 크기의 여러 구획(파티션)으로 나누어 관리합니다. 구현은 간단하지만, 할당된 파티션보다 작은 프로세스가 들어올 경우 남는 공간이 낭비되는 내부 단편화(Internal Fragmentation)가 발생합니다.
  • 가변 분할 (Variable Partitioning) : 프로세스의 크기에 맞춰 메모리를 동적으로 할당합니다. 내부 단편화는 없지만, 프로세스가 종료되고 떠난 자리가 작은 조각들로 남아 사용하기 어려운 외부 단편화(External Fragmentation)가 발생하는 문제가 있습니다.

분산 할당 방식 (불연속 할당)

프로세스를 여러 개의 작은 조각으로 나누어 메모리의 비어있는 공간에 분산하여 할당하는 현대적인 방식입니다. 페이징(Paging)과 세그멘테이션(Segmentation)이 대표적인 기법이며, '가상 메모리' 개념의 기초가 됩니다.

외부 단편화 문제와 해결책

가변 분할 방식의 고질적인 문제인 외부 단편화를 해결하기 위해 운영체제는 다음과 같은 전략을 사용합니다.

메모리 배치 전략 (Placement Strategy)

새로운 프로세스를 어느 빈 공간에 배치할지를 결정하는 알고리즘입니다.

  • 최초 적합 (First-Fit) : 메모리를 처음부터 순서대로 탐색하여, 프로세스를 담을 수 있는 첫 번째 빈 공간에 할당합니다. 가장 빠르고 간단합니다.
  • 최적 적합 (Best-Fit) : 모든 빈 공간을 탐색하여 프로세스 크기와 가장 잘 맞는(가장 작은) 공간에 할당합니다. 공간 효율은 좋지만 작은 크기의 단편화를 남길 수 있습니다.
  • 최악 적합 (Worst-Fit) : 모든 빈 공간 중 가장 큰 공간에 할당합니다. 남은 공간이 커서 다른 프로세스가 사용하기 좋은 장점이 있습니다.

조각 모음 (Defragmentation) 또는 압축 (Compaction)

흩어져 있는 작은 빈 공간들을 하나로 합쳐 큰 가용 공간을 만드는 작업입니다. 이를 위해서 메모리에 있는 프로세스들을 재배치해야 하므로 시스템에 부하를 줄 수 있습니다.

메모리보다 큰 프로그램 실행 : 오버레이와 스와핑

메모리 오버레이 (Memory Overlay)

물리 메모리 크기보다 큰 프로그램을 실행하기 위한 초기 기법입니다. 프로그래머가 직접 프로그램을 여러 모듈로 분할하여, 실행에 꼭 필요한 부분만 메모리에 올려놓고 필요에 따라 교체하는 방식입니다.

스와핑 (Swapping)

메모리가 부족할 때, 현재 사용되지 않는 프로세스를 통째로 스왑 영역(Swap Area)이라는 디스크의 특정 공간으로 내보내고(Swap-out), 필요할 때 다시 메모리로 불러오는(Swap-in) 기법입니다. 운영체제에 의해 자동으로 관리되는 가상 메모리 시스템의 핵심 요소입니다.

 

정리

물리 메모리 관리는 한정된 자원을 최대한 효율적으로 사용하며 각 프로세스의 독립된 공간을 안전하게 보호하는 두 개의 목표 사이에서 균형을 잡는 작업입니다. 초기의 연속 할당 방식에서 발생하는 단편화 문제를 해결하기 위해 등장한 페이징과 세그멘테이션 같은 분산 할당 기법은 현대 운영체제의 근간을 이루고 있습니다.

728x90

'운영체제' 카테고리의 다른 글

교착 상태(Deadlock)  (1) 2025.10.13
프로세스 동기화와 임계 구역 문제  (0) 2025.10.11
CPU 스케줄링  (0) 2025.10.02
컴퓨터 하드웨어와 성능의 이해  (0) 2025.09.20
프로세스와 스레드  (0) 2025.09.19

여러 프로세스가 동시에 자원을 공유하며 작동하는 다중 프로그래밍 환경에서는 문제가 발생할 수 있습니다. 교착 상태(Deadlock)는 그 중 치명적인 문제입니다. 이는 둘 이상의 프로세스가 서로가 점유한 자원을 무한정 기다리먀 모든 작업이 중단되는 것입니다. 

교착 상태의 발생 이유와 원인, 이를 해결하기 위한 운영체제의 전략들에 대하여 작성하였습니다.

교착 상태 발생의 4가지 필수 조건

교착 상태는 우연히 발생하는 것이 아닌 다음의 네 가지 조건이 충족될 때 발생합니다. 따라서 이 중 하나라도 제거하면 교착 상태를 막을 수 있습니다.

  1. 상호 배제(Mutual Exclusion) : 하나의 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 합니다. (예: 프린터)
  2. 점유와 대기(Hold and Wait) : 프로세스가 최소 하나의 자원을 점유한 상태에서 다른 프로세스가 점유한 자원을 추가로 요청하며 기다려야 합니다.
  3. 비선점(Non-preemption) : 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없으며, 자원은 오직 점유한 프로세스가 스스로 놓을 때만 해제됩니다.
  4. 원형 대기(Circular Wait) : 자원을 기다리는 프로세스들이 원형의 사슬 형태로 연결되어, 서로가 가진 자원을 기다리는 꼬리물기 상태가 형성되어야 합니다.

교착 상태와 기아 상태의 차이

교착 상태는 종종 **기아 상태(Starvation)**와 혼동되지만, 둘은 다른 개념입니다. 기아 상태는 특정 프로세스가 우선순위 등에서 계속 밀려 자원을 할당받지 못하고 영원히 기다리는 상태를 의미합니다. 교착 상태는 여러 프로세스가 서로 맞물려 시스템 전체가 멈추는 반면, 기아 상태는 다른 프로세스들은 정상 작동하지만 특정 프로세스만 소외되는 상황입니다.

교착 상태 해결을 위한 4가지 전략

운영체제는 교착 상태를 다루기 위하여 아래의 네 가지 접근법을 사용합니다.

예방 (Prevention)

가장 강력한 방법으로, 교착 상태 발생의 4가지 필요조건 중 하나를 원천적으로 제거하는 방식입니다. 예를 들어, 모든 자원에 고유 번호를 부여하고 오름차순으로만 자원을 요청하도록 강제하여 '원형 대기'를 막을 수 있습니다. 하지만 이 방법은 시스템의 자원 활용률과 효율성을 심각하게 떨어뜨릴 수 있어 현실적으로 적용하기 어렵습니다.

회피 (Avoidance)

교착 상태가 발생할 가능성을 인정하되, 자원을 할당할 때마다 시스템이 항상 안전 상태(Safe State)를 유지하도록 하는 지능적인 방법입니다. 안전 상태란, 모든 프로세스를 교착 상태 없이 정상적으로 종료시킬 수 있는 순서가 존재하는 상태를 의미합니다.

대표적인 회피 알고리즘으로 은행원 알고리즘(Banker's Algorithm)이 있습니다. 이 알고리즘은 각 프로세스의 최대 자원 요구량을 미리 파악한 뒤, 자원 요청이 들어올 때마다 해당 요청을 수락해도 시스템이 안전 상태를 유지할 수 있는지 검사하여 할당 여부를 결정합니다. 하지만 최대 자원 요구량을 예측하기 어렵고 계산이 복잡하다는 단점이 있습니다.

탐지 및 회복 (Detection & Recovery)

교착 상태 발생을 허용하되, 운영체제가 주기적으로 자원 할당 그래프 등을 통해 교착 상태를 탐지하고, 발견되면 이를 해결하는 사후 처리 방식입니다. 회복 단계에서는 교착 상태에 빠진 프로세스 중 일부를 강제 종료하거나, 할당된 자원을 강제로 빼앗아(선점하여) 교착 상태의 고리를 끊습니다.

무시 (Ignorance)

교착 상태는 매우 드물게 발생한다고 가정하고, 이를 처리하는 데 드는 비용(성능 저하)이 더 크다고 판단하여 아무런 조치도 하지 않는 방식입니다. 문제가 발생하면 시스템이 멈추거나, 사용자가 직접 문제가 되는 프로세스를 종료하는 것에 의존합니다. Windows, UNIX 등 대부분의 범용 운영체제가 성능상의 이유로 이 실용적인 방식을 채택하고 있습니다.


정리

교착 상태를 해결하기 위한 완벽한 단일 해법은 존재하지 않습니다. 각 전략은 시스템의 성능과 안정성, 구현 복잡성 사이에서 서로 다른 장단점을 가집니다. 운영체제는 시스템의 목적과 환경에 따라 가장 적절한 전략을 선택하며 이는 결국 효율성과 안정성 사이의 균형점을 찾는 과정이며, 교착 상태에 대한이해는 안정적이고 효율적인 시스템을 설계하는 데 도움이 됩니다.

 

 

728x90

'운영체제' 카테고리의 다른 글

물리 메모리  (0) 2025.10.15
프로세스 동기화와 임계 구역 문제  (0) 2025.10.11
CPU 스케줄링  (0) 2025.10.02
컴퓨터 하드웨어와 성능의 이해  (0) 2025.09.20
프로세스와 스레드  (0) 2025.09.19

운영체제에서는 여러 프로세스가 동시에 실행되며 자원을 공유하고 협력합하지만 여러 프로세스가 하나의 공유 자원에 무질서하게 접근하면 데이터가 손상되거나 예측 불가능한 결과가 발생할 수 있습니다.

프로세스 동기화(Process Synchronization)는 혼란을 방지하고 협력하는 프로세스들이 정해진 순서와 규칙에 따라 공유 자원에 안전하게 접근하도록 조율하는 모든 메커니즘을 의미합니다. 동기화의 필요성과 임계 구역, 그리고 해결책인 세마포어와 모니터에 대하여 작성한 글 입니다.

경쟁 상태와 임계 구역

둘 이상의 프로세스가 공유 자원(변수, 파일, 메모리 등)에 동시에 접근하여 조작할 때, 접근 순서에 따라 실행 결과가 달라지는 현상을 경쟁 상태(Race Condition)라고 합니다. 예를 들어, 두 프로세스가 은행 계좌 잔액을 동시에 읽어와 각자 입금 처리를 한다면, 최종 잔액이 정상적으로 계산되지 않는 문제가 발생할 수 있습니다. 이는 데이터의 일관성을 파괴하는 심각한 오류로 이어집니다.

이러한 경쟁 상태를 유발할 수 있는, 즉 공유 자원에 접근하는 코드 영역을 임계 구역(Critical Section)이라고 합니다. 프로세스 동기화의 핵심 목표는 이 임계 구역에 한 번에 단 하나의 프로세스만 진입하도록 보장하는 것입니다.

임계 구역 문제 해결을 위한 3가지 조건

임계 구역 문제를 해결하기 위한 알고리즘은 반드시 다음 세 가지 조건을 만족해야 합니다.

 

상호 배제(Mutual Exclusion) 원칙 : 어떤 프로세스가 임계 구역을 실행 중이라면, 다른 어떤 프로세스도 해당 임계 구역에 진입할 수 없어야 합니다.

 

진행(Progress) 조건 : 임계 구역이 비어있고, 진입을 원하는 프로세스가 있다면 반드시 어느 하나는 들어갈 수 있도록 허용되어야 합니다.

한정된 대기 (Bounded Waiting) 조건 : 특정 프로세스가 임계 구역에 진입하기 위해 무한정 기다리는 상황이 발생해서는 안 됩니다.

세마포어와 모니터

복잡한 임계 구역 문제를 프로그래머가 매번 직접 해결하는 것은 어렵고 오류 발생 가능성이 높습니다. 이를 위해 운영체제와 프로그래밍 언어는 다음과 같은 고수준의 동기화 도구를 제공합니다.

세마포어 (Semaphore)

세마포어는 다익스트라가 제안한 동기화 도구로, 현재 사용 가능한 자원의 개수를 나타내는 정수 변수(S)와 두 개의 원자적 연산, P()와 V()로 구성됩니다. P() 연산은 임계 구역 진입 전 자원을 획득하려는 시도(잠금)이며, V() 연산은 임계 구역 작업 후 자원을 반납하는 행위(잠금 해제 및 신호)입니다. 만약 자원이 없다면, P() 연산을 시도한 프로세스는 자원이 생길 때까지 대기 상태에 들어갑니다.

모니터 (Monitor)

모니터는 세마포어보다 더 고수준의 동기화 추상화 도구입니다. 프로그래머가 P(), V() 연산을 직접 호출하며 발생할 수 있는 실수를 방지하기 위해 고안되었습니다. 모니터는 공유 자원과 해당 자원에 접근하는 함수들을 하나의 캡슐로 묶고, 한 번에 단 하나의 프로세스만 모니터 내부에 진입할 수 있도록 언어 차원에서 보장합니다. 프로그래머는 공유 자원에 접근하기 위해 모니터가 제공하는 인터페이스를 호출하기만 하면 되므로, 동기화 로직이 훨씬 간결하고 안전해집니다.

프로세스 간 통신 (IPC) 기법

동기화는 프로세스들이 데이터를 주고받는 통신 과정에서도 중요하게 작용합니다. 대표적인 프로세스 간 통신(IPC, Inter-Process Communication) 기법은 아래와 같습니다.

  • 파이프 (Pipe) : 운영체제가 제공하는 단방향 통신 채널로, 주로 fork()로 생성된 부모-자식 프로세스 간 통신에 사용됩니다. 양방향 통신을 위해서는 두 개의 파이프가 필요합니다.
  • 공유 메모리 (Shared Memory): 여러 프로세스가 접근할 수 있는 공통의 메모리 공간을 생성하여 통신하는 방식입니다. 데이터 복사가 필요 없어 매우 빠르지만, 동기화 문제를 프로그래머가 직접 해결해야 합니다.
  • 소켓 (Socket): 네트워크로 연결된 서로 다른 컴퓨터에 있는 프로세스 간의 양방향 통신을 위한 표준 인터페이스입니다.

정리

프로세스 동기화는 병렬 컴퓨팅 환경에서 데이터의 무결성을 지키고 시스템의 안정성을 보장하기 위하여 필수적입니다. 경쟁 상태와 임계 구역의 개념을 이해하고, 세마포어나 모니터와 같은 동기화 도구를 올바르게 사용하는 것은 신뢰할 수 있는 멀티스레드/멀티프로세스 프로그램을 개발하는 데 있어 중요합니다.

728x90

'운영체제' 카테고리의 다른 글

물리 메모리  (0) 2025.10.15
교착 상태(Deadlock)  (1) 2025.10.13
CPU 스케줄링  (0) 2025.10.02
컴퓨터 하드웨어와 성능의 이해  (0) 2025.09.20
프로세스와 스레드  (0) 2025.09.19

다중 프로그래밍 시스템에서 운영체제의 가장 중요한 역할 중 하나는 한정된 CPU 자원을 여러 프로세스에 효율적으로 배분하는 것입니다. "어떤 프로세스에게, 언제, 얼마만큼의 CPU를 할당할 것인가?"를 결정하는 것을 CPU 스케줄링이라고 합니다.
CPU 스케줄링의 핵심 개념과 대표적인 알고리즘들을 분석하고, 각 방식의 장단점을 비교하여 시스템 성능에 어떤 영향을 미치는가에 대한 글 입니다.


CPU 스케줄링의 핵심 개념

  • CPU Scheduling : 준비 상태의 프로세스 중 하나를 선택하여 CPU를 할당하는 단기(Low-level) 스케줄링 작업입니다.
  • Preemptive Scheduling(선점형) : 운영체제가 현재 실행 중인 프로세스를 강제로 중단시키고 다른 프로세스에게 CPU를 할당할 수 있는 방식이며 현대 운영체제의 기본 동작 방식입니다.
  • Non-preemptive Scheduling(비선점형) : 한 프로세스가 CPU를 점유하면, 해당 작업이 완료될 때까지 다른 프로세스가 개입할 수 없는 방식입니다.
  • Starvation(기아 현상) : 특정 프로세스가 계속해서 CPU를 할당받지 못하고 무한히 대기하는 현상입니다.
  • Aging(에이징) : 기아 현상을 방지하기 위하여 대기 시간이 길어진 프로세스의 우선순위를 점진적으로 높여주는 기법입니다.

스케줄링 알고리즘 성능 평가 지표

알고리즘의 성능은 다음과 같은 지표를 통해 평가되며, 좋은 알고리즘은 이 시간들을 최소화하는 것을 목표로 합니다.

  • Waiting Time(대기 시간) : 프로세스가 CPU를 할당받기 위해 준비 큐에서 기다린 총 시간입니다.
  • Response Time(응답 시간) : 작업 요청 후 첫 번째 반응이 나타나기까지 걸린 시간입니다.
  • Turnaround Time(반환 시간) : 프로세스가 시스템에 제출된 순간부터 완료될 때까지 걸린 총 시간으로, 대기 시간 + 실행 시간으로 계산됩니다.

주요 스케줄링 알고리즘 분석

비선점형 알고리즘

  1. FCFS(First-Come, First-Served) : 가장 단순한 방법으로 준비 큐에 도착한 순서대로 처리합니다. 그러나, 실행 시간이 긴 프로세스가 먼저 도착하면 뒤따르는 짧은 프로세스들의 대기 시간이 길어지는 '콘보이 효과'가 발생할 수 있습니다.
  2. SJF(Shortest Job First) : 실행 시간이 가장 짧은 프로세스를 먼저 처리하여 시스템의 평균 대기 시간을 최소화하는 최적 알고리즘입니다. 그러나 실제 실행 시간을 정확히 예측하기 어렵고, 긴 작업이 계속해서 순위가 밀리는 '기아 현상'이 발생할 수 있다는 단점이 있습니다.
  3. HRN(Highest Response-ratio Next) : SJF의 기아 현상을 보완한 알고리즘입니다. 우선순위를 (대기 시간 + 실행 시간) / 실행 시간으로 계산하여, 오래 기다린 프로세스의 우선순위를 동적으로 높여줍니다.

선점형 알고리즘

  1. Round Robin(RR) : 모든 프로세스에게 타임 슬라이스(Time Slice)라는 동일한 크기의 CPU 시간을 할당하고, 시간이 만료되면 준비 큐의 맨 뒤로 보내는 방식입니다. 시분할 시스템의 근간을 이루며, 응답 시간이 빠르지만 잦은 문맥 교환으로 인한 오버헤드가 발생할 수 있습니다.
  2. SRT(Shortest Remaining Time) : SJF의 선점형 버전이며, 새로운 프로세스가 도착하면 현재 실행 중인 프로세스의 '남은 시간'과 비교하여 더 짧은 쪽에게 CPU를 할당합니다.
  3. Multi-level Feedback Queue(MFQ) : 현대 운영체제에서 널리 사용되는 복합적인 방식입니다. 여러 개의 우선순위 큐를 두고 프로세스는 실행 패턴에 따라 큐 사이를 동적으로 이동합니다. 일반적으로 CPU를 짧게 사용하는 대화형 작업은 높은 우선순위 큐에, 오래 사용하는 CPU 집중 작업은 낮은 우선순위 큐로 이동시켜 시스템의 응답성과 처리율을 동시에 만족시키려 노력합니다.

주의점


대기 시간과 응답 시간은 다릅니다. 
대기 시간은 실행 '전'까지의 총 대기 시간을, 응답 시간은 실행 '후' 첫 반응까지의 시간을 의미합니다.

SJF가 항상 최선은 아닙니다. 
실행 시간 예측의 어려움과 기아 현상이라는 치명적인 약점이 존재합니다.

선점형 방식이 항상 효율적인 것은 아닙니다. 

문맥 교환에 따르는 오버헤드 때문에, 특정 상황에서는 라운드 로빈의 평균 대기 시간이 FCFS보다 길어질 수도 있습니다.

MFQ의 핵심은 '피드백'입니다. 

프로세스가 큐 사이를 이동(피드백)하며 우선순위가 동적으로 변하는 것이 MLQ와의 가장 큰 차이점입니다.


정리

완벽한 CPU 스케줄링 알고리즘은 존재하지 않습니다. 각 알고리즘은 시스템의 목표(빠른 응답, 높은 처리율 등)와 주어진 작업의 특성에 따라 달라집니다.
운영체제에 대하여 다양한 알고리즘의 원리를 이해하고, 이를 조합하여 시스템의 목적에 가장 부합하는 최적의 스케줄링 전략을 구현해야 하며, 시스템의 효율성과 사용자 만족도 사이의 균형을 맞춰야 합니다.



 
728x90

'운영체제' 카테고리의 다른 글

교착 상태(Deadlock)  (1) 2025.10.13
프로세스 동기화와 임계 구역 문제  (0) 2025.10.11
컴퓨터 하드웨어와 성능의 이해  (0) 2025.09.20
프로세스와 스레드  (0) 2025.09.19
저장장치의 계층 구조  (0) 2025.09.18

IP 주소란?

IP 주소는 인터넷에 연결된 모든 장치를 구별하기 위한 고유한 식별 번호입니다. 현재 우리는 두 가지 버전의 IP 주소를 함께 사용하고 있습니다.

  • IPv4 (Internet Protocol version 4): 32비트로 구성된 주소 체계로, 약 43억 개의 주소를 표현할 수 있습니다. 인터넷 초창기에는 충분할 것으로 예상했지만, 기기 수가 폭발적으로 증가하며 주소 고갈 문제에 직면했습니다.
  • IPv6 (Internet Protocol version 6): IPv4의 주소 부족 문제를 해결하기 위해 등장한 128비트 주소 체계입니다. 거의 무한에 가까운 주소를 생성할 수 있어 사물 인터넷(IoT) 시대의 기반이 되고 있습니다.

IP 주소의 표기법
컴퓨터는 IP 주소를 32개의 0과 1로 이루어진 2진수로 인식하지만, 사람이 이를 직접 사용하기는 어렵습니다. 그래서 우리는 보통 다음과 같은 방식으로 IP 주소를 표기합니다.

  • 점-십진 표기법 (Dotted-Decimal) : 32비트를 8비트씩 네 부분으로 나누어 각각 10진수로 변환하고 점(.)으로 구분하는 방식입니다. (예: 192.168.1.1)
  • 도메인 이름 (Domain Name) : 숫자로 된 IP 주소를 사람이 기억하기 쉬운 문자로 변환한 것입니다. (예: www.kanghyun.dev) 이 변환은 DNS(Domain Name System)를 통해 이루어집니다.

네트워크와 호스트

IP 주소는 단순히 32자리 숫자의 나열이 아닌 두 가지 중요한 부분으로 나뉩니다.

  • 네트워크 ID (NetID) : 해당 장치가 속한 네트워크의 주소를 나타냅니다. 우편 주소의 ‘도시’나 ‘도로명’과 같습니다.
  • 호스트 ID (HostID) : 해당 네트워크 내에서 장치를 구별하는 고유 번호입니다. 우편 주소의 ‘상세 주소(번지)’와 같습니다.

라우터는 데이터를 전송할 때 먼저 네트워크 ID를 보고 데이터를 올바른 네트워크로 보냅니다. 데이터가 해당 네트워크에 도착하면, 그제야 호스트 ID를 보고 최종 목적지 장비로 전달합니다. 이러한 계층적 구조 덕분에 인터넷은 효율적으로 동작할 수 있습니다.

서브넷 마스크

32비트 IP 주소에서 어디까지가 네트워크 ID이고 어디부터가 호스트 ID인지 경계를 알려주는 것이 서브넷 마스크(Subnet Mask)입니다.

서브넷 마스크 역시 IP 주소처럼 32비트 숫자로 구성되며, 2진수로 표현했을 때 ‘1’로 채워진 부분은 네트워크 ID를, ‘0’으로 채워진 부분은 호스트 ID를 의미합니다.

예를 들어, 255.255.255.0이라는 서브넷 마스크는 2진수로 11111111.11111111.11111111.00000000이므로, 앞의 24비트는 네트워크 ID, 뒤의 8비트는 호스트 ID임을 나타냅니다.

서브네팅

과거에는 IP 주소를 A, B, C와 같은 클래스(Class)로 나누어 네트워크의 크기를 고정했습니다. 예를 들어 C 클래스는 254개의 호스트를 가질 수 있었고, B 클래스는 65,534개를 가질 수 있었습니다. 이 방식은 만약 300개의 호스트가 필요한 기관이 B 클래스를 할당받으면 6만 개가 넘는 주소가 낭비되는 비효율을 낳았습니다.

이러한 문제를 해결하기 위해 등장한 기술이 서브네팅(Subnetting)입니다. 서브네팅은 할당받은 하나의 큰 네트워크를 필요에 맞게 여러 개의 작은 네트워크(서브넷)로 나누어 사용하는 기술입니다.

 

서브네팅의 원리

서브네팅은 호스트 ID 부분의 비트를 빌려와 네트워크 ID를 확장하는 방식으로 이루어집니다. 예를 들어, 호스트 ID에서 3비트를 빌려오면, 2³ = 8개의 작은 서브넷을 만들 수 있습니다. 이렇게 하면 주소를 필요한 만큼만 할당하여 낭비를 줄이고, 네트워크를 기능별(예: 경리부, 생산부) 또는 지역별로 분리하여 관리하기 용이해집니다. 또한, 네트워크 트래픽을 분산시켜 성능을 향상시키고 보안을 강화하는 효과도 있습니다.

특별한 IP 주소들

모든 IP 주소를 장비에 할당할 수 있는 것은 아닙니다. 몇몇 주소는 특별한 용도로 예약되어 있습니다.

  • 네트워크 주소 : 호스트 ID 부분이 모두 0인 주소로, 해당 네트워크 자체를 대표합니다. (예: 192.168.5.0)
  • 브로드캐스트 주소 : 호스트 ID 부분이 모두 1인 주소로, 해당 네트워크의 모든 호스트에게 데이터를 한 번에 전송할 때 사용됩니다. (예: 192.168.5.255)
  • 사설 IP 주소 (Private Address) : 공유기를 사용하는 가정이나 회사 내부 네트워크에서 자유롭게 사용할 수 있도록 약속된 주소 대역입니다. (10.x.x.x, 172.16.x.x ~ 172.31.x.x, 192.168.x.x) 이 주소들은 인터넷에서 직접 사용될 수 없습니다.
  • 루프백 주소 (Loopback Address) : 127.0.0.1은 컴퓨터가 자기 자신을 가리키는 주소로, 주로 네트워크 소프트웨어를 테스트하는 데 사용됩니다.

정리

IP 주소와 서브네팅은 현대 네트워크를 이해하는 데 가장 기본이 되는 핵심적인 개념입니다. IP 주소는 네트워크 ID와 호스트 ID라는 체계적인 구조를 가지며, 서브넷 마스크는 그 구조를 구분하는 기준이 됩니다. 그리고 서브네팅은 이 구조를 유연하게 변경하여 한정된 IP 주소를 효율적으로 사용하고 네트워크를 체계적으로 관리하는 강력한 도구입니다.

728x90