CS 공부/네트워크

Wireshark로 배우는 컴퓨터네트워크 [4장 IP 주소]

kkyoug 2025. 5. 31. 16:50
  1. 개요
  2. 클래스 기반 주소지정
  3. 클래스 없는 주소지정
  4. 특수 주소
  5. IPv6
  6. IPv6 주소 공간 할당

  • 인터넷에 연결되어 있는 각 장치를 구별하기 위해 TCP/IP 프로토콜 모음의 IP 계층에서 사용하는 식별자를 인터넷 주소(Internet address) 또는 IP 주소(IP address)라고 한다.
  • IP 주소는 유일하다. 유일하다는 것은, 각 주소는 인터넷에서 오직 한 개의 연결만 지정 한다는 것을 의미한다.

1.1 주소 공간

  • 주소 공간은 프로토콜에서 사용 가능한 총 주소 개수
  • IPv4는 32비트 주소를 사용 → 2³² = 4,294,967,296개 (약 43억 개)
  • 제약이 없다면 43억 개 이상의 장치가 인터넷에 연결 가능

1.2 표기법

  • 세 가지 표기법에는 2진 표기법(기수 2), 점 10진 표기법(기수 256), 16진 표기법(기수 16)이 있다. 가장 많이 사용되는 방법은 기수(base) 256 표기법이다.
    • 2진 표기법: 32비트로 구성, 8비트씩 4개 옥텟(바이트)으로 구분
    • 점 10진 표기법: 더 읽기 쉽게 하기 위해 각 바이트를 10진수로 변환하고 점(.)으로 구분
    • 16진 표기법: 각 16진수 숫자가 4비트에 해당

1.3 주소의 범위

  • 주소 범위 계산이 필요한 경우: 처음 주소와 마지막 주소 사이의 주소 개수 구하기, 또는 처음 주소와 개수로 마지막 주소 찾기
  • 계산 방법: 해당 기수(2진법, 256진법, 16진법)에서 덧셈/뺄셈 연산 수행
  • 대안: 주소를 10진수로 변환한 후 계산 수행

1.4 연산

  • NOT 연산 (일항 연산)
    • 한 개의 입력을 받아 보수를 계산
    • 각 비트를 역으로 변환: 0 → 1, 1 → 0
  • AND 연산 (이항 연산)
    • 두 개의 입력을 받아 해당하는 비트들을 비교
    • 두 비트 중 작은 값을 취함 (같으면 둘 중 하나)
  • OR 연산 (이항 연산)
    • 두 개의 입력을 받아 해당하는 비트들을 비교
    • 두 비트 중 큰 값을 취함 (같으면 둘 중 하나)

 

2. 클래스 기반 주소지정

2.1 클래스

  • 클래스 기반 주소지정에서 IP 주소 공간은 다섯 개의 클래스(A, B, C, D. E)로 나누어진다.

 

클래스 찾기

  • 주소가 2진 표기법, 또는 점 10진 표기법으로 주어졌을 때, 주소의 클래스를 알 수 있다.

Netid와 Hostid

  • 각 부분은 주소의 클래스에 따라 길이가 서로 다르다. [그림 4.8]은 netid와 hostid의 바이트를 보여주고 있다.클래스 D와 E는 netid와 hostid로 나누어지지 않는다.

2.2 클래스와 블록

  • 클래스 기반 주소지정에서 발생하는 한 가지 문제점은 각 클래스가 정해진 수의 블록 (Block)으로 나뉘고 각 블록의 크기는 고정되어 있다.

클래스 A

  • netid: 1바이트 사용, 가장 왼쪽 비트는 0으로 고정
  • 블록 수: 2⁷ = 128개 블록 (일부는 특별 용도로 예약)
  • 각 블록의 주소 수: 16,777,216개 (약 1,677만 개)
  • 문제점: 매우 큰 규모의 기관만 모든 주소를 사용할 수 있어 많은 주소가 낭비됨

클래스 B

  • netid: 2바이트 사용, 가장 왼쪽 두 비트는 10으로 고정
  • 블록 수: 2¹⁴ = 16,384개 블록 (일부는 특별 용도로 예약)
  • 각 블록의 주소 수: 65,536개 (약 6만 5천 개)
  • 문제점: 65,536개 주소를 모두 사용할 수 있는 기관이 많지 않아 주소 낭비 발생

클래스 C

  • netid: 3바이트 사용, 가장 왼쪽 세 비트는 110으로 고정
  • 블록 수: 2²¹ = 2,097,152개 블록 (일부는 특별 용도로 예약)
  • 각 블록의 주소 수: 256개
  • 문제점: 256개 주소로는 너무 적어서 만족할 수 있는 작은 기관이 많지 않음

클래스 D

  • 구성: 한 개의 블록으로만 구성
  • 용도: 멀티캐스팅 전용으로 설계
  • 기능: 각 주소가 인터넷상의 호스트 그룹을 정의
  • 특징: 그룹 멤버들은 정상적인 유니캐스트 주소 외에 추가로 멀티캐스트 주소를 가짐

클래스 E

  • 클래스 E 주소도 단 하나의 블록을 갖는다. [그림 4.13]과 같이 클래스 E는 예약된 주소 로 사용하기 위해 설계되었다.

 

2.3 2계층 주소지정

  • 기본 개념
    • 목적: 인터넷 패킷의 네트워크층 목적지 지정
    • 구조: 인터넷을 네트워크들의 네트워크로 간주
  • 주소 할당 방식
    • 조직이 인터넷 연결을 원할 때 네트워크 생성
    • 인터넷 기관이 조직에 주소 블록(A, B, C 클래스) 할당
  • 주소 구성
    • netid: 네트워크를 정의 (n비트)
    • hostid: 네트워크 내 특정 호스트를 정의 (32-n비트)
    • n값: 클래스 A(8비트), B(16비트), C(24비트)
  • 특징
    • 네트워크 내 모든 주소는 한 블록에 속함

 

블록에서 정보 추출하기

  1. 블록 내의 주소의 수 N은 N = 232 "이다.
  2. 처음 주소는 왼쪽의 비트를 유지하고 오른쪽의 (32 - n)비트를 0으로 함으로써 구 할 수 있다.
  3. 마지막 주소는 왼쪽의 비트를 유지하고 오른쪽의 (32 - n)비트를 1로 함으로써 구 할 수 있다.

 

  • 네트워크 주소
    • 블록의 첫 번째 주소로 네트워크의 식별자 역할
    • 패킷 전송 시 목적지 주소로 사용되는 중요한 주소
  • 라우터의 역할
    • 인터넷이 m개 네트워크로 구성되면 라우터는 m개 인터페이스 보유
    • 패킷 도착 시 어떤 네트워크로 보낼지 결정
    • 네트워크 주소를 찾아 라우팅 테이블 참조하여 적절한 인터페이스 선택
  • 동작 과정
    1. 호스트에서 라우터로 패킷 도착
    2. 라우터가 목적지 네트워크 결정
    3. 해당 인터페이스로 패킷 전송
    4. 패킷이 네트워크 도착 후 목적지 호스트에 전달

 

네트워크 마스크

  • 목적
    • 라우터가 패킷의 목적지 주소에서 네트워크 주소를 추출하기 위한 알고리즘에 사용
  • 구조
    • 32비트 수로 구성
    • 왼쪽 n개 비트: 1로 설정
    • 오른쪽 (32-n)개 비트: 0으로 설정
  • 클래스별 디폴트 마스크
    • 클래스 A: n=8 → 8개의 1 + 24개의 0
    • 클래스 B: n=16 → 16개의 1 + 16개의 0
    • 클래스 C: n=24 → 24개의 1 + 8개의 0

 

 

 

  • AND 연산 사용
    • 목적지 주소와 디폴트 마스크를 AND 연산
    • 결과가 네트워크 주소가 됨
  • 연산 방식
    • 라우터: 2진법 또는 16진법으로 AND 연산 적용
    • 예제: 점 10진 표기법으로 빠른 방법 사용

2.4 3계층 주소지정: 서브넷팅

  • IP 주소지정이 2계층(네트워크 → 호스트)에서 더 많은 계층이 필요하게 됨
  • 서브넷팅이 필요한 이유
    1. 보안과 관리: 클래스 A/B 블록을 받은 조직이 네트워크를 여러 서브네트워크로 나누어 관리
    2. 주소 공유: 클래스 A/B는 소진되고 클래스 C는 너무 작아서, 큰 블록을 작은 서브블록으로 나누어 다른 조직과 공유
  • 서브넷팅 정의
    • 블록을 더 작은 블록으로 나누는 개념
    • 네트워크를 여러 서브네트워크(서브넷)로 분할
    • 각 서브넷은 고유한 서브넷 주소를 가짐

 

서브넷 마스크

  • 마스크 종류
    • 네트워크 마스크(디폴트 마스크): 서브넷팅되지 않은 네트워크용
    • 서브넷 마스크: 서브넷으로 나뉜 네트워크용
  • 서브넷 구조
    • 서브넷 = subnetid + hostid
    • 서브넷팅 효과: netid 길이 증가, hostid 길이 감소
  • 서브넷팅 공식
    • n: netid의 길이
    • s: 서브넷 개수 (2의 거듭제곱)
    • 각 서브넷의 subnetid 길이: log₂s
  • 목적
  • 같은 수의 호스트를 가지는 여러 서브넷으로 네트워크 분할

서브넷 주소

  • 서브넷의 첫 번째 주소
  • 서브넷의 식별자 역할
  • 용도
    • 라우터가 해당 서브넷으로 가는 패킷의 경로를 지정하는 데 사용
  • 서브넷 주소 찾는 방법
    • 서브넷 내 임의의 주소와 서브넷 마스크를 AND 연산
    • 네트워크 주소 찾는 방법과 동일
    • 빠른 방법(점 10진 표기법) 사용 가능

2.5 슈퍼넷팅

  • 슈퍼넷팅 개념
    • 여러 개의 클래스 C 블록을 결합하여 큰 범위의 주소 생성
    • 여러 네트워크를 결합하여 하나의 슈퍼네트워크 생성
  • 활용 방법
    • 조직이 한 개 블록 대신 여러 개의 클래스 C 블록 신청
    • 예시: 1,000개 주소가 필요한 조직 → 4개의 클래스 C 블록 할당
  • 효과
    • 클래스 C 블록의 크기 제한 문제 해결

슈퍼넷 마스크

  • 슈퍼넷 마스크 특징
    • 서브넷 마스크의 반대 개념
    • 클래스 C 디폴트 마스크보다 1의 개수가 더 적음
    • 서브넷 마스크는 디폴트 마스크보다 1의 개수가 더 많음
  • 마스크 비교 예시
    • 8개 서브블록 분할: 디폴트 마스크보다 1이 3개 더 많음 (2³ = 8)
    • 8개 블록 결합: 디폴트 마스크보다 1이 3개 더 적음

 

 

3. 클래스 없는 주소 지정

등장 배경

  • 클래스 기반 방식의 한계
    • 서브넷팅과 슈퍼넷팅으로도 주소 고갈 문제 해결 못함
    • 주소 배분과 경로 설정이 복잡해짐
  • 해결책
    • 장기적 해결책: IPv6 (주소 길이 증가, 패킷 형식 변경 필요)
    • 단기적 해결책: 클래스 없는 주소지정 (IPv4 그대로 사용, 클래스 개념 제거)
  • ISP의 등장
    • 1990년대 인터넷 서비스 제공자(ISP) 주목받음
    • 개인, 소규모 회사에게 인터넷 접속 서비스 제공
    • 큰 주소 범위를 할당받아 작은 그룹(1,2,4,8,16 등)으로 나누어 재할당
  • 클래스 없는 주소지정
    • 1996년 인터넷 관리 기구에서 발표
    • 가변 길이 블록 사용 (어떤 클래스에도 속하지 않음)

3.1 가변 길이 블록

  • 클래스 기반 방식
    • 전체 주소 공간을 5개 클래스로 고정 분할
    • 클래스 A, B, C 블록을 각 기관에 할당 (크기 미리 정해짐)
    • 클래스 D, E는 특수 목적으로 예약
  • 클래스 없는 방식
    • 전체 주소 공간을 가변 길이 블록으로 분할
    • 이론적으로 2⁰, 2¹, 2², ..., 2³²개 주소를 가진 블록 할당 가능
  • 제약 조건
    • 블록의 주소 개수는 2의 거듭제곱이어야 함
    • 한 기관당 하나의 주소 블록 할당
    • 블록들은 겹치지 않게 분할

 

 

3.2 2단계 주소 체계

  • 클래스 기반과 클래스 없는 방식 모두 주소를 두 부분으로 나누는 2단계 체계 사용

용어 비교

클래스 기반 클래스 없는 기능

netid prefix 네트워크/블록 식별
hostid suffix 호스트 식별
  • 주소 구조
    • 같은 블록 내 모든 주소: 동일한 프리픽스 공유
    • 각 주소: 서로 다른 서픽스 보유
  • 프리픽스 길이 (n)
  • 클래스 기반
    • 고정값: 8, 16, 24 중 하나 (클래스에 따라 결정)
  • 클래스 없는
    • 가변값: 0~32 중 하나 (블록 크기에 따라 결정)
    • 서픽스 길이: 32-n

슬래시(/) 표기법

  • 사진과 같이 표시함

네트워크 마스크

  • 네트워크 마스크는 32비트 숫자이며, 왼쪽부터 n개의 연속적인 비트는 1로 설정되고 그 나머지 비트는 0으로 설정된다.

블록 정보 추출

  • 주소 개수 계산
    • 공식: N = 2³²⁻ⁿ
    • n: 프리픽스 길이, N: 블록 내 주소 개수

첫 번째 주소 (네트워크 주소) 계산

  • 방법 1: AND 연산
    • 첫 번째 주소 = (임의의 주소) AND (네트워크 마스크)
  • 방법 2: 비트 설정
    • 왼쪽 n개 비트: 그대로 유지
    • 나머지 (32-n)개 비트: 모두 0으로 설정
  • 마지막 주소 계산
    • 방법 1: 덧셈
    • 마지막 주소 = 첫 번째 주소 + 주소 개수
  • 방법 2: OR 연산
    • 마지막 주소 = (임의의 주소) OR [NOT (네트워크 마스크)]
  • 방법 3: 비트 설정
    • 왼쪽 n개 비트: 그대로 유지
    • 나머지 (32-n)개 비트: 모두 1로 설정

3.3 블록 할당

  • 블록 할당 기구
    • ICANN: 국제 관리 기구, 대용량 블록을 ISP에게 할당
  • 개인 사용자에게는 직접 할당하지 않음

CIDR 블록 할당의 3가지 제약조건

  • 1. 주소 개수 제약
    • N(요구 주소 수)은 2의 거듭제곱이어야 함
    • 가능한 값: 1, 2, 4, 8, 16, 32, ...
  • 2. 프리픽스 길이 계산
    • 공식: n = 32 - log₂N
    • N이 2의 거듭제곱이어야 n이 정수가 됨
  • 3. 주소 연속성 및 가용성
    • 블록 내 주소들은 연속적인 숫자여야 함
    • 다른 블록에 할당되지 않은 상태여야 함
  • 시작 주소 제약조건
    • 시작 주소는 블록 주소 개수(N)로 나누어떨어져야 함
    • 계산법: 시작 주소 = X × N (X는 프리픽스를 10진수로 표현한 값)

3.4 서브넷팅

서브넷 설계

  • 서브넷 설계 변수
    • N: 기관에 할당된 총 주소 개수
    • n: 기관의 프리픽스 길이
    • Nsub: 각 서브넷의 주소 개수
    • nsub: 각 서브넷의 프리픽스 길이
    • 총 서브넷 개수

서브넷 설계 3단계

  • 1. 주소 개수 제약
    • 각 서브넷의 주소 개수(Nsub)는 2의 거듭제곱이어야 함
  • 2. 프리픽스 길이 계산
    • 공식: nsub = n + log₂(N/Nsub)
  • 3. 시작 주소 제약
    • 각 서브넷의 시작 주소는 해당 서브넷 주소 개수(Nsub)로 나누어떨어져야 함
    • 주소 설정 순서
  • 큰 네트워크부터 먼저 주소 설정 → 작은 네트워크 순으로 설정

각 서브넷에서 정보 찾기

  • 인터넷의 각 네트워크에 대한 정보를 찾는 방법과 동일하다.

주소 결합

  • ICANN → ISP
    • ICANN이 ISP에게 대용량 주소 블록 할당
  • ISP → 고객
    • ISP가 할당받은 블록을 여러 서브블록으로 분할
    • 각 서브블록을 개별 고객들에게 할당
  • 블록 결합
    • 여러 주소 블록을 하나로 결합하여 ISP에게 할당 가능
  • 특징
    • 계층적 구조로 효율적인 주소 관리 및 분배

4. 특수 주소

4.1 특수 블록

  • 주소의 일부 블록은 특수 목적을 위하여 예약된 것이다.

모두-0인 주소

  • 용도
    • 자신의 IPv4 주소를 모르는 호스트가 통신을 위해 사용
    • 주로 부트스트랩(bootstrap) 시간에 사용
  • 사용 방법
    • 발신지 주소: 0.0.0.0 (자신의 주소를 모르므로)
    • 목적지 주소: 제한된 브로드캐스트 주소 사용
  • 목적: 부트스트랩 서버(DHCP 서버)에게 패킷 전송

 

모두-1인 주소

  • 명칭
    • 제한된 브로드캐스트 주소 (Limited Broadcast Address)
  • 용도
    • 현재 네트워크 내 모든 호스트에게 메시지 전송
    • IPv4 패킷의 목적지 주소로 사용
  • 동작 방식
    • 발신 호스트: 목적지 주소를 255.255.255.255로 설정하여 데이터그램 전송
    • 수신: 같은 네트워크 내 모든 호스트가 데이터그램 수신
  • 제한 사항
    • 라우터가 이 주소를 가진 패킷의 포워딩을 차단
    • 브로드캐스팅이 로컬 네트워크로만 제한됨

루프백 주소

  • 정의
    • 컴퓨터 내부에서 소프트웨어 테스트용으로 사용되는 주소
  • 특징
    • 패킷이 컴퓨터 외부로 전송되지 않음
    • 프로토콜 소프트웨어로만 전달됨
  • 1. 소프트웨어 테스트
    • "ping" 응용: IPv4 소프트웨어가 패킷을 제대로 처리하는지 확인
  • 2. 로컬 통신
    • 클라이언트 프로세스가 동일한 컴퓨터의 서버 프로세스에게 메시지 전송
  • 사용 제약
    • IPv4 패킷의 목적지 주소로만 사용 가능
    • 발신지 주소로는 사용 불가

사설 주소

  • 이 주소들은 네트워크가 분리되어 있거나 또는 주소 변환 기술(NAT: Network Address Translation)을 이용하여 사설망(private network)을 인터넷에 연결하는 데 사용된다.

 

멀티캐스트 주소

  • 224.0.0.0/4 블록은 멀티캐스트 통신을 위하여 예약된 블록이다.

4.2 각 블록에서 사용되는 특수 주소

네트워크 주소

 

직접 브로드캐스트 주소

  • 정의
    • 서픽스가 모두 1로 설정된 블록/서브블록의 마지막 주소
  • 용도
    • 라우터가 특정 네트워크의 모든 호스트에게 패킷 전송
  • 동작 방식
    • 라우터: 서픽스가 모두 1인 목적지 주소로 데이터그램 전송
    • 수신: 해당 네트워크의 모든 장치가 데이터그램 수신 및 처리
  • 사용 제약
    • IPv4 패킷의 목적지 주소로만 사용 가능
  • 제한된 브로드캐스트와의 차이
    • 직접 브로드캐스트: 특정 네트워크 지정 가능
    • 제한된 브로드캐스트: 현재 네트워크로만 제한

5. IPv6 주소

 

 

점 10진 표기법

  • IPv4와의 호환성 위해 사용하지만 매우 길어서 거의 사용 안 함
  • 16바이트 주소를 점으로 구분하여 표기

콜론 16진 표기법 (주요 방식)

  • 128비트를 8개 영역(각 2바이트)으로 분할
  • 4개 16진수마다 콜론(:)으로 구분
  • 앞의 0 생략 가능: 0074 → 74, 000F → F
  • 제로 압축: 연속된 0 영역을 ::로 대체

혼합 표기법

  • 왼쪽 6개 영역: 콜론 16진 표기법**
  • 오른쪽 2개 영역: 점 10진 표기법 (IPv4 주소 포함 시)**
  • : FDEC:14AB:2311:BBFE:AAAA:BBBB:130.24.24.18

CIDR 표기법

  • 계층적 주소지정 지원
  • 프리픽스/서픽스로 분리 가능
  • : 주소/60 (60비트 프리픽스)

5.2 주소 공간

  • IPv6의 주소 공간은 다음과 같이 2128이다.

5.3 세 가지 주소 유형

유니캐스트 주소 (Unicast)

  • 단일 인터페이스(컴퓨터/라우터) 정의
  • 패킷이 특정 수신자 하나에게만 전달
  • IPv6에서 큰 블록으로 지정

에니캐스트 주소 (Anycast)

  • 같은 주소를 공유하는 컴퓨터 그룹 정의
  • 패킷이 가장 접근 쉬운 그룹 멤버 하나에게만 전달
  • : 여러 서버 중 가장 가까운 서버로 요청 전송
  • 별도 블록 없이 유니캐스트 블록에서 할당

멀티캐스트 주소 (Multicast)

  • 컴퓨터 그룹 정의
  • 그룹의 모든 멤버가 패킷 복사본 수신 (에니캐스트와 차이점)
  • IPv6에서 별도 블록 지정

6. IPv6 주소 공간 할당

전체 주소 공간 분할

  • 8등분으로 나누어짐 (각 블록은 2¹²⁵개 주소의 1/8)

블록별 할당 현황

첫 번째 블록

  • 6개 가변 크기 블록 포함
  • 3개: 예약된 블록
  • 3개: 미할당 블록

두 번째 블록

  • 단일 블록으로 구성
  • 전역 유니캐스트 주소용

3-7번째 블록 (5개)

  • 모두 미할당 상태

마지막(8번째) 블록

  • 8개 세부 블록으로 분할
  • 일부는 미할당, 일부는 특별 목적으로 예약

주소 공간 활용도

  • 5/8 이상이 아직 미할당
  • 1/8만 유니캐스트 통신용으로 사용 중