CS 공부/네트워크
Wireshark로 배우는 컴퓨터네트워크 [4장 IP 주소]
kkyoug
2025. 5. 31. 16:50
- 개요
- 클래스 기반 주소지정
- 클래스 없는 주소지정
- 특수 주소
- IPv6
- 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비트)
- 특징
- 네트워크 내 모든 주소는 한 블록에 속함
블록에서 정보 추출하기
- 블록 내의 주소의 수 N은 N = 232 "이다.
- 처음 주소는 왼쪽의 비트를 유지하고 오른쪽의 (32 - n)비트를 0으로 함으로써 구 할 수 있다.
- 마지막 주소는 왼쪽의 비트를 유지하고 오른쪽의 (32 - n)비트를 1로 함으로써 구 할 수 있다.
- 네트워크 주소
- 블록의 첫 번째 주소로 네트워크의 식별자 역할
- 패킷 전송 시 목적지 주소로 사용되는 중요한 주소
- 라우터의 역할
- 인터넷이 m개 네트워크로 구성되면 라우터는 m개 인터페이스 보유
- 패킷 도착 시 어떤 네트워크로 보낼지 결정
- 네트워크 주소를 찾아 라우팅 테이블 참조하여 적절한 인터페이스 선택
- 동작 과정
- 호스트에서 라우터로 패킷 도착
- 라우터가 목적지 네트워크 결정
- 해당 인터페이스로 패킷 전송
- 패킷이 네트워크 도착 후 목적지 호스트에 전달
네트워크 마스크
- 목적
- 라우터가 패킷의 목적지 주소에서 네트워크 주소를 추출하기 위한 알고리즘에 사용
- 구조
- 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계층(네트워크 → 호스트)에서 더 많은 계층이 필요하게 됨
- 서브넷팅이 필요한 이유
- 보안과 관리: 클래스 A/B 블록을 받은 조직이 네트워크를 여러 서브네트워크로 나누어 관리
- 주소 공유: 클래스 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만 유니캐스트 통신용으로 사용 중