OSI 7 계층 (Open Systems Interconnection Reference Model)

Pre-Header


Auto Header

Summary OSI 참조 모델은 개방형 시스템 간 상호접속을 위한 7계층 아키텍처와 서비스/프로토콜 분리를 정의한다. 계층별 책임, 서비스 프리미티브, SAP, PDU/SDU 개념을 통해 상호운용성과 모듈성을 달성한다. ([ISO][1])

Overview 이 문서는 OSI 7계층의 원리(레이어링, 서비스/프로토콜 분리)와 실전적 적용(캡슐화·주소 지정·트러블슈팅)을 초급→중급→고급→핸즈온 흐름으로 정리한다. 또한 TCP/IP 실체와의 매핑, 계층 위반/최적화, QoS·혼잡제어 논점을 포함해 현대 네트워킹 맥락에서 OSI의 지식 지형을 체계화한다. 표준(ISO/IEC 7498-1, ITU-T X.200)과 운영체제/벤더 공식 문서, IETF RFC를 교차 인용하여 개념의 정확성과 실무 적합성을 확보한다. ([ISO][1])

TTDM Manifest

Tags layering-principles, service-primitives, sap-and-addressing, pdu-taxonomy, qos-and-congestion, protocol-mapping


Body

S1. 핵심 개념 정리 (Beginner)

1) OSI 7계층 한눈에 보기

Overview OSI는 물리~응용까지 7계층으로 기능을 분리해 상호운용성과 독립적 진화를 가능케 한다. 각 계층은 상위에 서비스 제공, 하위 서비스 활용을 원칙으로 한다. ([Cloudflare][2])

Body

Artifacts

flowchart TB
  L1[Physical]
  L2[Data Link]
  L3[Network]
  L4[Transport]
  L5[Session]
  L6[Presentation]
  L7[Application]
  L7 --> L6 --> L5 --> L4 --> L3 --> L2 --> L1
  L1 -.-> L2 -.-> L3 -.-> L4 -.-> L5 -.-> L6 -.-> L7

2) 서비스·프리미티브·SAP·PDU/SDU/PCI

Overview OSI는 “서비스”와 이를 실현하는 “프로토콜”을 구분한다. 계층 경계에서는 서비스 프리미티브(Request/Indication/Response/Confirm 등)와 SAP(Service Access Point)를 통해 상호작용한다. 데이터는 SDU에 PCI가 붙어 PDU가 된다. ([ITU][4])

Body

Artifacts

개념의미예시
SAP계층 경계 접점TCP 포트 80/443
프리미티브서비스 호출/알림CONNECT.req/ind/resp/cfm
SDU서비스 데이터L4에 전달된 L5 데이터
PCI제어정보TCP/UDP 헤더, FCS
PDU동계층 교환 단위세그먼트/패킷/프레임

3) 캡슐화·디캡슐화와 PDU 명칭

Overview 상위에서 하위로 내려갈수록 헤더·트레일러가 덧붙는 캡슐화가 일어나고, 반대 방향은 디캡슐화다. 계층별 PDU는 일반적으로 세그먼트(L4)-패킷(L3)-프레임(L2)-비트(L1)로 부른다. ([community.cisco.com][5])

Body 캡슐화는 기능 분리에 따른 오버헤드를 생성하지만, 상호운용성과 독립 배포의 이점을 제공한다. MTU보다 큰 PDU는 분할될 수 있으며(예: IP 프래그멘테이션), 상위에는 투명해야 한다.

Artifacts

sequenceDiagram
  participant App as L7 App
  participant Tr as L4 Transport
  participant Net as L3 Network
  participant Dln as L2 Data Link
  participant Phy as L1 Physical
  App->>Tr: SDU (payload)
  Tr->>Net: PDU=L4hdr+SDU (segment)
  Net->>Dln: PDU=L3hdr+segment (packet)
  Dln->>Phy: PDU=L2hdr+packet+L2trl (frame)
  Phy-->>Dln: bits over medium

Artifacts (Code ≤50줄)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 계층별 PDU 명칭과 캡슐화 과정을 단순 시뮬레이션
layers = [
    ("L7","Application",None),
    ("L6","Presentation",None),
    ("L5","Session",None),
    ("L4","Transport","segment"),
    ("L3","Network","packet"),
    ("L2","Data Link","frame"),
    ("L1","Physical","bits"),
]
payload = "HELLO"
headers = []
for L, name, pdu in layers[3:]:  # L4~L1
    headers.append(f"{L}hdr")
    payload = f"{L}hdr({payload})" + ("+L2trl" if L=="L2" else "")
    print(f"{L} {name} -> PDU: {pdu}, stack: {payload}")
# 출력: L4/L3/L2에서 헤더 추가, L2에서 트레일러 추가, L1은 비트로 전송

S2. 아키텍처 정적 관점(★)

★ 레이어링 원칙

Overview 기능을 수직 계층으로 분리해 모듈화·독립 진화를 달성한다. 서비스는 위로, 의존성은 아래로 흐른다. Body

★ 서비스 인터페이스와 계약(SAP·프리미티브)

Overview 서비스는 프리미티브 집합과 파라미터로 계약된다. SAP는 계약의 종단점이다. Body

★ 주소·이름 지정

Overview 계층별로 식별자가 다르며, 상위는 하위 주소 체계를 추상화한다. Body

★ 크로스컷 품질속성(신뢰성/성능/보안)

Overview 신뢰성(ARQ/재전송), 성능(MTU/혼잡), 보안(TLS/IPsec)은 서로 다른 계층에서 실현되며 최종 사용자 품질을 공동 결정한다. Body


S3. 주제 고유의 동적 심화(†)

† PDU 분류와 헤더 오버헤드

Overview 헤더/트레일러 누적으로 유효 페이로드 비율이 달라진다. Body

† 멀티플렉싱/디멀티플렉싱

Overview 하위 PDU를 상위 SAP로 분배(포트/프로토콜 번호/이더타입 등). Body

Artifacts

flowchart LR
  L2[L2 EtherType] -->|0x0800| L3[IPv4]
  L3 -->|proto=6| L4[TCP]
  L4 -->|dst port 443| L7[HTTPS Session]

† QoS·혼잡제어의 계층 배치

Overview 혼잡제어는 주로 L4(예: TCP), 큐잉/스케줄링은 L2/L3 장비에서 구현된다. Body

† 프로토콜 매핑(TCP/IP·TLS·QUIC)

Overview OSI는 참조 모델, 인터넷은 실체적 프로토콜 집합이다. 엄밀한 1:1 대응은 아니지만 교육/설계 목적으로 매핑한다. Body

† 계층 위반·최적화(오프로딩·미들박스)

Overview 실제 인터넷은 성능·운영 이유로 엄격한 계층성을 완화한다. Body


SW. Workshops (Hands-on)

WS1. 패킷 워크: L7→L1 캡슐화 추적

WS2. SAP 관점 포트 매핑 실습

WS3. 계층별 트러블슈팅 플레이북


Final Summary

OSI 7계층은 서비스/프로토콜 분리와 레이어링으로 상호운용성과 모듈화를 이룬 참조 모델이다. SAP·프리미티브·PDU/SDU/PCI를 통해 계층 간 계약과 데이터 흐름이 정의되며, 실제 인터넷 스택은 필요에 따라 매핑·완화를 적용한다. 본 문서는 정적 원칙(★)과 동적 주제(†), 실습(WS)을 통해 개념→적용→심화까지 일관된 학습 경로를 제공한다.

Learning Guide

  1. S1: 계층·서비스·캡슐화 기본 흐름을 이해 → 2) : 레이어링/계약/주소·이름/품질속성으로 아키텍처 시야 확장 → 3) : PDU 오버헤드, 멀티플렉싱, QoS, 매핑, 계층 위반 등 고급 주제 → 4) SW: 패킷 캡처·포트 매핑·플레이북으로 실전 감각 강화

Terminology (7컬럼)

용어(EN, 약어)한글정의역할/맥락관련 개념실무 연관성근거(RF#)
OSI Reference ModelOSI 참조 모델7계층 통신 아키텍처 표준상호운용 설계의 공통 기준TCP/IP 모델교육·설계 기준RF1, RF2
Service Access Point, SAP서비스 접근점계층 경계의 논리 종단점디멀티플렉싱·주소 지정포트, 소켓트러블슈팅·보안 정책RF2, RF16
Service Primitive서비스 프리미티브Request/Indication/Response/Confirm 패턴서비스 계약의 단위API, 시스템콜 유사 개념프로토콜 설계/분석RF16
SDU서비스 데이터 단위상위가 하위에 전달한 데이터캡슐화 원재료PDU, PCI패킷 구조 분석RF2
PDU프로토콜 데이터 단위동계층 간 교환 단위계층별 명칭 다름세그먼트/패킷/프레임캡처 해석RF13
PCI프로토콜 제어정보헤더/트레일러 제어 필드신뢰/순서/주소 등오버헤드성능·MTU 설계RF2, RF13
Multiplexing/Demux멀티플렉싱/디멀티플렉싱하위 PDU를 상위 SAP로 분배포트·프로토콜 번호이더타입서비스 매핑 점검RF1, RF9
QoS서비스 품질지연/손실/대역폭 관리L2/L3 정책+L4 반응큐잉/스케줄링, TCPSLA 설계RF11
IPsecIPsecL3 보안 수단네트워크 계층 암호화TLSVPN 설계RF17
TLSTLSL5–L7 경계 보안세션·응용 계층 보안QUIC웹 보안RF8, RF17
Integrated IS-IS통합 IS-ISIP/OSI 동시 라우팅프로토콜 매핑 사례OSPF, CLNP대규모 라우팅RF6

References (Seeds Register)


topic: OSI 7계층(OSI Reference Model) current_classification: OK topic_type: T-ARCH

summary: OSI 7계층 모델은 복잡한 네트워크 통신을 7개의 추상화된 계층으로 분리하여 정의한 개념적 프레임워크입니다. 이 모델은 표준화를 통해 서로 다른 제조사의 하드웨어와 소프트웨어가 상호 운용될 수 있도록 보장하며, 데이터가 송신 측에서 캡슐화되고 수신 측에서 비캡슐화되는 과정을 명확히 설명합니다.

overview: OSI(Open Systems Interconnection) 모델은 국제표준화기구(ISO)가 1984년에 개발한 네트워크 통신 표준 아키텍처입니다. 이 모델이 개발될 당시, 네트워크 기술은 특정 공급업체에 종속된 파편화된 상태였기 때문에 상호 호환성이 심각한 문제였습니다. OSI 모델의 목적은 이러한 이기종 시스템 간의 통신을 가능하게 하는 공통의 ‘청사진’을 제공하는 것이었습니다.

본 문서는 OSI 모델 자체에만 초점을 맞춥니다. 이는 실제 인터넷 통신에서 주로 사용되는 TCP/IP 프로토콜 스위트와는 구별되는 **이론적 참조 모델(Reference Model)**입니다. 따라서 본문에서는 각 계층의 ‘무엇(What)‘을 정의하는 것을 넘어, ‘왜(Why)’ 해당 계층이 필요하며 ‘어떻게(How it Works)’ 데이터 흐름을 처리하는지의 근본 원리를 3-6년차 개발자의 관점에서 설명합니다.

tags: [t-arch, networking, osi-model, troubleshooting, tcp-ip, network-architecture, encapsulation]


S1: 정의 및 동기 (Definition & Motivation)

Overview

OSI 7계층 모델의 공식적인 정의와 이 모델이 ‘왜(Why)’ 필요한지에 대한 근본적인 동기를 설명합니다. 이는 기술적 세부 사항 이전에 모델의 존재 이유를 확립합니다.

Body

**OSI 7계층 모델(OSI 7 Layer Model)**은 네트워크 프로토콜 디자인과 통신 과정을 7개의 논리적인 계층(Layer)으로 나누어 설명하는 **개념적 프레임워크(Conceptual Framework)**입니다. 정식 명칭은 ‘Open Systems Interconnection Reference Model’이며, 국제표준화기구(ISO)에 의해 표준으로 제정되었습니다.

이 모델의 핵심 동기는 **상호 운용성(Interoperability)**입니다. 1980년대 초반 네트워크 기술은 여러 공급업체가 독자적인 규격(Proprietary)을 사용하여, A사의 장비가 B사의 장비와 통신할 수 없는 ‘사일로(Silo)’ 문제가 심각했습니다. OSI 모델은 이러한 문제를 해결하기 위해 네트워크 통신에 필요한 기능들을 7단계로 명확히 분리하고, 각 계층이 수행해야 할 역할과 인터페이스를 표준화했습니다.

이러한 **계층적 추상화(Layered Abstraction)**는 다음과 같은 실질적인 이점을 제공합니다.

  1. 복잡성 감소: 전체 네트워크 통신이라는 거대한 문제를 7개의 관리 가능한 작은 문제로 분해합니다.
  2. 표준화: 각 계층의 기능이 명확히 정의되므로, 서로 다른 벤더가 동일한 표준을 따르는 하드웨어와 소프트웨어를 개발할 수 있습니다.
  3. 모듈성 및 유연성: 특정 계층(예: 물리 계층)의 기술이 변경(예: 유선 LAN에서 Wi-Fi로 변경)되더라도, 다른 상위 계층(예: 애플리케이션 계층)의 코드를 수정할 필요가 없습니다.
Supporting Artifacts

아래 표는 OSI 모델의 7계층을 요약하여 각 계층의 핵심 목적을 보여줍니다.

계층 (번호)계층 이름 (EN)핵심 목적 (Purpose)
7Application (응용)최종 사용자에게 네트워크 서비스를 제공 (예: 웹 브라우저)
6Presentation (표현)데이터의 형식을 변환, 암호화, 압축 (데이터의 ‘번역’)
5Session (세션)장치 간의 통신 세션(연결)을 수립, 관리, 종료
4Transport (전송)종단 간(End-to-End) 신뢰할 수 있는 데이터 전송 보장 (예: TCP/UDP)
3Network (네트워크)서로 다른 네트워크 간의 데이터 라우팅 (경로 설정, IP 주소)
2Data Link (데이터 링크)동일 네트워크 내의 장치 간 데이터 전송 (MAC 주소, 오류 검출)
1Physical (물리)데이터를 전기적/물리적 신호(비트, 0과 1)로 변환하여 전송

S2: 배경, 컨텍스트 및 경계 (Background, Context & Scope)

Overview

OSI 모델이 등장하게 된 역사적 배경과 이 모델이 다루는 범위(Scope)의 경계를 명확히 합니다. 특히 이 모델이 ‘프로토콜’이 아닌 ‘참조 모델’임을 강조합니다.

Body

OSI 모델은 1984년에 ISO에 의해 공식적으로 채택되었습니다. 이 시기는 컴퓨터 네트워킹의 여명기로, IBM의 SNA, DEC의 DECnet 등 벤더 종속적인 여러 프로토콜이 난립하던 시기였습니다. 이러한 환경에서는 특정 벤더의 생태계에 종속될 수밖에 없었으며, 정부나 대형 기관에서 시스템을 통합하는 데 막대한 비용이 발생했습니다. OSI 모델은 이러한 ‘닫힌 시스템(Closed Systems)‘을 ‘개방형 시스템(Open Systems)‘으로 전환하려는 국제적인 노력의 산물이었습니다.

이 모델의 **범위 경계(Scope Boundary)**를 이해하는 것은 매우 중요합니다.

  1. 참조 모델 (Reference Model) vs. 구현 (Implementation): OSI 모델은 **‘무엇(What)’**을 해야 하는지를 정의하는 ‘청사진(Blueprint)‘이지, ‘어떻게(How)’ 구현해야 하는지에 대한 구체적인 프로토콜을 정의하지 않습니다. (물론 OSI 프로토콜 스위트가 존재했지만, 시장에서 성공하지 못했습니다.)
  2. 이론 (Theory) vs. 실제 (Practice): 오늘날 인터넷과 대부분의 네트워크는 OSI 모델이 아닌 **TCP/IP 모델(4계층)**을 기반으로 동작합니다. TCP/IP는 OSI 모델보다 먼저 개발되어 사실상의 표준(De facto standard)이 되었습니다.
  3. 학습 및 진단 도구: 그럼에도 불구하고 OSI 7계층 모델이 여전히 중요한 이유는, 네트워킹의 복잡한 과정을 교육하고, 네트워크 장애 발생 시 문제를 체계적으로 진단(Troubleshooting)하는 데 가장 강력하고 명확한 **개념적 도구(Conceptual Tool)**이기 때문입니다. (SX.E 참고)
Supporting Artifacts

아래 표는 OSI 모델의 컨텍스트를 이해하기 위한 핵심 용어를 구분합니다.

용어정의OSI 모델과의 관계
OSI 7계층 모델네트워킹 기능을 7개로 나눈 이론적 참조 모델 (청사진)본 문서의 주제. 표준(De jure)이지만 실제 구현은 적음.
TCP/IP 모델인터넷 프로토콜 스위트를 4개 계층으로 설명하는 실용적 모델오늘날 인터넷의 사실상(De facto) 표준. (SX.D 참고)
프로토콜 (Protocol)컴퓨터 간의 통신을 위한 ‘규약’ 또는 ‘규칙’ (예: HTTP, TCP, IP)OSI 모델의 각 계층은 특정 프로토콜들이 동작하는 장소.

S3: 핵심 개념 (Top Concepts)

Overview

OSI 모델의 동작 원리를 이해하는 데 필수적인 두 가지 핵심 개념, ‘캡슐화(Encapsulation) / 비캡슐화(Decapsulation)‘와 ‘PDU(Protocol Data Unit)‘에 대해 설명합니다.

Body

OSI 모델을 통한 데이터 통신은 ‘캡슐화’와 ‘비캡슐화’라는 두 가지 핵심 프로세스를 통해 이루어집니다.

  1. 캡슐화 (Encapsulation):

    • 송신 측(Sender)에서 발생하는 프로세스입니다.
    • 데이터는 최상위 계층인 L7(응용 계층)에서 시작하여 L1(물리 계층)까지 아래로(Down) 내려갑니다.
    • 각 계층은 상위 계층에서 받은 데이터(SDU, Service Data Unit)에 자신의 기능 수행에 필요한 제어 정보(예: 주소, 포트 번호, 오류 검증 코드)를 헤더(Header) (때로는 트레일러(Trailer))로 추가합니다.
    • 이 과정은 마치 데이터를 ‘포장’하거나 ‘봉투’에 넣는 것과 같습니다. L4는 L7-L5의 데이터를 포장하고, L3는 L4의 포장된 데이터를 다시 포장합니다.
  2. 비캡슐화 (Decapsulation):

    • 수신 측(Receiver)에서 발생하는 프로세스입니다.
    • 데이터는 최하위 계층인 L1(물리 계층)에서 시작하여 L7(응용 계층)까지 위로(Up) 올라갑니다.
    • 각 계층은 하위 계층에서 받은 데이터에서 자신이 추가했던(정확히는 송신 측의 동일 계층이 추가했던) 헤더와 트레일러를 ‘제거(Strip)‘하고 해석합니다.
    • 이 과정을 통해 ‘포장을 풀고’ 내부의 데이터를 상위 계층으로 전달합니다. L2는 L2 헤더를 제거하고 L3로, L3는 L3 헤더를 제거하고 L4로 올립니다.
  3. PDU (Protocol Data Unit):

    • PDU는 각 계층에서 헤더/트레일러가 추가(캡슐화)된 후의 데이터 단위를 부르는 공식 용어입니다.
    • 개발자는 이 PDU 용어를 명확히 구분하여 사용할 수 있어야 합니다. (예: “L4 방화벽이 세그먼트를 차단했다”, “라우터가 패킷을 드랍했다”)
Supporting Artifacts

아래 표는 각 계층별 PDU(Protocol Data Unit)의 명칭을 정의합니다.

계층 (번호)PDU 명칭 (EN)PDU 명칭 (한글)설명
7 (응용)Data데이터사용자가 생성한 순수 데이터 (예: HTTP 메시지)
6 (표현)Data데이터형식 변환/암호화된 데이터
5 (세션)Data데이터세션 정보가 포함된 데이터
4 (전송)Segment (TCP)
Datagram (UDP)
세그먼트
데이터그램
L4 헤더(포트 번호 등)가 추가된 단위. 신뢰성에 따라 이름이 다름.
3 (네트워크)Packet패킷L3 헤더(IP 주소 등)가 추가된 단위. 라우팅의 기본 단위.
2 (데이터 링크)Frame프레임L2 헤더(MAC 주소 등)와 트레일러(오류 검증)가 추가된 단위.
1 (물리)Bit (or Symbol)비트 (또는 심볼)전송 매체를 통해 흐르는 0과 1의 실제 물리적 신호.

S4: 모델 및 데이터 수명주기 (Model & Data Lifecycle)

Overview

OSI 모델은 정적인 구조가 아니라, 데이터가 통신을 위해 생성되고, 변환되며, 전송되고, 최종적으로 소멸(소비)되는 ‘수명주기(Lifecycle)‘를 정의합니다. 이 섹션은 캡슐화와 비캡슐화 과정을 중심으로 데이터의 전체 흐름을 시각화합니다.

Body

데이터의 수명주기는 송신 측의 캡슐화(Encapsulation) 단계와 수신 측의 비캡슐화(Decapsulation) 단계로 구성됩니다.

1. 송신 측 (Sender) - 캡슐화 (L7 → L1)

2. 수신 측 (Receiver) - 비캡슐화 (L1 → L7)

Supporting Artifacts

아래 다이어그램은 데이터가 송신자 A에서 수신자 B로 전달될 때의 캡슐화 및 비캡슐화 수명주기를 시각적으로 보여줍니다.

sequenceDiagram
    participant Sender_A as 송신자 A (애플리케이션)
    participant L7_A as L7 (응용)
    participant L4_A as L4 (전송)
    participant L3_A as L3 (네트워크)
    participant L2_A as L2 (데이터 링크)
    participant L1_A as L1 (물리)
    participant L1_B as L1 (물리)
    participant L2_B as L2 (데이터 링크)
    participant L3_B as L3 (네트워크)
    participant L4_B as L4 (전송)
    participant L7_B as L7 (응용)
    participant Receiver_B as 수신자 B (애플리케이션)

    Note over Sender_A, L1_A: 캡슐화 (Encapsulation)
    Sender_A->>L7_A: 데이터 생성 (HTTP Request)
    L7_A->>L4_A: [데이터]
    L4_A->>L3_A: [L4 헤더] + [데이터] (세그먼트)
    L3_A->>L2_A: [L3 헤더] + [L4 헤더 + 데이터] (패킷)
    L2_A->>L1_A: [L2 헤더] + [L3 헤더 + L4 헤더 + 데이터] + [L2 트레일러] (프레임)
    
    L1_A-->>L1_B: 010110... (비트 스트림 전송)

    Note over L1_B, Receiver_B: 비캡슐화 (Decapsulation)
    L1_B->>L2_B: [프레임]
    L2_B->>L3_B: [패킷] (L2 헤더/트레일러 제거)
    L3_B->>L4_B: [세그먼트] (L3 헤더 제거)
    L4_B->>L7_B: [데이터] (L4 헤더 제거)
    L7_B->>Receiver_B: 데이터 소비 (HTTP Request 처리)

S5: 계층별 기본 절차 및 기능 (Layer Procedures & Functions)

Overview

OSI 7계층 각각이 ‘어떻게(How it Works)’ 동작하는지, 즉 각 계층이 담당하는 구체적인 기능, 절차, 그리고 해당 계층에서 동작하는 대표적인 프로토콜 및 장비를 상세히 설명합니다.

Body

각 계층은 독립적인 기능을 수행하며, 하위 계층의 서비스를 이용하여 상위 계층에 서비스를 제공합니다.

Supporting Artifacts

아래 표는 각 계층의 핵심 기능과 주요 관련 요소를 요약 정리한 것입니다.

계층핵심 기능 (Function)주요 프로토콜 / 장치 / 개념
L7 (응용)최종 사용자 서비스 제공HTTP, DNS, FTP, SMTP, SSH
L6 (표현)데이터 형식 변환, 암호화, 압축SSL/TLS, JPEG, MPEG, ASCII
L5 (세션)통신 세션 수립, 관리, 종료RPC, NetBIOS, (TCP의 세션 기능)
L4 (전송)종단 간 신뢰성/흐름 제어, 포트 식별TCP, UDP, 포트 번호, 방화벽
L3 (네트워크)라우팅 (경로 설정), 논리 주소(IP) 지정IP, ICMP, ARP, 라우터
L2 (데이터 링크)로컬 전송, 물리 주소(MAC) 지정, 오류 감지이더넷, MAC 주소, 스위치, NIC
L1 (물리)비트(물리 신호) 전송케이블, 허브, 리피터, 전압

S6: 아키텍처 및 데이터 흐름 (Architecture & Data Flow)

Overview

OSI 모델의 구조적 아키텍처를 설명하며, 데이터가 실제 장치 내부와 네트워크를 통해 흐르는 두 가지 방식인 ‘수직적 흐름(Vertical Flow)‘과 ‘수평적 흐름(Horizontal Flow)‘을 구분하여 설명합니다.

Body

OSI 모델의 아키텍처는 두 가지 유형의 데이터 흐름으로 이해할 수 있습니다.

  1. 수직적 흐름 (Vertical Flow / Adjacent-Layer Interaction)

    • 이는 하나의 장치(Host) 내부에서 발생하는 데이터 흐름을 의미합니다.
    • S4에서 설명한 캡슐화(L7→L1)비캡슐화(L1→L7) 과정이 바로 이 수직적 흐름에 해당합니다.
    • 각 계층 N은 바로 아래 계층 N-1의 서비스를 호출하고, 바로 위 계층 N+1에게 서비스를 제공합니다. 예를 들어, L4(전송 계층)는 L3(네트워크 계층)가 제공하는 ‘패킷 전송 서비스’를 사용하여 L5(세션 계층)에게 ‘신뢰할 수 있는 세그먼트 전송 서비스’를 제공합니다.
    • 이 흐름은 실제 데이터가 스택을 오르내리는 물리적인(혹은 소프트웨어적인) 경로입니다.
  2. 수평적 흐름 (Horizontal Flow / Same-Layer Interaction)

    • 이는 **서로 다른 장치(Host A와 Host B)**에 있는 동일한 계층(Peer Layer) 간의 논리적인(Logical) 통신 흐름을 의미합니다.
    • 예를 들어, 송신자 A의 L4(전송 계층)는 수신자 B의 L4(전송 계층)와 직접 통신하는 것처럼 동작합니다. 송신자 A의 L4가 추가한 TCP 헤더(PDU: 세그먼트)는 오직 수신자 B의 L4만이 해석하고 응답합니다.
    • 중간에 있는 라우터(L3 장치)나 스위치(L2 장치)는 L4 헤더를 보거나 해석할 필요가 없습니다. (물론 방화벽이나 NAT는 예외적으로 L4를 검사합니다.)
    • 이 ‘논리적’ 수평 통신을 실제로 가능하게 하는 것이 바로 하위 계층을 이용한 ‘물리적’ 수직 통신(캡슐화)입니다. L4는 L3에게, L3는 L2에게, L2는 L1에게 데이터를 ‘위임’함으로써 자신의 논리적 통신을 완성합니다.
Supporting Artifacts

아래 다이어그램은 호스트 A와 호스트 B 간의 수직적(실제) 흐름과 수평적(논리적) 흐름을 보여줍니다.

graph TD
    subgraph 호스트 A (송신자)
        A7[L7: 응용]
        A6[L6: 표현]
        A5[L5: 세션]
        A4[L4: 전송]
        A3[L3: 네트워크]
        A2[L2: 데이터 링크]
        A1[L1: 물리]
        A7 -- 수직적 흐름 (캡슐화) --> A6
        A6 --> A5
        A5 --> A4
        A4 --> A3
        A3 --> A2
        A2 --> A1
    end

    subgraph 호스트 B (수신자)
        B7[L7: 응용]
        B6[L6: 표현]
        B5[L5: 세션]
        B4[L4: 전송]
        B3[L3: 네트워크]
        B2[L2: 데이터 링크]
        B1[L1: 물리]
        B1 -- 수직적 흐름 (비캡슐화) --> B2
        B2 --> B3
        B3 --> B4
        B4 --> B5
        B5 --> B6
        B6 --> B7
    end

    A1 -- 물리적 매체 (케이블/공기) --> B1

    %% 수평적 (논리적) 흐름
    A7 <--> B7
    A6 <--> B6
    A5 <--> B5
    A4 <--> B4
    A3 <--> B3
    A2 <--> B2

    linkStyle 0,1,2,3,4,5,7,8,9,10,11,12 stroke-width:2px,stroke:blue,stroke-dasharray: 5 5;
    linkStyle 6 stroke-width:4px,stroke:black;
    linkStyle 13,14,15,16,17,18 stroke-width:2px,stroke:red,stroke-dasharray: 2 2;

    classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;

S7: 기본 트레이드오프 및 안티패턴 (Trade-offs & Anti-Patterns)

Overview

OSI 모델의 계층화된 설계 원칙이 가져오는 이점(Trade-off: Pro)과 비용(Trade-off: Con)을 분석하고, 이 모델을 학습하거나 적용할 때 빠지기 쉬운 오해(Anti-Patterns)를 설명합니다.

Body

1. 트레이드오프: 계층화의 명암 (Layering Trade-offs)

OSI 모델의 핵심 디자인 원칙인 ‘계층화(Layering)‘는 명확한 이점을 제공하지만, 동시에 현실적인 비용을 수반합니다.

2. 안티패턴 및 일반적인 오해 (Anti-Patterns & Misconceptions)

Supporting Artifacts

아래 표는 계층화(Layering) 디자인 원칙의 트레이드오프를 요약합니다.

관점이점 (Pros)비용 (Cons)
설계/개발모듈성: 각 계층은 독립적으로 개발/수정 가능.기능 중복: 여러 계층에서 유사한 기능(예: 오류 제어)을 수행할 수 있음.
유지보수단순성: 문제 발생 시 해당 계층만 진단하면 됨 (SX.E).종속성: 엄격하게 지키지 않으면(계층 위반) 모듈성이 깨짐.
성능표준화: 상호 운용성 보장.오버헤드: 헤더 추가로 인한 대역폭 낭비 및 처리 시간 증가.

SX.D: 고급 주제 - OSI vs. TCP/IP 모델 비교 (Advanced: OSI vs. TCP/IP)

Overview

OSI 모델(이론적 참조 모델)과 TCP/IP 모델(실제 인터넷 모델)을 직접 비교합니다. 3-6년차 개발자는 두 모델의 차이점과 현실 세계에서 OSI 모델이 어떻게 TCP/IP 모델에 투영되는지 이해해야 합니다.

Body

네트워킹을 이해할 때 OSI 모델과 TCP/IP 모델은 항상 함께 언급됩니다. 두 모델은 목적과 구조에서 명확한 차이를 보입니다.

계층 매핑 (Layer Mapping)

개발자는 OSI 7계층을 기준으로 TCP/IP 4계층을 매핑하여 이해해야 합니다.

  1. OSI L5-L7 (응용, 표현, 세션)TCP/IP L4 (Application)
    • TCP/IP는 이 3개 계층의 기능을 애플리케이션(예: HTTP, FTP, SMTP)이 스스로 처리하도록 위임합니다. (예: TLS 암호화는 L6 기능이지만 L7 앱과 함께 동작)
  2. OSI L4 (전송)TCP/IP L3 (Transport)
    • 기능이 거의 동일합니다. 종단 간 통신(TCP, UDP)을 담당합니다.
  3. OSI L3 (네트워크)TCP/IP L2 (Internet)
    • 기능이 거의 동일합니다. IP 주소를 사용한 라우팅을 담당합니다.
  4. OSI L1-L2 (물리, 데이터 링크)TCP/IP L1 (Network Access / Link)
    • TCP/IP 모델은 이 영역을 구체적으로 정의하지 않고, 이더넷이나 Wi-Fi 같은 기존의 L1/L2 표준에 위임합니다.
Supporting Artifacts

아래 표는 OSI 7계층 모델과 TCP/IP 4계층 모델을 비교 매핑합니다.

OSI 7계층 모델TCP/IP 4계층 모델주요 기능 및 프로토콜
L7 (Application)<center>L4 (Application)</center>HTTP, FTP, SMTP, DNS, SSL/TLS
L6 (Presentation)
L5 (Session)
L4 (Transport)L3 (Transport)TCP, UDP, 포트 번호
L3 (Network)L2 (Internet)IP, ICMP, 라우터
L2 (Data Link)<center>L1 (Network Access / Link)</center>이더넷, MAC 주소, 스위치
L1 (Physical)

SX.E: 문제 해결 - OSI 모델 활용 (Troubleshooting with OSI)

Overview

OSI 7계층 모델이 실무에서 갖는 가장 큰 가치인 ‘네트워크 문제 해결(Troubleshooting)‘에 이 모델을 어떻게 적용하는지 설명합니다. 이는 실무 개발자가 네트워크 장애에 체계적으로 접근하는 방법을 제공합니다.

Body

네트워크 장애가 발생했을 때(예: “웹사이트에 접속이 안 돼요”), OSI 모델은 ‘감(Gut feeling)‘이 아닌 ‘체계적인 접근법’을 제공합니다. 접근 방식은 크게 세 가지입니다.

1. 상향식 접근 (Bottom-Up Approach)

2. 하향식 접근 (Top-Down Approach)

3. 분할 정복 접근 (Divide and Conquer Approach)

Supporting Artifacts

아래 표는 일반적인 네트워크 장애 증상과 가장 가능성이 높은 OSI 계층을 매핑합니다.

장애 증상 (Symptom)가장 의심되는 계층 (Likely Layer)진단 도구 / 확인 사항
“네트워크 케이블이 연결되지 않음” (Unplugged)L1 (물리)케이블 재연결, NIC LED 확인, Wi-Fi 신호 강도
IP 주소를 할당받지 못함 (DHCP 실패)L2 (데이터 링크) / L3 (네트워크)ipconfig / ifconfig, 스위치 연결 상태
내부망(LAN) 통신은 되지만 외부망(인터넷)이 안 됨L3 (네트워크)ping [Gateway IP], ping 8.8.8.8, traceroute
ping은 성공하지만 웹사이트 접속(HTTP)이 안 됨L4 (전송) / L7 (응용)telnet [domain] 80, 방화벽 설정(포트 차단), DNS 설정
“인증서 오류” (SSL/TLS Error)L6 (표현) / L7 (응용)시스템 날짜/시간 확인, 브라우저 인증서 캐시
특정 사이트만 매우 느리게 로드됨L4 (전송) / L7 (응용)혼잡 제어(TCP), 서버 측 성능 문제

Final Summary (FS)

OSI 7계층 모델은 현대 네트워크 통신의 복잡성을 이해하기 위한 필수적인 개념적 프레임워크입니다. 1980년대 상호 운용성 문제를 해결하기 위해 ISO에 의해 개발된 이 7계층(물리, 데이터 링크, 네트워크, 전송, 세션, 표현, 응용) 구조는 데이터가 어떻게 캡슐화되고(L7→L1) 비캡슐화되는지(L1→L7)의 수명주기를 명확히 정의합니다. 각 계층은 고유한 PDU(비트, 프레임, 패킷, 세그먼트)를 가지며, 논리적인 수평 통신을 위해 수직적인 흐름(서비스)을 이용합니다. 오늘날 인터넷은 실용적인 TCP/IP 4계층 모델을 따르지만, OSI 모델은 계층화의 트레이드오프(모듈성 vs. 오버헤드)를 이해하고, 네트워크 장애 발생 시 **체계적인 문제 해결(Troubleshooting)**을 수행하는 데 가장 강력한 이론적 도구로 남아있습니다.

Learning Guide (LG)

StageGoalTime(h)Outcome(metric)CheckEvidence(RF#)
1. 기본 개념 확립OSI 7계층의 존재 이유(Why)와 캡슐화/PDU 개념을 이해합니다.1.07계층의 순서와 각 PDU 이름을 암기하고 설명할 수 있습니다.7계층(S5)과 PDU(S3) 테이블을 완성할 수 있는가?S1, S3, S5
2. 모델 비교 및 흐름 이해OSI 모델과 TCP/IP 모델의 차이점, 그리고 데이터의 실제 흐름(수명주기)을 이해합니다.1.0OSI와 TCP/IP 계층을 매핑하는 다이어그램(SX.D)을 그릴 수 있습니다.데이터 캡슐화(S4) 다이어그램을 설명할 수 있는가?S2, S4, S6, SX.D
3. 실무 적용 (진단)네트워크 장애 증상을 보고 어떤 계층의 문제인지 체계적으로 추론할 수 있습니다.1.0‘Ping은 되는데 웹 접속이 안 될 때’의 원인을 3가지 이상 제시할 수 있습니다.장애 매핑(SX.E) 표의 80% 이상을 이해하고 있는가?S7, SX.E

Terminology (TERM)

용어(EN, 약어)한글정의역할/맥락관련 개념실무 연관성근거(RF#)
OSI ModelOSI 참조 모델네트워크 통신을 7개 계층으로 나눈 개념적 프레임워크.L1~L7TCP/IP Model네트워크 교육 및 장애 진단의 표준 이론.S1, S2
Encapsulation캡슐화(송신) 데이터가 하위 계층으로 내려가며 헤더가 추가되는 과정.L7 → L1Decapsulation, PDU데이터가 네트워크로 전송되기 위해 ‘포장’되는 방식.S3, S4
Decapsulation비캡슐화(수신) 데이터가 상위 계층으로 올라가며 헤더가 제거되는 과정.L1 → L7Encapsulation수신된 신호가 사용자가 볼 데이터로 ‘복원’되는 방식.S3, S4
PDU (Protocol Data Unit)프로토콜 데이터 단위각 계층에서 처리되는 데이터의 공식적인 단위 (예: 프레임, 패킷).L1~L7SDU“L3 PDU는 패킷이다"와 같이 계층별 데이터 명칭.S3
L3 (Network Layer)네트워크 계층IP 주소를 사용하여 서로 다른 네트워크 간의 라우팅(경로 설정)을 담당.L3IP, Router인터넷 통신, VPN, 서브네팅의 핵심.S5
L4 (Transport Layer)전송 계층포트 번호를 사용하여 종단 간(End-to-End) 신뢰성(TCP)을 담당.L4TCP, UDP, Port방화벽 설정, 서비스 식별(예: 80, 443)의 핵심.S5
L2 (Data Link Layer)데이터 링크 계층MAC 주소를 사용하여 동일 네트워크 내의 노드 간 전송을 담당.L2MAC, Switch, EthernetLAN 통신, 스위칭, VLAN의 핵심.S5
TCP/IP ModelTCP/IP 모델4계층으로 구성된 인터넷의 실질적인(De facto) 표준 모델.-OSI Model현재 모든 인터넷 서비스가 이 모델을 기반으로 동작함.S2, SX.D
Troubleshooting문제 해결 (장애 진단)OSI 모델을 활용하여 네트워크 장애 원인을 계층별로 체계적으로 식별하는 과정.SX.EBottom-Up, Top-Down네트워크 장애 시 개발자의 1차 대응 능력.SX.E

References (REF)

  1. 7 Layers Explained: OSI Model Guide - NordLayer
  2. OSI model - Wikipedia
  3. Data Encapsulation and De-encapsulation Explained - ComputerNetworkingNotes
  4. Top Difference Between OSI and TCP/IP Model (2025) - PyNet Labs
  5. What is the OSI Model? Understanding the 7 Layers - Check Point Software
  6. 7 Layers of OSI Model: Their Functions and Protocols - Hero Vired
  7. How to use the OSI Model for Network Troubleshooting - Petri IT Knowledgebase
  8. What is the Physical Layer in OSI Model? - Sepio Cyber
  9. Data link layer - Wikipedia
  10. What Is the OSI Model? | IBM
  11. Transport layer - Wikipedia
  12. Session layer - Wikipedia
  13. What is the presentation layer in the OSI model? - IONOS
  14. Can I practically explain OSI model using FTP ? : r/networking - Reddit
  15. The OSI Model: An Overview - GIAC Certifications

안녕하세요! OSI 7계층에 대한 체계적인 기술 문서를 작성하겠습니다. 템플릿의 2-Phase RF 워크플로우에 따라 단계별로 진행하겠습니다.

Step 1: IHR (입력 정규화 및 검증)

입력값 검증 완료:

Step 2: RF Phase 1 - 기초 조사 및 타입 판정 신호 수집

OSI 7계층에 대한 Seeds 수집을 시작하겠습니다.Seeds 수집이 완료되었습니다 (40개 > 최소 15개 요구사항 충족). 이제 Phase 1 조사 결과를 정리하고 TTDM 단계로 진행하겠습니다.

Step 3: RF Phase 1 산출물 생성 (RF.TopicSignals)

조사 결과를 바탕으로 다음 신호를 생성했습니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "s1_summary": "OSI 7계층 모델은 ISO/IEC 7498-1 표준으로 정의된 네트워크 통신의 개념적 프레임워크입니다. 1984년 ISO에 의해 공식 표준으로 채택되었으며, 물리 계층부터 응용 계층까지 7개의 계층으로 구성됩니다. 각 계층은 독립적인 기능을 수행하며, 계층 간 PDU(Protocol Data Unit)를 통해 데이터를 교환합니다. 현대 인터넷은 TCP/IP 모델을 기반으로 하지만, OSI 모델은 네트워크 교육, 문제 해결, 표준화의 기준으로 여전히 널리 사용됩니다.",
  
  "s2_type_signals": [
    "distributed systems", "networking protocols", "network layer", 
    "protocol stack", "layered architecture", "data link", "physical layer",
    "encapsulation", "PDU", "ISO standard", "reference model",
    "TCP/IP comparison", "interoperability", "protocol independence"
  ],
  
  "s3_candidate_keys": [
    {"key": "Encapsulation-Decapsulation", "relevance": 0.95},
    {"key": "PDU-Types-Per-Layer", "relevance": 0.92},
    {"key": "TCP-IP-Mapping", "relevance": 0.90},
    {"key": "ISO-IEC-7498-1-Standard", "relevance": 0.88},
    {"key": "Layer-Independence-Principle", "relevance": 0.85},
    {"key": "Service-Primitives", "relevance": 0.82},
    {"key": "Connection-vs-Connectionless", "relevance": 0.80},
    {"key": "OSI-Protocols-History", "relevance": 0.75}
  ]
}

Step 4: TTDM - Type Code 판정 및 구조 확정

Type Code 판정: T-DSYS (분산 시스템 및 네트워킹)

S2 필수 키(★) 로드 (T-DSYS 레지스터에서):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
  "type_code": "T-DSYS",
  "confidence": 0.92,
  "s2_skeleton": [
    {"key": "T-DSYS-K1", "name": "CAP 정리 (CAP Theorem)"},
    {"key": "T-DSYS-K2", "name": "합의 알고리즘 (Consensus)"},
    {"key": "T-DSYS-K3", "name": "복제 전략 (Replication)"},
    {"key": "T-DSYS-K4", "name": "일관성 모델 (Consistency Models)"},
    {"key": "T-DSYS-K5", "name": "네트워크 프로토콜 (Protocols)"}
  ],
  "s3_skeleton": [
    {"key": "Topic-A1", "name": "Encapsulation 및 Decapsulation 메커니즘"},
    {"key": "Topic-A2", "name": "각 계층별 PDU 타입 및 구조"},
    {"key": "Topic-A3", "name": "TCP/IP 모델과의 매핑 관계"},
    {"key": "Topic-A4", "name": "ISO/IEC 7498-1 표준 명세"},
    {"key": "Topic-A5", "name": "계층 독립성 원칙과 서비스 경계"}
  ]
}

이제 RF Phase 2로 진입하여 S2/S3의 근거 자료를 수집하겠습니다. 잠시만 기다려 주세요…지금까지 총 60개 이상의 Seeds를 수집했습니다. 이제 최종 문서 생성을 위해 모든 데이터를 통합하겠습니다.

Step 5: RF Phase 2 완료 및 최종 문서 생성

수집된 모든 자료를 바탕으로 OSI 7계층 모델에 대한 완전한 기술 문서를 생성하겠습니다. 템플릿의 모든 규칙(§0-§7)을 준수하여 작성하겠습니다.


Topic: OSI 7계층(OSI Reference Model)
Current Classification: Networking & Protocols > Network Fundamentals > Basic Concepts > Network Models
Review: OK

Summary

OSI 7계층 모델은 ISO/IEC 7498-1 표준으로 정의된 네트워크 통신의 개념적 참조 프레임워크입니다. 물리 계층부터 응용 계층까지 7개의 독립적인 계층으로 구성되며, 각 계층은 특정 기능을 수행하고 PDU(Protocol Data Unit)를 통해 데이터를 교환합니다. 1984년 ISO에 의해 공식 표준으로 채택되었으며, 현대 인터넷은 TCP/IP 모델을 기반으로 하지만 OSI 모델은 네트워크 교육, 표준화, 문제 해결의 기준으로 여전히 널리 사용됩니다.

Overview

OSI(Open Systems Interconnection) 모델은 1970년대 후반 ISO(International Organization for Standardization)와 ITU(International Telecommunication Union)가 주도하여 개발한 네트워크 통신의 표준 참조 모델입니다. 당시 IBM의 SNA, DEC의 DECnet 등 다양한 독점 네트워킹 프로토콜이 혼재하던 상황에서, 서로 다른 시스템 간 상호운용성(interoperability)을 보장하기 위한 공통 프레임워크의 필요성이 대두되었습니다.

OSI 모델은 복잡한 네트워크 통신을 7개의 논리적 계층으로 분리하여, 각 계층이 독립적으로 특정 기능을 수행하도록 설계되었습니다. 이러한 계층적 구조는 개발자가 특정 계층에 집중할 수 있게 하고, 기술 변화에 유연하게 대응할 수 있도록 합니다. 모델은 연결 지향(connection-oriented)과 비연결(connectionless) 통신을 모두 지원하며, 프로토콜 독립적(protocol-agnostic)이기 때문에 다양한 네트워크 기술에 적용 가능합니다.

OSI 모델의 범위는 단말기, 컴퓨터 및 관련 장치로 구성된 시스템 간 정보 전송에 주로 초점을 맞추고 있습니다. 모델은 구현 명세가 아닌 개념적 프레임워크로, 각 계층의 기능을 정의하고 표준 개발을 위한 공통 기반을 제공하는 것이 목적입니다. 비록 OSI 프로토콜 스위트 자체는 복잡성과 구현의 어려움으로 널리 채택되지 못했지만, 7계층 모델은 네트워킹 개념의 표준화에 중요한 기여를 했으며 현재까지도 교육과 문제 해결의 기준으로 활용되고 있습니다.

Tags

t-dsys network-protocols layered-architecture encapsulation pdu iso-standard tcp-ip-mapping interoperability service-primitives troubleshooting


S1: Foundation (Beginner) - OSI 7계층 필수 기초

Overview

S1 섹션은 OSI 7계층 모델을 처음 학습하는 독자를 위해 모델의 기본 개념, 탄생 배경, 7개 계층의 핵심 정의, 그리고 가장 단순한 통신 예제를 통해 모델의 전체적인 작동 원리를 이해할 수 있도록 구성되었습니다.

S1.1: OSI 모델의 탄생 배경과 핵심 정의

Overview

OSI 모델이 왜 필요했는지, 어떤 문제를 해결하기 위해 만들어졌는지, 그리고 모델의 기본 개념을 명확히 이해합니다.

Body

1970년대 초반, 컴퓨터 네트워킹 분야는 각 제조사가 독자적인 프로토콜과 아키텍처를 개발하던 시기였습니다. IBM의 Systems Network Architecture(SNA), Digital Equipment Corporation의 DECnet, Xerox의 XNS 등 다양한 독점 네트워킹 솔루션이 존재했으며, 이들은 서로 호환되지 않았습니다. 이러한 상황은 서로 다른 제조사의 시스템 간 통신을 매우 어렵게 만들었고, 네트워크 확장성과 상호운용성에 심각한 제약을 가져왔습니다.

이러한 문제를 해결하기 위해 1977년 ISO는 네트워크 통신 표준화 작업을 시작했습니다. 1983년에는 CCITT(현 ITU-T)와 ISO의 문서가 병합되어 “Open Systems Interconnection Reference Model"이 탄생했고, 1984년 ISO 7498 표준과 ITU-T X.200 권고안으로 공식 발표되었습니다. “Open Systems"라는 용어는 상호 적용 가능한 표준을 준수함으로써 서로 다른 시스템이 개방적으로 연결될 수 있음을 의미합니다.

OSI 모델의 핵심 정의는 다음과 같습니다. 첫째, 통신 시스템을 7개의 추상화 계층으로 구분합니다(Physical, Data Link, Network, Transport, Session, Presentation, Application). 둘째, 각 계층은 명확하게 정의된 기능과 의미를 가지며, 상위 계층에 서비스를 제공하고 하위 계층의 서비스를 사용합니다. 셋째, 계층 간 통신은 Service Access Point(SAP)를 통해 이루어지며, Service Primitives(request, indication, response, confirm)를 사용합니다. 넷째, 동일 계층의 원격 엔티티 간 통신은 peer-to-peer 방식으로 이루어지며, Protocol Data Unit(PDU)를 교환합니다.

ISO/IEC 7498-1 표준은 OSI 기본 참조 모델을 정의하며, 추가로 Part 2(보안 아키텍처), Part 3(명명 및 주소 지정), Part 4(관리 프레임워크)로 구성됩니다. 모델의 목적은 구현 명세를 제공하는 것이 아니라, 표준 개발을 위한 공통 기반을 제공하고, 기존 표준을 전체 참조 모델 내에서 적절히 배치하며, 표준 개발 또는 개선이 필요한 영역을 식별하는 것입니다.

Supporting Artifacts

표 S1.1-1: OSI 모델의 역사적 주요 이정표

연도이정표설명
1977표준화 작업 시작ISO와 ITU가 네트워크 통신 표준화를 위한 공동 작업 개시
1983CCITT-ISO 문서 병합두 조직의 작업이 통합되어 OSI 기본 참조 모델 초안 완성
1984공식 표준 발표ISO 7498 (ISO) 및 X.200 (ITU-T)으로 공식 발표
1994개정판 발표ISO/IEC 7498-1:1994 제2판 발표, 비연결 시스템 개념 통합
2000재확인ISO/IEC 7498-1:1994가 재검토되고 현행 유지로 확인

코드 예제 S1.1-1: Service Primitives의 개념적 표현

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Service Primitives의 개념적 구현 예제
# 계층 N+1이 계층 N의 서비스를 요청하는 과정

class ServicePrimitive:
    """OSI 모델의 Service Primitive 개념적 표현"""
    def __init__(self, primitive_type, parameters):
        self.type = primitive_type  # request, indication, response, confirm
        self.parameters = parameters
        self.timestamp = None

class LayerN:
    """OSI 계층 N의 추상적 표현"""
    def __init__(self, layer_name):
        self.name = layer_name
        self.upper_layer = None
        self.lower_layer = None
    
    def request(self, data, destination_sap):
        """상위 계층으로부터 서비스 요청 수신"""
        print(f"{self.name}: Received request from upper layer")
        primitive = ServicePrimitive("request", {
            "data": data,
            "dest_sap": destination_sap
        })
        # 하위 계층으로 전달
        if self.lower_layer:
            self.lower_layer.indication(primitive)
    
    def indication(self, primitive):
        """하위 계층으로부터 indication 수신"""
        print(f"{self.name}: Indication received")
        # 상위 계층으로 전달
        if self.upper_layer:
            self.upper_layer.process_indication(primitive)

# 사용 예제
transport_layer = LayerN("Transport Layer")
network_layer = LayerN("Network Layer")

transport_layer.lower_layer = network_layer
network_layer.upper_layer = transport_layer

# 데이터 전송 요청
transport_layer.request(data="Hello OSI", destination_sap="192.168.1.1")

S1.2: 7개 계층의 핵심 기능과 역할

Overview

OSI 모델의 7개 계층을 하나씩 살펴보며, 각 계층의 주요 기능, 담당 역할, 그리고 대표적인 프로토콜과 장비를 이해합니다.

Body

OSI 모델의 7개 계층은 하위 계층에서 상위 계층으로 올라갈수록 더 추상화된 기능을 제공합니다. 각 계층은 번호와 이름으로 참조되며, 계층 1이 가장 낮은 물리 계층, 계층 7이 가장 높은 응용 계층입니다.

**계층 1 - 물리 계층(Physical Layer)**은 장치 간 비구조화된 원시 데이터의 전송과 수신을 담당합니다. 디지털 비트를 전기 신호, 광 신호 또는 무선 신호(아날로그 신호)로 변환하는 역할을 수행합니다. 이 계층의 사양은 전압 레벨, 전압 변화 타이밍, 물리적 데이터 전송 속도, 최대 전송 거리, 변조 방식, 채널 접근 방법, 물리적 커넥터 등을 정의합니다. 대표적인 기술로는 Ethernet(IEEE 802.3), Wi-Fi(IEEE 802.11), USB, RS-232가 있으며, 리피터와 허브가 이 계층에서 동작합니다.

**계층 2 - 데이터 링크 계층(Data Link Layer)**은 동일 네트워크상의 두 노드 간 신뢰성 있는 링크를 제공합니다. 프레임을 생성하여 물리 주소(MAC 주소)를 추가하고, 오류 검출 및 수정 기능을 수행합니다. IEEE 802 표준은 이 계층을 MAC(Media Access Control)과 LLC(Logical Link Control) 두 개의 하위 계층으로 분리합니다. MAC 하위 계층은 물리 매체에 대한 접근을 제어하고 프레임 헤더에 출발지 및 목적지 MAC 주소를 포함시킵니다. LLC 하위 계층은 흐름 제어와 오류 제어를 담당합니다. 스위치와 브리지가 이 계층에서 동작하며, Ethernet, PPP, HDLC, Frame Relay 등의 프로토콜이 사용됩니다.

**계층 3 - 네트워크 계층(Network Layer)**은 서로 다른 네트워크 간 데이터 패킷의 라우팅과 포워딩을 담당합니다. 논리적 주소 지정(IP 주소)을 제공하고, 패킷이 출발지에서 목적지까지 도달하는 최적 경로를 결정합니다. 네트워크 계층은 연결 지향(CONS, Connection-Oriented Network Service)과 비연결(CLNS, Connectionless Network Service) 모드를 모두 지원합니다. 주요 기능으로는 주소 지정(addressing), 패킷 조립 및 분해, 오류 처리, 혼잡 제어가 있습니다. 대표적인 프로토콜로는 IPv4(RFC 791), IPv6(RFC 2460), ICMP(RFC 792), IGMP(RFC 1112), IS-IS(ISO/IEC 10589)가 있으며, 라우터가 이 계층에서 동작합니다.

**계층 4 - 전송 계층(Transport Layer)**은 출발지와 목적지 호스트 간 종단 간(end-to-end) 통신을 제공합니다. 가변 길이 데이터 시퀀스를 세그먼트로 분할하고, 데이터의 신뢰성 있는 전송을 보장합니다. 전송 계층은 연결 지향 프로토콜(TCP)과 비연결 프로토콜(UDP)을 모두 지원합니다. TCP는 순서 보장, 오류 복구, 흐름 제어, 혼잡 제어 기능을 제공하는 반면, UDP는 오버헤드가 낮고 실시간 성능이 중요한 응용에 적합합니다. 포트 번호를 사용하여 동일 호스트 내에서 여러 응용 프로그램을 구별합니다. 방화벽이 주로 이 계층에서 패킷을 검사하고 제어합니다.

**계층 5 - 세션 계층(Session Layer)**은 응용 프로그램 간 연결(세션)의 설정, 관리, 종료를 담당합니다. 대화 제어(dialog control)를 통해 전이중(full-duplex), 반이중(half-duplex) 또는 단방향(simplex) 통신을 지원합니다. 체크포인트, 중단, 종료, 재시작 절차를 제공하여 세션의 동기화와 복구를 가능하게 합니다. OSI 모델에서는 이 계층을 TCP가 일부 담당합니다. 대표적인 프로토콜로는 NetBIOS, PPTP, RPC가 있습니다. 실제 TCP/IP 환경에서는 세션 계층의 기능이 응용 계층이나 전송 계층에 통합되는 경우가 많습니다.

**계층 6 - 표현 계층(Presentation Layer)**은 응용 계층과 네트워크 형식 간의 데이터 표현을 표준화합니다. 데이터 형식 변환(translation), 암호화/복호화(encryption/decryption), 압축/압축 해제(compression/decompression) 기능을 수행합니다. 예를 들어, ASCII와 EBCDIC 간 변환, JPEG 이미지 인코딩, TLS/SSL 암호화 등이 이 계층의 기능입니다. 이 계층은 데이터의 구문(syntax)과 의미(semantics)를 다루며, 응용 프로그램이 데이터를 이해할 수 있는 형식으로 변환합니다. 실제 구현에서는 응용 계층에 통합되는 경우가 많습니다.

**계층 7 - 응용 계층(Application Layer)**은 최상위 계층으로, 사용자 또는 응용 프로그램이 네트워크 서비스에 접근할 수 있는 인터페이스를 제공합니다. 이 계층은 실제 사용자 응용 프로그램(예: 웹 브라우저)이 아니라, 네트워크 통신을 가능하게 하는 응용 서비스를 의미합니다. 대표적인 프로토콜로는 HTTP/HTTPS(웹), FTP(파일 전송), SMTP/POP3/IMAP(이메일), DNS(도메인 이름 해석), Telnet/SSH(원격 접속), SNMP(네트워크 관리)가 있습니다. 이 계층에서 사용자는 파일 전송, 이메일 송수신, 웹 브라우징 등의 네트워크 서비스를 이용합니다.

Supporting Artifacts

표 S1.2-1: OSI 7계층 요약

계층이름주요 기능PDU대표 프로토콜/장비
7Application사용자 인터페이스, 네트워크 서비스 제공DataHTTP, FTP, SMTP, DNS
6Presentation데이터 형식 변환, 암호화, 압축DataTLS/SSL, JPEG, MPEG
5Session세션 설정/관리/종료, 동기화DataNetBIOS, PPTP, RPC
4Transport종단 간 연결, 신뢰성, 흐름 제어Segment/DatagramTCP, UDP, 방화벽
3Network라우팅, 논리적 주소 지정PacketIP, ICMP, 라우터
2Data Link프레임 생성, 물리적 주소 지정, 오류 검출FrameEthernet, PPP, 스위치
1Physical비트 전송, 물리적 매체BitEthernet, Wi-Fi, 허브

다이어그램 S1.2-1: OSI 7계층 구조

graph TB
    subgraph "OSI 7계층 모델"
        L7[계층 7: Application<br/>네트워크 서비스 인터페이스<br/>HTTP, FTP, SMTP, DNS]
        L6[계층 6: Presentation<br/>데이터 표현, 암호화, 압축<br/>TLS/SSL, JPEG, ASCII]
        L5[계층 5: Session<br/>세션 관리, 동기화<br/>NetBIOS, RPC]
        L4[계층 4: Transport<br/>종단 간 연결, 신뢰성<br/>TCP, UDP - Segment/Datagram]
        L3[계층 3: Network<br/>라우팅, 논리 주소<br/>IP, ICMP - Packet]
        L2[계층 2: Data Link<br/>프레임, 물리 주소, 오류 검출<br/>Ethernet, PPP - Frame]
        L1[계층 1: Physical<br/>비트 전송, 물리 매체<br/>케이블, 신호 - Bit]
    end
    
    L7 --> L6
    L6 --> L5
    L5 --> L4
    L4 --> L3
    L3 --> L2
    L2 --> L1
    L1 --> PM[물리 매체<br/>Twisted Pair, Fiber, Wireless]
    
    style L7 fill:#e1f5ff
    style L6 fill:#e1f5ff
    style L5 fill:#e1f5ff
    style L4 fill:#fff9e1
    style L3 fill:#ffe1e1
    style L2 fill:#ffe1e1
    style L1 fill:#ffe1e1
    style PM fill:#f0f0f0

S1.3: 데이터 통신의 기본 흐름 - Hello World 예제

Overview

OSI 모델을 통해 실제 데이터가 어떻게 송신자에서 수신자로 전달되는지, 가장 단순한 “Hello World” 메시지 전송 예제를 통해 이해합니다.

Body

OSI 모델에서 데이터 통신은 송신자 측에서 계층 7에서 계층 1로 하향 이동(encapsulation)하고, 수신자 측에서 계층 1에서 계층 7로 상향 이동(decapsulation)하는 과정을 거칩니다. 이 과정에서 각 계층은 자신의 프로토콜 정보를 헤더(header) 또는 트레일러(trailer)로 추가하거나 제거합니다.

송신자 측 - Encapsulation 과정

사용자가 웹 브라우저를 통해 “Hello World"라는 메시지를 웹 서버로 전송한다고 가정하겠습니다.

계층 7 (응용 계층): 사용자가 웹 브라우저에서 폼을 작성하고 제출 버튼을 클릭합니다. HTTP 프로토콜이 이 데이터를 HTTP 요청 메시지로 변환합니다. 이 시점에서 데이터는 순수한 응용 데이터입니다.

계층 6 (표현 계층): 데이터가 네트워크를 통해 전송될 수 있는 형식으로 변환됩니다. 예를 들어, 데이터가 UTF-8로 인코딩되거나, TLS/SSL을 사용하는 경우 암호화될 수 있습니다.

계층 5 (세션 계층): 송신자와 수신자 간의 세션이 설정됩니다. TCP 기반 통신의 경우, 이 기능은 전송 계층에 통합되어 있습니다.

계층 4 (전송 계층): 데이터가 세그먼트로 분할됩니다. TCP 헤더가 추가되며, 이 헤더에는 출발지 포트 번호(예: 임시 포트 50234), 목적지 포트 번호(예: HTTP의 80), 시퀀스 번호, 확인 응답 번호, 체크섬 등이 포함됩니다. 이 단계에서 PDU는 “Segment"라고 불립니다.

계층 3 (네트워크 계층): 세그먼트에 IP 헤더가 추가되어 패킷이 생성됩니다. IP 헤더에는 출발지 IP 주소(예: 192.168.1.100), 목적지 IP 주소(예: 203.0.113.50), TTL(Time To Live), 프로토콜 식별자(TCP=6) 등이 포함됩니다. 이 단계에서 PDU는 “Packet"이라고 불립니다.

계층 2 (데이터 링크 계층): 패킷에 Ethernet 헤더와 트레일러가 추가되어 프레임이 생성됩니다. Ethernet 헤더에는 출발지 MAC 주소, 목적지 MAC 주소(로컬 네트워크의 다음 홉, 일반적으로 기본 게이트웨이), EtherType(IPv4=0x0800) 등이 포함됩니다. 트레일러에는 FCS(Frame Check Sequence)가 포함되어 프레임의 무결성을 검증합니다. 이 단계에서 PDU는 “Frame"이라고 불립니다.

계층 1 (물리 계층): 프레임이 비트 스트림으로 변환되어 물리 매체(예: Ethernet 케이블, Wi-Fi 무선 신호)를 통해 전송됩니다. Ethernet의 경우, 비트는 전기 신호로 변환되며, Wi-Fi의 경우 무선 전파로 변환됩니다.

수신자 측 - Decapsulation 과정

데이터가 물리 매체를 통해 수신자에게 도달하면, 역순으로 계층을 거슬러 올라가며 각 계층의 헤더와 트레일러가 제거됩니다.

계층 1: 물리 신호가 비트 스트림으로 변환되어 데이터 링크 계층으로 전달됩니다.

계층 2: FCS를 검증하여 프레임의 무결성을 확인합니다. Ethernet 헤더를 제거하고, 목적지 MAC 주소가 자신의 주소와 일치하는지 확인한 후, 패킷을 네트워크 계층으로 전달합니다.

계층 3: IP 헤더를 검사하여 목적지 IP 주소가 자신의 주소와 일치하는지 확인하고, TTL을 확인합니다. IP 헤더를 제거하고, 프로토콜 식별자(TCP)를 확인한 후, 세그먼트를 전송 계층으로 전달합니다.

계층 4: TCP 헤더를 검사하여 목적지 포트 번호(80)를 확인하고, 시퀀스 번호와 체크섬을 검증합니다. 필요한 경우 세그먼트를 재조립하고, TCP 헤더를 제거한 후, 데이터를 응용 계층으로 전달합니다.

계층 5-7: 세션이 관리되고, 데이터 형식이 변환되며(예: TLS 복호화), 최종적으로 HTTP 요청이 웹 서버 응용 프로그램으로 전달됩니다. 웹 서버는 “Hello World” 메시지를 받아 처리합니다.

이 과정을 통해 단순한 “Hello World” 메시지가 7개의 계층을 거쳐 송신자에서 수신자로 안전하고 신뢰성 있게 전달됩니다.

Supporting Artifacts

다이어그램 S1.3-1: 데이터 통신 흐름 (Encapsulation/Decapsulation)

sequenceDiagram
    participant User as 사용자
    participant L7 as 계층 7<br/>Application
    participant L4 as 계층 4<br/>Transport
    participant L3 as 계층 3<br/>Network
    participant L2 as 계층 2<br/>Data Link
    participant L1 as 계층 1<br/>Physical
    participant Media as 물리 매체
    participant R_L1 as 계층 1<br/>(수신)
    participant R_L2 as 계층 2<br/>(수신)
    participant R_L3 as 계층 3<br/>(수신)
    participant R_L4 as 계층 4<br/>(수신)
    participant R_L7 as 계층 7<br/>(수신)
    participant Server as 서버

    User->>L7: "Hello World" 메시지 전송
    L7->>L4: HTTP 요청 (Data)
    L4->>L3: TCP 세그먼트 추가<br/>(포트 80, Seq#)
    L3->>L2: IP 패킷 추가<br/>(출발/목적지 IP)
    L2->>L1: Ethernet 프레임 추가<br/>(출발/목적지 MAC)
    L1->>Media: 비트 스트림 전송<br/>(전기/광/무선 신호)
    
    Media->>R_L1: 신호 수신
    R_L1->>R_L2: 비트 → 프레임
    R_L2->>R_L3: Ethernet 헤더 제거<br/>MAC 주소 검증
    R_L3->>R_L4: IP 헤더 제거<br/>IP 주소 검증
    R_L4->>R_L7: TCP 헤더 제거<br/>포트, Seq# 검증
    R_L7->>Server: "Hello World" 전달

코드 예제 S1.3-1: 단순화된 Encapsulation 과정 시뮬레이션

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# OSI 계층별 Encapsulation 과정의 개념적 시뮬레이션

class OSILayer:
    def __init__(self, layer_num, layer_name):
        self.layer_num = layer_num
        self.name = layer_name
    
    def encapsulate(self, data, header_info):
        """데이터에 헤더 추가 (Encapsulation)"""
        return {
            'header': header_info,
            'payload': data
        }
    
    def decapsulate(self, pdu):
        """헤더 제거하고 페이로드 반환 (Decapsulation)"""
        print(f"{self.name}: Removing header {pdu['header']}")
        return pdu['payload']

# 송신자 측 - Encapsulation
def send_message(message):
    """OSI 계층을 통한 메시지 전송 시뮬레이션"""
    print("=== 송신자: Encapsulation 시작 ===")
    
    # Layer 7: Application
    data = message
    print(f"L7 Application: Original message = '{data}'")
    
    # Layer 4: Transport (TCP 헤더 추가)
    transport_layer = OSILayer(4, "Transport")
    segment = transport_layer.encapsulate(
        data, 
        "TCP[SrcPort:50234, DstPort:80, Seq:1000]"
    )
    print(f"L4 Transport: Added TCP header -> {segment['header']}")
    
    # Layer 3: Network (IP 헤더 추가)
    network_layer = OSILayer(3, "Network")
    packet = network_layer.encapsulate(
        segment,
        "IP[Src:192.168.1.100, Dst:203.0.113.50, TTL:64]"
    )
    print(f"L3 Network: Added IP header -> {packet['header']}")
    
    # Layer 2: Data Link (Ethernet 헤더 추가)
    datalink_layer = OSILayer(2, "Data Link")
    frame = datalink_layer.encapsulate(
        packet,
        "Ethernet[SrcMAC:00:11:22:33:44:55, DstMAC:AA:BB:CC:DD:EE:FF]"
    )
    print(f"L2 Data Link: Added Ethernet header -> {frame['header']}")
    
    # Layer 1: Physical (비트로 변환)
    print("L1 Physical: Converting to bit stream... 01001000 01100101...")
    
    return frame

# 수신자 측 - Decapsulation
def receive_message(frame):
    """OSI 계층을 통한 메시지 수신 시뮬레이션"""
    print("\n=== 수신자: Decapsulation 시작 ===")
    
    # Layer 1: Physical
    print("L1 Physical: Received bit stream, converting to frame...")
    
    # Layer 2: Data Link
    datalink_layer = OSILayer(2, "Data Link")
    packet = datalink_layer.decapsulate(frame)
    
    # Layer 3: Network
    network_layer = OSILayer(3, "Network")
    segment = network_layer.decapsulate(packet)
    
    # Layer 4: Transport
    transport_layer = OSILayer(4, "Transport")
    data = transport_layer.decapsulate(segment)
    
    # Layer 7: Application
    print(f"L7 Application: Received message = '{data}'")
    
    return data

# 실행
original_message = "Hello World"
frame = send_message(original_message)
received_message = receive_message(frame)

print(f"\n송신 메시지: '{original_message}'")
print(f"수신 메시지: '{received_message}'")
print(f"전송 성공: {original_message == received_message}")

S2: Type-Specific Knowledge (Intermediate) - T-DSYS

Overview

S2 섹션은 OSI 모델이 속한 분산 시스템 및 네트워킹(T-DSYS) 유형의 핵심 중급 지식을 다룹니다. CAP 정리부터 네트워크 프로토콜까지 5가지 필수 주제를 통해 OSI 모델이 실제 분산 시스템에서 어떻게 활용되는지 이해합니다.

S2.1: CAP 정리 (CAP Theorem)

Overview

CAP 정리는 분산 시스템에서 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance) 중 최대 2가지만 동시에 보장할 수 있다는 이론입니다. OSI 모델의 계층별 설계 결정은 CAP 트레이드오프에 영향을 받습니다.

Body

CAP 정리는 2000년 Eric Brewer가 제안하고 2002년 Gilbert와 Lynch가 수학적으로 증명한 분산 컴퓨팅의 기본 정리입니다. 이 정리는 분산 데이터 저장소가 다음 세 가지 보장 중 동시에 세 가지 모두를 제공할 수 없음을 명시합니다.

일관성(Consistency): 모든 노드가 동일한 시점에 동일한 데이터를 보는 것을 보장합니다. 한 노드에서 데이터를 업데이트하면, 다른 모든 노드가 즉시 업데이트된 데이터를 반환해야 합니다.

가용성(Availability): 모든 요청이 (장애가 없는 노드로부터) 응답을 받는 것을 보장합니다. 시스템의 일부 노드가 실패하더라도, 나머지 노드는 계속 요청을 처리할 수 있어야 합니다.

분할 내성(Partition Tolerance): 네트워크 분할(네트워크가 둘 이상의 부분으로 분리되어 노드 간 통신이 불가능한 상황)이 발생해도 시스템이 계속 작동할 수 있어야 합니다.

OSI 모델과 CAP의 관계를 이해하려면, 각 계층에서의 설계 결정이 CAP 트레이드오프에 어떻게 영향을 미치는지 살펴봐야 합니다.

**네트워크 계층(Layer 3)**에서 IP 프로토콜은 기본적으로 “best-effort” 전송을 제공하며, 이는 분할 내성을 우선시합니다. 패킷이 손실되거나 순서가 바뀔 수 있으므로, 일관성과 가용성은 상위 계층(전송 계층)에 위임됩니다.

**전송 계층(Layer 4)**에서 TCP는 일관성을 강화합니다. 재전송, 순서 보장, 흐름 제어를 통해 신뢰성 있는 데이터 전송을 보장하지만, 네트워크 분할이 발생하면 연결이 끊어지거나 타임아웃이 발생하여 가용성이 저하될 수 있습니다. 반면, UDP는 가용성과 분할 내성을 우선시하며, 일관성은 응용 계층에서 처리하도록 합니다.

**응용 계층(Layer 7)**의 분산 데이터베이스나 분산 파일 시스템은 CAP 트레이드오프를 명시적으로 선택해야 합니다. 예를 들어, MongoDB는 CP(일관성+분할 내성)를 선택하고, Cassandra는 AP(가용성+분할 내성)를 선택합니다.

현실에서는 네트워크 분할이 언제든지 발생할 수 있으므로, 실질적인 선택은 CP(일관성 우선) 또는 AP(가용성 우선) 사이에서 이루어집니다. OSI 모델의 하위 계층(1-3)은 주로 분할 내성을 제공하고, 상위 계층(4-7)에서 일관성 또는 가용성을 선택하는 구조로 설계되어 있습니다.

Supporting Artifacts

다이어그램 S2.1-1: CAP 정리와 OSI 계층의 관계

graph TD
    CAP[CAP 정리<br/>C + A + P 중 2개만 선택]
    
    C[일관성<br/>Consistency]
    A[가용성<br/>Availability]
    P[분할 내성<br/>Partition Tolerance]
    
    CAP --> C
    CAP --> A
    CAP --> P
    
    CP[CP 시스템<br/>일관성 + 분할 내성]
    AP[AP 시스템<br/>가용성 + 분할 내성]
    CA[CA 시스템<br/>일관성 + 가용성<br/>실제로는 존재 불가]
    
    C --> CP
    P --> CP
    A --> AP
    P --> AP
    C --> CA
    A --> CA
    
    L7[Layer 7: Application<br/>분산 DB 선택<br/>MongoDB=CP, Cassandra=AP]
    L4_TCP[Layer 4: TCP<br/>일관성 우선<br/>재전송, 순서 보장]
    L4_UDP[Layer 4: UDP<br/>가용성 우선<br/>빠른 전송, 순서 무시]
    L3[Layer 3: Network<br/>분할 내성 제공<br/>Best-effort 전송]
    
    CP --> L7
    AP --> L7
    CP --> L4_TCP
    AP --> L4_UDP
    P --> L3
    
    style CAP fill:#e1f5ff
    style C fill:#ffe1e1
    style A fill:#e1ffe1
    style P fill:#ffe1ff
    style CP fill:#ffcccc
    style AP fill:#ccffcc
    style CA fill:#cccccc

표 S2.1-1: OSI 계층별 CAP 트레이드오프

OSI 계층프로토콜/기술CAP 선택설명
7 (Application)MongoDBCP강한 일관성, 분할 시 가용성 희생
7 (Application)CassandraAP높은 가용성, 최종 일관성 제공
4 (Transport)TCPCP 경향신뢰성 있는 전송, 연결 끊김 시 재연결 필요
4 (Transport)UDPAP 경향빠른 전송, 손실 허용, 높은 처리량
3 (Network)IPP 우선Best-effort, 분할 내성 제공, 일관성은 상위 계층 위임
2 (Data Link)EthernetP 우선로컬 네트워크 프레임 전송, 오류 검출만 제공

S2.2: 합의 알고리즘 (Consensus Algorithms)

Overview

분산 시스템에서 여러 노드가 하나의 값에 합의하도록 하는 알고리즘입니다. OSI 모델의 세션 계층과 전송 계층은 합의 알고리즘의 기반을 제공합니다.

Body

합의(consensus)는 분산 시스템에서 여러 프로세스 또는 노드가 단일 데이터 값에 동의하는 과정입니다. 네트워크 통신이 신뢰할 수 없고 노드가 실패할 수 있는 환경에서 합의를 달성하는 것은 근본적인 도전 과제입니다. 대표적인 합의 알고리즘으로는 Paxos, Raft, Byzantine Fault Tolerance(BFT) 등이 있습니다.

OSI 모델과 합의 알고리즘의 관계를 이해하려면, 먼저 합의가 필요한 이유를 알아야 합니다. 분산 데이터베이스에서 리더 선출, 트랜잭션 커밋 결정, 설정 변경 등의 작업은 모든 노드가 동일한 결정에 도달해야 합니다. 이 과정에서 OSI 모델의 여러 계층이 중요한 역할을 합니다.

**전송 계층(Layer 4)**은 합의 알고리즘의 메시지 전달을 담당합니다. TCP는 순서 보장과 재전송을 통해 신뢰성 있는 메시지 전달을 제공하지만, 이것만으로는 합의를 달성할 수 없습니다. 왜냐하면 TCP는 네트워크 분할을 감지하지 못하고, 타임아웃으로 연결을 끊을 수 있기 때문입니다. 합의 알고리즘은 이러한 한계를 극복하기 위해 설계되었습니다.

Paxos 알고리즘은 Leslie Lamport가 1998년 제안한 합의 알고리즘으로, 네트워크 지연과 패킷 손실이 있는 환경에서도 합의를 달성할 수 있습니다. Paxos는 Proposer, Acceptor, Learner 세 가지 역할로 구성되며, 2-phase 프로토콜(Prepare/Promise, Propose/Accept)을 사용합니다. OSI 모델의 관점에서 Paxos 메시지는 응용 계층(Layer 7) 프로토콜이며, TCP(Layer 4)를 통해 전달됩니다.

Raft 알고리즘은 2014년 Diego Ongaro와 John Ousterhout가 발표한 알고리즘으로, Paxos보다 이해하기 쉽도록 설계되었습니다. Raft는 리더 선출, 로그 복제, 안전성(safety)을 명확히 분리하여 구현의 복잡도를 낮췄습니다. Raft는 RequestVote와 AppendEntries라는 두 가지 주요 RPC를 사용하며, 이들은 TCP 기반의 응용 계층 메시지로 전송됩니다.

**세션 계층(Layer 5)**의 개념은 합의 알고리즘에서 중요한 역할을 합니다. 합의 과정은 여러 라운드의 메시지 교환으로 구성되며, 이는 본질적으로 “세션"입니다. Raft의 term(임기) 개념은 세션 관리와 유사하며, 새로운 리더가 선출될 때마다 term이 증가합니다.

합의 알고리즘의 성능은 네트워크 계층(Layer 3)의 지연과 대역폭에 크게 영향을 받습니다. 예를 들어, Paxos와 Raft는 모두 quorum(정족수)을 사용하는데, 이는 과반수의 노드로부터 응답을 받아야 합의가 완료됨을 의미합니다. 따라서 네트워크 지연이 클수록 합의 시간이 길어집니다.

Supporting Artifacts

표 S2.2-1: 주요 합의 알고리즘 비교

알고리즘발표 연도장점단점OSI 계층 활용
Paxos1998이론적으로 강력, 증명된 정확성이해/구현이 어려움L7(응용), L4(TCP 전송), L5(세션 개념)
Raft2014이해하기 쉬움, 명확한 리더 선출Paxos보다 메시지 많음L7(RPC), L4(TCP), L5(term 기반 세션)
Byzantine Paxos1999악의적 노드 허용복잡도 높음, 성능 저하L7(응용), L4(인증된 채널), L6(암호화)
PBFT1999실용적인 BFT3f+1 노드 필요 (f=장애 노드 수)L7(3-phase 프로토콜), L4(TCP)
ZAB (ZooKeeper)2011높은 처리량, 순서 보장리더 의존적L7(ZooKeeper), L4(TCP), L5(epoch 세션)

다이어그램 S2.2-1: Raft 합의 알고리즘과 OSI 계층

sequenceDiagram
    participant C as Client<br/>(Layer 7)
    participant L as Leader<br/>(Layer 7)
    participant F1 as Follower 1<br/>(Layer 7)
    participant F2 as Follower 2<br/>(Layer 7)
    participant TCP as TCP<br/>(Layer 4)
    
    C->>L: 요청 전송 (HTTP over TCP)
    Note over L: 로그에 추가<br/>(uncommitted)
    
    L->>TCP: AppendEntries RPC 준비
    TCP->>F1: TCP 세그먼트 전송
    TCP->>F2: TCP 세그먼트 전송
    
    F1->>TCP: 응답 (Success)
    F2->>TCP: 응답 (Success)
    TCP->>L: Quorum 달성 (2/2)
    
    Note over L: 로그 커밋<br/>(committed)
    L->>C: 응답 반환<br/>(HTTP over TCP)
    
    Note over L,F2: Quorum: 과반수(2/3) 응답<br/>Layer 4(TCP)가 신뢰성 제공<br/>Layer 7(Raft)가 합의 달성

S2.3: 복제 전략 (Replication Strategies)

Overview

분산 시스템에서 데이터의 가용성과 내결함성을 높이기 위해 여러 노드에 데이터를 복제하는 전략입니다. OSI 모델의 각 계층은 복제 전략의 효율성과 신뢰성에 영향을 줍니다.

Body

복제(replication)는 동일한 데이터를 여러 노드에 저장하여 가용성, 성능, 내결함성을 향상시키는 기법입니다. 복제 전략은 크게 동기 복제(synchronous replication)와 비동기 복제(asynchronous replication)로 나뉘며, 각각 일관성과 성능 사이의 트레이드오프를 가집니다.

동기 복제는 쓰기 작업이 모든 복제본에 적용된 후에만 완료로 간주됩니다. 이는 강한 일관성(strong consistency)을 보장하지만, 네트워크 지연에 민감하고 가용성이 낮아질 수 있습니다. OSI 모델의 관점에서 동기 복제는 전송 계층(Layer 4)의 TCP를 통해 각 복제본에 데이터를 전송하고, 모든 복제본으로부터 확인 응답(ACK)을 받은 후에야 클라이언트에 성공을 반환합니다.

비동기 복제는 쓰기 작업이 주 노드에 적용되면 즉시 완료로 간주하고, 백그라운드에서 다른 복제본에 변경 사항을 전파합니다. 이는 높은 성능과 가용성을 제공하지만, 최종 일관성(eventual consistency)만 보장합니다. 네트워크 계층(Layer 3)의 멀티캐스트 기능을 활용하면 복제 효율을 높일 수 있습니다.

**체인 복제(Chain Replication)**는 노드를 선형 체인으로 구성하고, 쓰기는 체인의 헤드에서 테일로 전파되며, 읽기는 테일에서 처리됩니다. 이 전략은 전송 계층(Layer 4)의 순서 보장 기능을 활용하여 복제 순서를 유지합니다.

Quorum 복제는 N개의 복제본 중 W개에 쓰기를 성공하고, R개로부터 읽기를 수행하는 방식입니다. W + R > N을 만족하면 읽기는 항상 최신 값을 반환합니다. 이 전략은 응용 계층(Layer 7)에서 구현되며, 네트워크 계층(Layer 3)의 라우팅 효율성에 영향을 받습니다.

OSI 모델의 데이터 링크 계층(Layer 2)은 로컬 네트워크 내에서 브로드캐스트와 멀티캐스트를 지원하여, 동일 서브넷 내 복제본 간의 효율적인 통신을 가능하게 합니다. 예를 들어, ARP(Address Resolution Protocol)는 Layer 2 브로드캐스트를 사용하여 IP 주소를 MAC 주소로 해석합니다.

복제 전략의 성능은 네트워크 계층(Layer 3)의 토폴로지와 라우팅 프로토콜에 크게 의존합니다. 복제본이 지리적으로 분산되어 있을 경우, BGP와 같은 라우팅 프로토콜이 최적 경로를 선택하여 복제 지연을 최소화합니다.

Supporting Artifacts

표 S2.3-1: 복제 전략 비교

복제 전략일관성성능가용성OSI 계층 활용
동기 복제강한 일관성낮음 (대기 시간)낮음 (복제본 실패 시)L4(TCP ACK), L7(2PC)
비동기 복제최종 일관성높음높음L4(TCP/UDP), L3(멀티캐스트)
체인 복제강한 일관성중간중간L4(순서 보장), L3(라우팅)
Quorum 복제튜닝 가능 (W, R)중간높음L7(Quorum 로직), L4(TCP)
Multi-Master최종 일관성높음매우 높음L7(충돌 해결), L4(TCP)

다이어그램 S2.3-1: 동기 vs 비동기 복제

sequenceDiagram
    participant C as Client
    participant M as Master<br/>(주 노드)
    participant R1 as Replica 1
    participant R2 as Replica 2
    
    Note over C,R2: 동기 복제 (Synchronous)
    C->>M: WRITE (value=42)
    M->>R1: REPLICATE (value=42)
    M->>R2: REPLICATE (value=42)
    R1-->>M: ACK
    R2-->>M: ACK
    Note over M: 모든 복제본 확인 후
    M-->>C: SUCCESS
    
    Note over C,R2: 비동기 복제 (Asynchronous)
    C->>M: WRITE (value=43)
    Note over M: 즉시 성공 반환
    M-->>C: SUCCESS
    M->>R1: REPLICATE (value=43)
    M->>R2: REPLICATE (value=43)
    Note over R1,R2: 백그라운드에서<br/>복제 진행

S2.4: 일관성 모델 (Consistency Models)

Overview

분산 시스템에서 복제된 데이터가 어떤 일관성 보장을 제공하는지 정의하는 모델입니다. OSI 모델의 계층별 신뢰성 메커니즘은 다양한 일관성 모델을 구현하는 데 필수적입니다.

Body

일관성 모델(consistency model)은 분산 시스템에서 데이터의 복제본 간 일관성을 유지하는 방법과 그에 따른 보장 수준을 정의합니다. 강한 일관성부터 약한 일관성까지 다양한 모델이 존재하며, 각 모델은 성능, 가용성, 복잡도 사이의 트레이드오프를 가집니다.

**강한 일관성(Strong Consistency)**은 모든 읽기 작업이 항상 가장 최근의 쓰기 값을 반환하는 것을 보장합니다. 이는 마치 단일 복제본만 존재하는 것처럼 동작합니다(linearizability). OSI 모델에서 강한 일관성을 구현하려면, 전송 계층(Layer 4)의 TCP를 통해 동기 복제를 수행하고, 응용 계층(Layer 7)에서 합의 알고리즘(예: Paxos, Raft)을 사용하여 모든 노드가 동일한 순서로 작업을 수행하도록 합니다.

**순차 일관성(Sequential Consistency)**은 모든 프로세스가 동일한 순서로 작업을 관찰하는 것을 보장하지만, 반드시 실제 발생 순서와 일치할 필요는 없습니다. 이는 전송 계층(Layer 4)의 순서 보장 기능(TCP sequence number)과 응용 계층(Layer 7)의 논리적 타임스탬프(Lamport timestamps, Vector clocks)를 조합하여 구현할 수 있습니다.

**인과 일관성(Causal Consistency)**은 인과 관계가 있는 작업들만 모든 노드에서 동일한 순서로 관찰되는 것을 보장합니다. 인과 관계가 없는 작업들은 다른 순서로 관찰될 수 있습니다. Vector clocks는 인과 관계를 추적하는 데 널리 사용되며, 이는 응용 계층(Layer 7)에서 구현됩니다. 네트워크 계층(Layer 3)의 멀티캐스트 기능을 활용하면 인과 관계가 있는 업데이트를 효율적으로 전파할 수 있습니다.

**최종 일관성(Eventual Consistency)**은 새로운 업데이트가 없다면, 결국 모든 복제본이 동일한 값으로 수렴함을 보장합니다. 이는 가장 약한 일관성 모델이지만, 높은 가용성과 성능을 제공합니다. 비동기 복제와 함께 사용되며, DNS와 Amazon DynamoDB가 대표적인 예입니다. 최종 일관성은 전송 계층(Layer 4)의 UDP를 사용하여 오버헤드를 낮추거나, TCP를 사용하되 비동기적으로 업데이트를 전파합니다.

**읽기-쓰기 일관성(Read-Your-Writes Consistency)**은 프로세스가 자신이 쓴 값은 항상 읽을 수 있음을 보장합니다. 이는 세션 계층(Layer 5) 또는 응용 계층(Layer 7)에서 세션 어피니티(session affinity)를 사용하여 구현할 수 있습니다. 클라이언트의 읽기 요청을 항상 자신이 쓴 서버로 라우팅하거나, 쓰기 후 일정 시간 동안 해당 서버에서만 읽기를 수행합니다.

OSI 모델의 계층별 기능은 일관성 모델 구현에 다음과 같이 기여합니다. 물리 계층(Layer 1)과 데이터 링크 계층(Layer 2)은 신뢰성 있는 프레임 전송을 제공하여 데이터 손상을 방지합니다. 네트워크 계층(Layer 3)은 라우팅과 주소 지정을 통해 복제본 간 통신을 가능하게 합니다. 전송 계층(Layer 4)은 신뢰성, 순서 보장, 흐름 제어를 제공하여 일관성 모델의 기반을 마련합니다. 응용 계층(Layer 7)은 실제 일관성 모델의 로직을 구현합니다.

Supporting Artifacts

표 S2.4-1: 일관성 모델 비교

일관성 모델보장 수준성능구현 복잡도OSI 계층 활용
Linearizability (강한 일관성)매우 강함낮음높음L7(합의 알고리즘), L4(TCP 동기)
Sequential Consistency강함중간중간L7(논리적 시간), L4(TCP 순서)
Causal Consistency중간중간중간L7(Vector clocks), L3(멀티캐스트)
Eventual Consistency약함높음낮음L7(비동기 복제), L4(UDP/TCP 비동기)
Read-Your-Writes세션 기반높음낮음L7(세션 어피니티), L5(세션 관리)
Monotonic Reads중간높음낮음L7(버전 관리), L4(TCP)

코드 예제 S2.4-1: 일관성 모델 시뮬레이션

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from datetime import datetime

class ConsistencyModel:
    """일관성 모델의 개념적 표현"""
    def __init__(self, model_name):
        self.model_name = model_name
        self.replicas = {}
        self.version = 0
    
    def write(self, replica_id, value):
        """값 쓰기"""
        self.version += 1
        self.replicas[replica_id] = {
            'value': value,
            'version': self.version,
            'timestamp': datetime.now()
        }
        return self.version
    
    def read(self, replica_id):
        """값 읽기"""
        if replica_id in self.replicas:
            return self.replicas[replica_id]
        return None

# 강한 일관성 시뮬레이션
class StrongConsistency(ConsistencyModel):
    """모든 복제본이 동기화될 때까지 대기"""
    def write(self, replica_id, value):
        version = super().write(replica_id, value)
        # 모든 복제본에 동기적으로 복제
        for rid in ['replica1', 'replica2', 'replica3']:
            super().write(rid, value)
        print(f"[StrongConsistency] All replicas synced to version {version}")
        return version

# 최종 일관성 시뮬레이션
class EventualConsistency(ConsistencyModel):
    """즉시 반환하고 나중에 복제"""
    def write(self, replica_id, value):
        version = super().write(replica_id, value)
        print(f"[EventualConsistency] Write to {replica_id} version {version}")
        # 비동기 복제 (시뮬레이션)
        print("[EventualConsistency] Asynchronous replication in progress...")
        return version

# 실행 예제
print("=== 강한 일관성 ===")
strong = StrongConsistency("Strong")
strong.write('master', 42)

print("\n=== 최종 일관성 ===")
eventual = EventualConsistency("Eventual")
eventual.write('master', 43)

S2.5: 네트워크 프로토콜 (Network Protocols)

Overview

OSI 모델의 각 계층에서 사용되는 프로토콜들을 상세히 살펴보고, 이들이 어떻게 상호작용하여 네트워크 통신을 가능하게 하는지 이해합니다.

Body

네트워크 프로토콜은 OSI 모델의 각 계층에서 정의된 규칙과 절차의 집합으로, 네트워크 상에서 데이터를 교환하는 방법을 명시합니다. 각 계층의 프로토콜은 독립적으로 발전할 수 있으며, 상위 계층은 하위 계층의 세부 구현을 알 필요가 없습니다.

물리 계층(Layer 1) 프로토콜은 비트 스트림의 물리적 전송을 정의합니다. Ethernet(IEEE 802.3)은 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)를 사용하여 매체 접근을 제어하며, 10BASE-T, 100BASE-TX, 1000BASE-T 등 다양한 속도를 지원합니다. Wi-Fi(IEEE 802.11)는 CSMA/CA(Collision Avoidance)를 사용하며, 802.11a/b/g/n/ac/ax 등의 표준이 있습니다. USB, RS-232, HDMI 등도 물리 계층 프로토콜입니다.

데이터 링크 계층(Layer 2) 프로토콜은 프레임 구조와 오류 검출을 정의합니다. Ethernet 프레임은 Preamble, Destination MAC, Source MAC, EtherType/Length, Payload, FCS(Frame Check Sequence)로 구성됩니다. PPP(Point-to-Point Protocol)는 직렬 링크에서 사용되며, HDLC(High-Level Data Link Control)는 동기 전송에 사용됩니다. ARP(Address Resolution Protocol)는 IP 주소를 MAC 주소로 매핑하며, 역으로 RARP(Reverse ARP)는 MAC 주소를 IP 주소로 매핑합니다.

네트워크 계층(Layer 3) 프로토콜은 논리적 주소 지정과 라우팅을 담당합니다. IPv4(RFC 791)는 32비트 주소를 사용하며, 클래스 기반(Class A/B/C) 및 CIDR(Classless Inter-Domain Routing) 주소 지정을 지원합니다. IPv6(RFC 2460)는 128비트 주소를 사용하여 주소 공간을 대폭 확장했습니다. ICMP(Internet Control Message Protocol, RFC 792)는 오류 보고와 진단에 사용되며, ping과 traceroute가 ICMP를 활용합니다. IGMP(Internet Group Management Protocol, RFC 1112)는 멀티캐스트 그룹 관리에 사용됩니다. 라우팅 프로토콜로는 RIP(Routing Information Protocol), OSPF(Open Shortest Path First), BGP(Border Gateway Protocol) 등이 있습니다.

전송 계층(Layer 4) 프로토콜은 종단 간 통신을 제공합니다. TCP(Transmission Control Protocol, RFC 793)는 연결 지향 프로토콜로, 3-way handshake(SYN, SYN-ACK, ACK)를 통해 연결을 설정하고, 4-way handshake를 통해 연결을 종료합니다. TCP는 순서 번호, 확인 응답, 재전송, 흐름 제어(슬라이딩 윈도우), 혼잡 제어(Slow Start, Congestion Avoidance)를 제공합니다. UDP(User Datagram Protocol, RFC 768)는 비연결 프로토콜로, 오버헤드가 낮고 실시간 응용(VoIP, 온라인 게임, 비디오 스트리밍)에 적합합니다.

세션 계층(Layer 5) 프로토콜은 대화 제어와 동기화를 담당합니다. NetBIOS는 네트워크 서비스 제공, PPTP(Point-to-Point Tunneling Protocol)는 VPN 연결, RPC(Remote Procedure Call)는 원격 함수 호출을 지원합니다. 실제로 많은 현대 응용은 세션 계층 기능을 응용 계층에 통합합니다.

표현 계층(Layer 6) 프로토콜은 데이터 표현과 암호화를 담당합니다. TLS/SSL(Transport Layer Security/Secure Sockets Layer)은 암호화된 통신을 제공하며, HTTPS, FTPS, SMTPS 등에 사용됩니다. MIME(Multipurpose Internet Mail Extensions)는 이메일의 바이너리 첨부 파일을 인코딩합니다. 압축 알고리즘(gzip, deflate), 이미지 형식(JPEG, PNG), 비디오 코덱(H.264, VP9) 등도 표현 계층의 기능입니다.

응용 계층(Layer 7) 프로토콜은 사용자가 직접 상호작용하는 네트워크 서비스를 제공합니다. HTTP/HTTPS(RFC 2616, RFC 7540)는 웹 통신, FTP(File Transfer Protocol, RFC 959)는 파일 전송, SMTP(Simple Mail Transfer Protocol, RFC 5321)는 이메일 송신, POP3(Post Office Protocol, RFC 1939)와 IMAP(Internet Message Access Protocol, RFC 3501)은 이메일 수신, DNS(Domain Name System, RFC 1035)는 도메인 이름 해석, SSH(Secure Shell, RFC 4251)는 암호화된 원격 접속, SNMP(Simple Network Management Protocol, RFC 1157)는 네트워크 관리, DHCP(Dynamic Host Configuration Protocol, RFC 2131)는 IP 주소 자동 할당에 사용됩니다.

Supporting Artifacts

표 S2.5-1: OSI 계층별 주요 프로토콜

계층프로토콜설명RFC/표준용도
7 (Application)HTTP/HTTPS웹 통신RFC 2616, 7540웹 브라우징, REST API
7 (Application)FTP파일 전송RFC 959파일 업로드/다운로드
7 (Application)SMTP/POP3/IMAP이메일RFC 5321, 1939, 3501이메일 송수신
7 (Application)DNS도메인 이름 해석RFC 1035도메인 → IP 변환
6 (Presentation)TLS/SSL암호화RFC 5246, 6101HTTPS, 보안 통신
6 (Presentation)MIME이메일 인코딩RFC 2045첨부 파일 인코딩
5 (Session)NetBIOS네트워크 서비스RFC 1001, 1002Windows 파일 공유
5 (Session)RPC원격 프로시저 호출RFC 5531분산 시스템 통신
4 (Transport)TCP연결 지향 전송RFC 793신뢰성 있는 통신
4 (Transport)UDP비연결 전송RFC 768실시간 통신, 스트리밍
3 (Network)IPv4/IPv6논리 주소 지정RFC 791, 2460패킷 라우팅
3 (Network)ICMP오류 보고, 진단RFC 792ping, traceroute
3 (Network)OSPF/BGP라우팅 프로토콜RFC 2328, 4271최적 경로 결정
2 (Data Link)Ethernet프레임 전송IEEE 802.3LAN 통신
2 (Data Link)PPP점대점 프로토콜RFC 1661직렬 링크 통신
2 (Data Link)ARP주소 해석RFC 826IP → MAC 매핑
1 (Physical)Ethernet PHY물리 전송IEEE 802.3비트 전송 (10/100/1000 Mbps)
1 (Physical)Wi-Fi무선 전송IEEE 802.11무선 LAN

다이어그램 S2.5-1: 프로토콜 스택과 데이터 흐름

graph TB
    subgraph "송신자"
        A7[Application: HTTP Request]
        A6[Presentation: TLS Encryption]
        A4[Transport: TCP Segment<br/>Src:50234 Dst:443]
        A3[Network: IP Packet<br/>Src:192.168.1.100 Dst:203.0.113.50]
        A2[Data Link: Ethernet Frame<br/>Src MAC / Dst MAC]
        A1[Physical: Bits 010101...]
    end
    
    subgraph "수신자"
        B1[Physical: Bits 010101...]
        B2[Data Link: Ethernet Frame]
        B3[Network: IP Packet]
        B4[Transport: TCP Segment]
        B6[Presentation: TLS Decryption]
        B7[Application: HTTP Response]
    end
    
    A7 --> A6 --> A4 --> A3 --> A2 --> A1
    A1 --> |물리 매체<br/>Ethernet, Wi-Fi| B1
    B1 --> B2 --> B3 --> B4 --> B6 --> B7
    
    style A7 fill:#e1f5ff
    style A6 fill:#e1f5ff
    style A4 fill:#fff9e1
    style A3 fill:#ffe1e1
    style A2 fill:#ffe1e1
    style A1 fill:#ffe1e1
    style B1 fill:#ffe1e1
    style B2 fill:#ffe1e1
    style B3 fill:#ffe1e1
    style B4 fill:#fff9e1
    style B6 fill:#e1f5ff
    style B7 fill:#e1f5ff

S3: Topic-Specific Deep Dive (Advanced) - OSI 모델 심화

Overview

S3 섹션은 OSI 모델의 고급 주제를 다룹니다. Encapsulation/Decapsulation 메커니즘, 각 계층별 PDU 구조, TCP/IP와의 상세한 매핑, ISO/IEC 7498-1 표준 명세, 그리고 계층 독립성 원칙과 서비스 경계를 심도 있게 탐구합니다.

S3.1: Encapsulation 및 Decapsulation 메커니즘

Overview

데이터가 OSI 계층을 통과하면서 헤더와 트레일러가 추가되고(encapsulation) 제거되는(decapsulation) 과정의 상세 메커니즘을 이해합니다.

Body

Encapsulation과 decapsulation은 OSI 모델의 핵심 메커니즘으로, 계층 간 독립성을 보장하면서도 데이터가 네트워크를 통해 전송될 수 있도록 합니다. 이 과정은 SDU(Service Data Unit)와 PDU(Protocol Data Unit)의 변환을 통해 이루어집니다.

Encapsulation 프로세스는 상위 계층의 PDU를 하위 계층의 SDU로 취급하고, 하위 계층의 프로토콜 헤더(및 경우에 따라 트레일러)를 추가하여 새로운 PDU를 생성하는 과정입니다. 구체적으로, (N+1) 계층의 PDU는 (N) 계층으로 전달될 때 (N)-SDU가 됩니다. (N) 계층은 이 SDU에 (N)-PCI(Protocol Control Information)를 추가하여 (N)-PDU를 생성합니다. 이 과정은 물리 계층에 도달할 때까지 반복됩니다.

예를 들어, HTTP 요청 메시지(응용 계층 PDU)가 전송 계층으로 전달되면, 이것은 전송 계층 SDU가 됩니다. TCP는 이 SDU를 여러 세그먼트로 분할할 수 있으며, 각 세그먼트에 TCP 헤더를 추가하여 TCP 세그먼트(전송 계층 PDU)를 생성합니다. TCP 헤더에는 출발지 포트 번호, 목적지 포트 번호, 시퀀스 번호, 확인 응답 번호, 윈도우 크기, 체크섬, 플래그(SYN, ACK, FIN 등)가 포함됩니다.

**MTU(Maximum Transmission Unit)**는 특정 계층에서 전송할 수 있는 최대 PDU 크기입니다. 만약 (N+1) 계층의 PDU가 (N) 계층의 MTU보다 크면, (N) 계층은 SDU를 여러 PDU로 분할(fragmentation)해야 합니다. 예를 들어, Ethernet의 MTU는 일반적으로 1500바이트이므로, 더 큰 IP 패킷은 여러 Ethernet 프레임으로 분할됩니다.

헤더 구조는 각 계층의 프로토콜에 따라 다릅니다. TCP 헤더는 최소 20바이트이며, 옵션 필드를 포함하면 최대 60바이트까지 확장될 수 있습니다. IP 헤더는 최소 20바이트이며, IPv6 헤더는 40바이트입니다. Ethernet 프레임 헤더는 14바이트이며, 트레일러(FCS)는 4바이트입니다. 이러한 오버헤드는 페이로드 대비 상당한 비율을 차지할 수 있으며, 특히 작은 메시지를 전송할 때 두드러집니다.

Decapsulation 프로세스는 encapsulation의 역과정입니다. 수신자 측에서 물리 계층은 비트 스트림을 프레임으로 변환하고, 각 상위 계층은 자신의 프로토콜 헤더를 검사하고 제거한 후, 페이로드를 다음 상위 계층으로 전달합니다. 각 계층은 헤더의 정보를 사용하여 다음 작업을 결정합니다. 예를 들어, IP 계층은 IP 헤더의 “Protocol” 필드(TCP=6, UDP=17, ICMP=1)를 확인하여 패킷을 어느 전송 계층 프로토콜로 전달할지 결정합니다.

Encapsulation의 보안 측면도 중요합니다. TLS/SSL은 표현 계층에서 데이터를 암호화하므로, 하위 계층(전송, 네트워크, 데이터 링크)에서는 암호화된 페이로드만 볼 수 있습니다. 그러나 헤더 정보(IP 주소, 포트 번호)는 여전히 평문으로 전송되므로, VPN(Virtual Private Network)과 같은 추가 암호화 계층이 필요할 수 있습니다.

**GRE(Generic Routing Encapsulation)**와 같은 터널링 프로토콜은 전체 패킷을 다른 패킷의 페이로드로 encapsulate하여, 네트워크 경계를 넘어 전송할 수 있게 합니다. 이는 VPN, IPv6 over IPv4 터널, MPLS(Multiprotocol Label Switching) 등에서 사용됩니다.

Supporting Artifacts

표 S3.1-1: 계층별 헤더 크기와 주요 필드

계층PDU 이름헤더 크기주요 필드트레일러
7 (Application)Data가변HTTP 메서드, URL, Headers없음
4 (Transport)Segment (TCP)20-60 bytesSrcPort, DstPort, Seq#, Ack#, Flags, Window, Checksum없음
4 (Transport)Datagram (UDP)8 bytesSrcPort, DstPort, Length, Checksum없음
3 (Network)Packet (IPv4)20-60 bytesSrc IP, Dst IP, TTL, Protocol, Header Checksum없음
3 (Network)Packet (IPv6)40 bytesSrc IP, Dst IP, Traffic Class, Flow Label, Hop Limit없음
2 (Data Link)Frame (Ethernet)14 bytesDst MAC, Src MAC, EtherTypeFCS (4 bytes)
1 (Physical)BitsN/APreamble, SFD (물리 신호)N/A

다이어그램 S3.1-1: Encapsulation 과정의 상세 구조

graph TD
    subgraph "Encapsulation (계층 7→1)"
        L7_Data["L7 Data<br/>HTTP Request: GET /index.html"]
        L4_Segment["L4 TCP Segment<br/><b>TCP Header</b> (20 bytes)<br/>+HTTP Request"]
        L3_Packet["L3 IP Packet<br/><b>IP Header</b> (20 bytes)<br/>+TCP Segment"]
        L2_Frame["L2 Ethernet Frame<br/><b>Ethernet Header</b> (14 bytes)<br/>+IP Packet<br/>+<b>FCS</b> (4 bytes)"]
        L1_Bits["L1 Bits<br/>010101010101..."]
    end
    
    L7_Data -->|TCP encapsulates| L4_Segment
    L4_Segment -->|IP encapsulates| L3_Packet
    L3_Packet -->|Ethernet encapsulates| L2_Frame
    L2_Frame -->|Converted to bits| L1_Bits
    
    subgraph "헤더 정보"
        TCP_H["<b>TCP Header</b><br/>SrcPort: 50234<br/>DstPort: 80<br/>Seq: 1000<br/>Ack: 0<br/>Flags: SYN"]
        IP_H["<b>IP Header</b><br/>Src IP: 192.168.1.100<br/>Dst IP: 203.0.113.50<br/>Protocol: TCP (6)<br/>TTL: 64"]
        ETH_H["<b>Ethernet Header</b><br/>Dst MAC: AA:BB:CC:DD:EE:FF<br/>Src MAC: 00:11:22:33:44:55<br/>EtherType: IPv4 (0x0800)"]
    end
    
    L4_Segment -.->|포함| TCP_H
    L3_Packet -.->|포함| IP_H
    L2_Frame -.->|포함| ETH_H

코드 예제 S3.1-1: PDU 생성 시뮬레이션

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import struct

class PDU:
    """Protocol Data Unit 클래스"""
    def __init__(self, header, payload, trailer=None):
        self.header = header
        self.payload = payload
        self.trailer = trailer
    
    def get_size(self):
        """전체 PDU 크기 계산"""
        size = len(self.header) + len(self.payload)
        if self.trailer:
            size += len(self.trailer)
        return size
    
    def __repr__(self):
        return f"PDU(header={len(self.header)}B, payload={len(self.payload)}B, total={self.get_size()}B)"

# Layer 7: Application Data
http_request = b"GET /index.html HTTP/1.1\r\nHost: example.com\r\n\r\n"
print(f"L7 Application Data: {len(http_request)} bytes")

# Layer 4: TCP Segment
tcp_header = struct.pack(
    '!HHIIBBHHH',  # 네트워크 바이트 순서 (big-endian)
    50234,         # Source Port
    80,            # Destination Port
    1000,          # Sequence Number
    0,             # Acknowledgment Number
    5 << 4,        # Data Offset (5 * 4 = 20 bytes header)
    0x02,          # Flags (SYN=0x02)
    65535,         # Window Size
    0,             # Checksum (계산 필요)
    0              # Urgent Pointer
)
tcp_segment = PDU(tcp_header, http_request)
print(f"L4 TCP Segment: {tcp_segment}")

# Layer 3: IP Packet
ip_header = struct.pack(
    '!BBHHHBBH4s4s',
    0x45,          # Version (4) + IHL (5)
    0,             # Type of Service
    tcp_segment.get_size() + 20,  # Total Length
    54321,         # Identification
    0,             # Flags + Fragment Offset
    64,            # TTL
    6,             # Protocol (TCP=6)
    0,             # Header Checksum (계산 필요)
    struct.pack('!I', 0xC0A80164),  # Src IP: 192.168.1.100
    struct.pack('!I', 0xCB007132)   # Dst IP: 203.0.113.50
)
ip_packet = PDU(
    ip_header, 
    tcp_header + http_request
)
print(f"L3 IP Packet: {ip_packet}")

# Layer 2: Ethernet Frame
ethernet_header = struct.pack(
    '!6s6sH',
    bytes.fromhex('AABBCCDDEEFF'),  # Dst MAC
    bytes.fromhex('001122334455'),  # Src MAC
    0x0800                           # EtherType (IPv4)
)
# FCS (Frame Check Sequence) 계산 (CRC-32)
import zlib
frame_data = ethernet_header + ip_packet.header + ip_packet.payload
fcs = struct.pack('!I', zlib.crc32(frame_data) & 0xFFFFFFFF)

ethernet_frame = PDU(
    ethernet_header,
    ip_packet.header + ip_packet.payload,
    fcs
)
print(f"L2 Ethernet Frame: {ethernet_frame}")

# 전체 오버헤드 계산
total_overhead = len(ethernet_header) + len(ip_header) + len(tcp_header) + len(fcs)
payload_size = len(http_request)
print(f"\n총 오버헤드: {total_overhead} bytes")
print(f"실제 페이로드: {payload_size} bytes")
print(f"오버헤드 비율: {total_overhead / (total_overhead + payload_size) * 100:.1f}%")

S3.2: 각 계층별 PDU 타입 및 구조

Overview

OSI 모델의 각 계층에서 사용되는 PDU의 구체적인 구조, 필드, 그리고 각 필드의 역할을 상세히 분석합니다.

Body

각 OSI 계층은 고유한 PDU 타입과 구조를 가지며, 이는 해당 계층의 기능과 책임을 반영합니다. PDU의 구조를 이해하는 것은 네트워크 프로토콜 분석, 문제 해결, 그리고 새로운 프로토콜 설계에 필수적입니다.

물리 계층(Layer 1) - Bits

물리 계층의 PDU는 비트 스트림입니다. Ethernet 물리 계층은 Preamble(7바이트의 10101010 패턴)과 SFD(Start Frame Delimiter, 1바이트의 10101011)를 사용하여 프레임의 시작을 알립니다. 이는 수신자의 클록 동기화를 돕고 프레임 경계를 식별하게 합니다. 비트 인코딩 방식으로는 Manchester, 4B/5B, 8B/10B 등이 사용됩니다.

데이터 링크 계층(Layer 2) - Frame

Ethernet II 프레임 구조는 다음과 같습니다.

IEEE 802.3 프레임은 EtherType 대신 Length 필드를 사용하며, LLC(Logical Link Control) 헤더를 추가합니다. VLAN 태그(IEEE 802.1Q)를 사용할 경우, EtherType 필드 앞에 4바이트의 VLAN 태그가 삽입됩니다.

네트워크 계층(Layer 3) - Packet

IPv4 패킷 헤더 구조 (20-60 bytes):

IPv6 패킷 헤더는 40바이트로 고정되어 있으며, 옵션은 Extension Header로 분리되어 더 효율적입니다.

전송 계층(Layer 4) - Segment/Datagram

TCP 세그먼트 헤더 구조 (20-60 bytes):

UDP 데이터그램 헤더는 8바이트로 매우 간단합니다: Source Port (2), Destination Port (2), Length (2), Checksum (2).

세션, 표현, 응용 계층(Layer 5-7) - Data

상위 계층의 PDU는 일반적으로 “Data” 또는 “Message"라고 불립니다. 이들의 구조는 프로토콜에 따라 크게 다릅니다. HTTP 요청 메시지는 텍스트 기반 형식을 사용하며, Request Line, Headers, Body로 구성됩니다. TLS/SSL은 Record Protocol과 Handshake Protocol을 사용하며, 암호화된 데이터를 전송합니다.

Supporting Artifacts

표 S3.2-1: TCP 플래그 의미

플래그비트의미사용 시나리오
FIN0연결 종료 요청4-way handshake에서 연결 종료
SYN1연결 설정 요청3-way handshake에서 연결 시작
RST2연결 강제 재설정오류 또는 거부 시 연결 즉시 종료
PSH3즉시 전달버퍼링 없이 데이터 즉시 응용 계층으로 전달
ACK4확인 응답수신한 데이터의 확인
URG5긴급 데이터Urgent Pointer 필드 유효 표시
ECE6ECN Echo혼잡 알림 에코
CWR7Congestion Window Reduced혼잡 윈도우 감소 확인
NS8Nonce SumECN 보호 (RFC 3540)

다이어그램 S3.2-1: TCP 세그먼트 구조

graph TD
    subgraph "TCP Segment Structure"
        SrcPort["Source Port<br/>16 bits"]
        DstPort["Destination Port<br/>16 bits"]
        SeqNum["Sequence Number<br/>32 bits"]
        AckNum["Acknowledgment Number<br/>32 bits"]
        DataOff["Data<br/>Offset<br/>4 bits"]
        Reserved["Reserved<br/>3 bits"]
        Flags["Flags<br/>9 bits<br/>NS CWR ECE<br/>URG ACK PSH<br/>RST SYN FIN"]
        Window["Window Size<br/>16 bits"]
        Checksum["Checksum<br/>16 bits"]
        UrgPtr["Urgent Pointer<br/>16 bits"]
        Options["Options (if any)<br/>0-40 bytes"]
        Data["Data<br/>Variable length"]
    end
    
    SrcPort --> DstPort
    DstPort --> SeqNum
    SeqNum --> AckNum
    AckNum --> DataOff
    DataOff --> Reserved
    Reserved --> Flags
    Flags --> Window
    Window --> Checksum
    Checksum --> UrgPtr
    UrgPtr --> Options
    Options --> Data
    
    style SrcPort fill:#e1f5ff
    style DstPort fill:#e1f5ff
    style SeqNum fill:#ffe1e1
    style AckNum fill:#ffe1e1
    style Flags fill:#fff9e1
    style Window fill:#e1ffe1
    style Checksum fill:#ffe1ff

S3.3: TCP/IP 모델과의 매핑 관계

Overview

OSI 7계층 모델과 TCP/IP 4계층 모델(또는 5계층 모델) 간의 정확한 매핑 관계, 차이점, 그리고 실무에서 어떻게 사용되는지 상세히 분석합니다.

Body

TCP/IP 모델과 OSI 모델은 모두 네트워크 통신을 계층적으로 표현하지만, 설계 철학과 구조에서 중요한 차이가 있습니다. OSI 모델은 1980년대 초반 ISO에 의해 “이론적 완전성"을 목표로 설계된 반면, TCP/IP 모델은 1970년대 미국 국방부(DoD)의 ARPANET 프로젝트에서 “실용적 구현"을 목표로 개발되었습니다.

TCP/IP 4계층 모델 구조

  1. Network Access Layer (네트워크 접근 계층): OSI의 물리 계층(1)과 데이터 링크 계층(2)을 결합합니다. Ethernet, Wi-Fi, PPP 등의 프로토콜이 이 계층에서 동작합니다.

  2. Internet Layer (인터넷 계층): OSI의 네트워크 계층(3)에 해당합니다. IP, ICMP, IGMP, ARP 등이 이 계층에서 동작합니다.

  3. Transport Layer (전송 계층): OSI의 전송 계층(4)에 해당합니다. TCP와 UDP가 이 계층의 주요 프로토콜입니다.

  4. Application Layer (응용 계층): OSI의 세션 계층(5), 표현 계층(6), 응용 계층(7)을 결합합니다. HTTP, FTP, SMTP, DNS, SSH 등 모든 응용 프로토콜이 이 계층에서 동작합니다.

일부 문헌에서는 Network Access Layer를 Physical Layer와 Data Link Layer로 분리하여 5계층 모델로 설명하기도 합니다.

매핑의 비대칭성

OSI와 TCP/IP의 매핑은 완벽하지 않습니다. 예를 들어, ARP(Address Resolution Protocol)는 OSI 모델에서 데이터 링크 계층(2)과 네트워크 계층(3) 사이에 위치하지만, TCP/IP 모델에서는 일반적으로 Network Access Layer에 배치됩니다. ICMP는 네트워크 계층 프로토콜이지만 IP 패킷 내에 캡슐화되어 전송됩니다.

설계 철학의 차이

OSI 모델은 프로토콜 독립적(protocol-independent) 참조 모델로 설계되어, 다양한 프로토콜 스택을 설명할 수 있습니다. 반면, TCP/IP 모델은 특정 프로토콜(TCP, IP)에 기반하여 설계되었으므로, 다른 프로토콜 스택(예: IPX/SPX, AppleTalk)을 설명하기 어렵습니다.

OSI 모델은 서비스, 인터페이스, 프로토콜을 명확히 구분하여 각 계층의 서비스를 추상적으로 정의합니다. TCP/IP 모델은 이러한 구분이 덜 명확하며, 더 실용적이고 구현 중심적입니다.

상위 계층의 통합

TCP/IP 모델이 OSI의 상위 3개 계층(세션, 표현, 응용)을 단일 응용 계층으로 통합한 이유는 실용성 때문입니다. 많은 응용 프로토콜이 세션 관리, 데이터 표현, 응용 기능을 혼합하여 구현하므로, 이들을 분리하는 것이 비현실적입니다. 예를 들어, HTTP는 응용 프로토콜이지만, 쿠키를 통한 세션 관리와 Content-Encoding을 통한 압축(표현 기능)을 자체적으로 처리합니다.

하위 계층의 통합

TCP/IP 모델이 물리 계층과 데이터 링크 계층을 Network Access Layer로 통합한 이유는, TCP/IP 프로토콜 스택이 이들 계층의 세부 사항을 추상화하고 “어떤 네트워크 기술 위에서도 동작"하도록 설계되었기 때문입니다. IP는 Ethernet, Wi-Fi, PPP, ATM 등 다양한 하위 계층 기술 위에서 동작할 수 있습니다.

실무에서의 활용

실무에서는 OSI 7계층 모델이 네트워크 문제 해결과 교육에 널리 사용됩니다. 네트워크 엔지니어들은 “Layer 3 문제” 또는 “Layer 2 스위치"와 같은 용어를 사용하여 OSI 모델의 계층을 참조합니다. 반면, 실제 구현은 TCP/IP 모델을 따릅니다. Linux 네트워크 스택, Windows 네트워크 API, 라우터 및 스위치 펌웨어는 모두 TCP/IP 모델을 기반으로 합니다.

Supporting Artifacts

표 S3.3-1: OSI vs TCP/IP 계층 매핑

OSI 7계층OSI 계층 이름TCP/IP 계층주요 프로토콜/기술PDU
7ApplicationApplicationHTTP, FTP, SMTP, DNS, SSH, TelnetData/Message
6PresentationApplicationTLS/SSL, MIME, JPEG, MPEG, ASCIIData/Message
5SessionApplicationNetBIOS, PPTP, RPCData/Message
4TransportTransportTCP, UDP, SCTPSegment/Datagram
3NetworkInternetIP, ICMP, IGMP, ARP (경계), RoutingPacket
2Data LinkNetwork Access (Link)Ethernet, Wi-Fi, PPP, ARP (경계)Frame
1PhysicalNetwork Access (Link)10BASE-T, 100BASE-TX, Wi-Fi PHYBits

표 S3.3-2: OSI vs TCP/IP 모델 차이점 요약

특성OSI 모델TCP/IP 모델
계층 수7개4개 (또는 5개)
개발 시기1984년 (ISO)1970년대 (DoD ARPANET)
설계 목적이론적 참조 모델실용적 구현 모델
프로토콜 의존성프로토콜 독립적TCP/IP 프로토콜에 기반
서비스 정의서비스, 인터페이스, 프로토콜 명확히 구분구분이 덜 명확
상위 계층세션, 표현, 응용 계층 분리응용 계층으로 통합
하위 계층물리, 데이터 링크 계층 분리네트워크 접근 계층으로 통합
현재 사용교육, 문제 해결, 표준 참조실제 구현, 인터넷 표준
유연성높음 (다양한 프로토콜 설명 가능)낮음 (TCP/IP에 특화)
복잡도높음 (7계층 세분화)낮음 (4계층 단순화)

다이어그램 S3.3-1: OSI와 TCP/IP 모델 비교

graph LR
    subgraph "OSI 7계층 모델"
        O7[7. Application]
        O6[6. Presentation]
        O5[5. Session]
        O4[4. Transport]
        O3[3. Network]
        O2[2. Data Link]
        O1[1. Physical]
    end
    
    subgraph "TCP/IP 4계층 모델"
        T4[Application]
        T3[Transport]
        T2[Internet]
        T1[Network Access]
    end
    
    O7 -.->|HTTP, FTP, DNS| T4
    O6 -.->|TLS/SSL, MIME| T4
    O5 -.->|NetBIOS, RPC| T4
    O4 -.->|TCP, UDP| T3
    O3 -.->|IP, ICMP, ARP| T2
    O2 -.->|Ethernet, Wi-Fi| T1
    O1 -.->|Physical Media| T1
    
    style O7 fill:#e1f5ff
    style O6 fill:#e1f5ff
    style O5 fill:#e1f5ff
    style O4 fill:#fff9e1
    style O3 fill:#ffe1e1
    style O2 fill:#ffe1e1
    style O1 fill:#ffe1e1
    style T4 fill:#e1f5ff
    style T3 fill:#fff9e1
    style T2 fill:#ffe1e1
    style T1 fill:#ffe1e1

S3.4: ISO/IEC 7498-1 표준 명세

Overview

OSI 모델의 공식 표준인 ISO/IEC 7498-1의 핵심 내용, 구조, 그리고 각 조항의 의미를 상세히 분석합니다.

Body

ISO/IEC 7498-1은 “Information technology — Open Systems Interconnection — Basic Reference Model: The Basic Model"이라는 제목으로 1994년 제2판이 발표되었으며, ITU-T Recommendation X.200으로도 발행되었습니다. 이 표준은 OSI 참조 모델의 기본 아키텍처를 정의하며, 시스템 상호 연결을 위한 표준 개발의 공통 기반을 제공합니다.

표준의 구조

ISO/IEC 7498-1은 9개의 주요 조항(Clause)과 2개의 부록(Annex)으로 구성됩니다.

Clause 1 (Scope): 표준의 범위를 정의합니다. OSI 참조 모델의 목적은 시스템 상호 연결을 위한 표준 개발의 조정을 위한 공통 기반을 제공하고, 기존 표준을 전체 참조 모델 내에서 적절한 위치에 배치하며, 표준 개발 또는 개선이 필요한 영역을 식별하는 것입니다. 이 모델은 구현 명세로 사용되거나 실제 구현의 적합성을 평가하는 기준으로 사용되도록 의도되지 않았습니다.

Clause 4 (Reasons for OSI): OSI가 필요한 이유를 설명합니다. 다양한 제조사의 시스템 간 상호운용성을 보장하고, 네트워크 기술의 독립적 발전을 가능하게 하며, 계층화된 접근 방식을 통해 복잡도를 관리하기 위함입니다.

Clause 5 (General Nature of Layering): 계층화의 일반적 특성을 설명합니다. 각 계층은 명확히 정의된 기능을 가지며, 계층 간 인터페이스를 통해 서비스를 제공합니다. 계층화의 원칙은 다음과 같습니다.

Clause 6 (Layer Names): 7개 계층의 이름을 정의합니다. Physical, Data Link, Network, Transport, Session, Presentation, Application 순으로 번호가 매겨집니다.

Clause 7 (Layer Descriptions): 각 계층의 상세한 설명을 제공합니다. 각 계층에 대해 목적(purpose), 기능(functions), 서비스(services)가 명시됩니다. 예를 들어, 네트워크 계층의 주요 기능으로는 라우팅, 주소 지정, 혼잡 제어, 패킷 생존 시간 관리 등이 있습니다.

Clause 8 (Management Aspects): OSI 관리 측면을 설명합니다. 네트워크 관리는 구성 관리, 장애 관리, 성능 관리, 보안 관리, 회계 관리(FCAPS)로 구성됩니다.

Clause 9 (Conformance): OSI 참조 모델과의 적합성을 명시하는 방법을 정의합니다.

Annex A (Explanation of Layer Selection): 계층이 어떻게 선택되었는지에 대한 간략한 설명을 제공합니다. 각 계층의 경계는 다음 기준에 따라 결정되었습니다.

연결 모드와 비연결 모드

ISO/IEC 7498-1은 연결 지향(Connection-Oriented) 서비스와 비연결(Connectionless) 서비스를 모두 지원합니다. 1994년 제2판에서는 비연결 시스템 개념이 통합되었습니다. 연결 지향 서비스는 데이터 전송 전에 연결을 설정하고, 전송 후 연결을 해제하는 3단계(connection establishment, data transfer, connection release)를 거칩니다. 비연결 서비스는 연결 설정 없이 즉시 데이터를 전송합니다.

관련 표준

ISO/IEC 7498 시리즈는 여러 부분으로 구성됩니다.

Supporting Artifacts

표 S3.4-1: ISO/IEC 7498-1 표준 구조

조항제목주요 내용
Clause 1Scope표준의 범위, 목적, 구현 명세가 아님을 명시
Clause 4Reasons for OSIOSI의 필요성, 상호운용성, 독립적 발전
Clause 5General Nature of Layering계층화 원칙, 추상화, 인터페이스
Clause 6Layer Names7개 계층의 이름과 번호 정의
Clause 7Layer Descriptions각 계층의 목적, 기능, 서비스 상세 설명
Clause 8Management AspectsOSI 관리 프레임워크 (FCAPS)
Clause 9Conformance적합성 명시 방법
Annex AExplanation of Layer Selection계층 선택의 근거와 기준
Annex BAlphabetical Index to Definitions정의된 용어 색인

표 S3.4-2: ISO/IEC 7498 시리즈

Part제목발행 연도주요 내용
7498-1Basic Reference Model1994기본 7계층 아키텍처 정의
7498-2Security Architecture1989보안 서비스 (인증, 접근 제어, 기밀성, 무결성, 부인 방지)
7498-3Naming and Addressing1997명명 및 주소 지정 체계, NSAP 주소 구조
7498-4Management Framework1989네트워크 관리 프레임워크, FCAPS 모델

S3.5: 계층 독립성 원칙과 서비스 경계

Overview

OSI 모델의 핵심 설계 원칙인 계층 독립성과 각 계층 간 서비스 경계가 어떻게 정의되고, 실무에서 어떻게 적용되는지 심층 분석합니다.

Body

계층 독립성(layer independence)은 OSI 모델의 가장 중요한 설계 원칙 중 하나로, 각 계층이 다른 계층의 내부 구현을 알 필요 없이 독립적으로 작동하고 발전할 수 있도록 합니다. 이 원칙은 **정보 은닉(information hiding)**과 추상화(abstraction) 개념을 기반으로 합니다.

**서비스 경계(Service Boundary)**는 인접한 두 계층 사이의 인터페이스를 정의합니다. (N) 계층은 (N+1) 계층에 서비스를 제공하고, (N-1) 계층의 서비스를 사용합니다. 이 경계는 다음 요소들로 구성됩니다.

Service Access Point (SAP): SAP는 상위 계층이 하위 계층의 서비스에 접근하는 지점입니다. SAP는 주소로 식별되며, 여러 SAP가 동일 계층에 존재할 수 있습니다. 예를 들어, 전송 계층의 SAP는 포트 번호로 식별됩니다. 포트 80은 HTTP 서비스의 SAP, 포트 443은 HTTPS 서비스의 SAP입니다. 네트워크 계층의 SAP는 프로토콜 번호로 식별됩니다(TCP=6, UDP=17).

Service Primitives: Service Primitives는 계층 간 상호작용을 나타내는 추상적 연산입니다. 4가지 기본 타입이 있습니다.

예를 들어, TCP 연결 설정 과정을 Service Primitives로 표현하면 다음과 같습니다.

  1. 클라이언트 응용: CONNECT.request(server_address, server_port)
  2. 클라이언트 TCP: SYN 세그먼트 전송
  3. 서버 TCP: CONNECT.indication(client_address, client_port)
  4. 서버 응용: CONNECT.response(accept)
  5. 서버 TCP: SYN-ACK 세그먼트 전송
  6. 클라이언트 TCP: CONNECT.confirm(success)

계층 독립성의 이점

  1. 모듈성(Modularity): 각 계층을 독립적으로 개발, 테스트, 유지보수할 수 있습니다.
  2. 기술 진화(Technology Evolution): 한 계층의 기술이 발전해도 다른 계층에 영향을 주지 않습니다. 예: Ethernet이 10Mbps에서 100Gbps로 발전해도 상위 계층(IP, TCP, HTTP)은 변경 불필요.
  3. 상호운용성(Interoperability): 서로 다른 제조사의 구현이 표준 인터페이스를 준수하면 함께 작동합니다.
  4. 재사용성(Reusability): 한 계층의 프로토콜을 여러 상위 계층 응용에서 재사용할 수 있습니다. 예: TCP는 HTTP, FTP, SMTP 등 다양한 응용 프로토콜에서 사용.

계층 독립성의 한계

실제 구현에서는 계층 간 완전한 독립성을 달성하기 어렵습니다. 성능 최적화를 위해 계층 간 정보를 공유하거나(cross-layer optimization), 특정 계층의 기능을 다른 계층에서 고려해야 하는 경우가 있습니다.

Cross-Layer Optimization: 무선 네트워크에서는 물리 계층의 신호 강도 정보를 전송 계층의 혼잡 제어 알고리즘에 전달하여 성능을 향상시킬 수 있습니다. 그러나 이는 계층 독립성을 위반하므로, 표준 인터페이스를 통해 신중하게 설계되어야 합니다.

Header Overhead: 각 계층이 헤더를 추가하므로, 실제 페이로드 대비 오버헤드가 상당할 수 있습니다. 작은 메시지(예: IoT 센서 데이터)의 경우, 헤더가 페이로드보다 클 수 있습니다. 이를 완화하기 위해 헤더 압축(header compression)이나 계층 통합이 고려됩니다.

End-to-End Principle: 네트워크 설계의 중요한 원칙으로, 특정 기능은 종단 시스템(end systems)에서만 완전히 구현될 수 있으며, 중간 네트워크 계층에서는 최선 노력(best-effort)만 제공해야 한다는 원칙입니다. 예를 들어, 데이터 무결성 검증은 전송 계층(TCP)이나 응용 계층에서 수행되어야 하며, 중간 라우터에서 검증하는 것은 비효율적입니다.

Supporting Artifacts

표 S3.5-1: Service Primitives 사용 예제

시나리오Service Primitive방향설명
TCP 연결 설정CONNECT.request(N+1) → (N)응용이 TCP에 연결 요청
TCP 연결 설정CONNECT.indication(N) → (N+1)TCP가 응용에 연결 요청 알림
TCP 연결 설정CONNECT.response(N+1) → (N)응용이 TCP에 수락/거부 응답
TCP 연결 설정CONNECT.confirm(N) → (N+1)TCP가 응용에 연결 성공/실패 확인
데이터 전송SEND.request(N+1) → (N)응용이 TCP에 데이터 전송 요청
데이터 수신RECEIVE.indication(N) → (N+1)TCP가 응용에 데이터 도착 알림
연결 종료DISCONNECT.request(N+1) → (N)응용이 TCP에 연결 종료 요청
연결 종료DISCONNECT.indication(N) → (N+1)TCP가 응용에 연결 종료 알림

다이어그램 S3.5-1: 계층 독립성과 서비스 경계

graph TB
    subgraph "계층 N+1 (상위 계층)"
        UP[Protocol Entity<br/>N+1]
    end
    
    subgraph "서비스 경계 (Service Boundary)"
        SAP1[SAP: Service<br/>Access Point]
        SP[Service Primitives<br/>Request, Indication<br/>Response, Confirm]
    end
    
    subgraph "계층 N (현재 계층)"
        N[Protocol Entity<br/>N]
        PCI[PCI: Protocol<br/>Control Info<br/>헤더 추가]
    end
    
    subgraph "서비스 경계 (Service Boundary)"
        SAP2[SAP]
        SP2[Service Primitives]
    end
    
    subgraph "계층 N-1 (하위 계층)"
        DOWN[Protocol Entity<br/>N-1]
    end
    
    UP -->|Service Request| SAP1
    SAP1 -->|Service Primitive| SP
    SP -->|Invoke Service| N
    N -->|Add Header| PCI
    PCI -->|Use Lower Service| SAP2
    SAP2 -->|Service Primitive| SP2
    SP2 -->|Pass PDU| DOWN
    
    style UP fill:#e1f5ff
    style SAP1 fill:#fff9e1
    style SP fill:#fff9e1
    style N fill:#ffe1e1
    style PCI fill:#ffe1e1
    style SAP2 fill:#fff9e1
    style SP2 fill:#fff9e1
    style DOWN fill:#ffcccc

SW: Workshop (Hands-on) - OSI 모델 실습

Overview

SW 섹션은 OSI 모델의 이론을 실제로 적용하고 검증하는 3가지 실습을 제공합니다. 네트워크 트러블슈팅, 패킷 분석, 그리고 간단한 프로토콜 스택 구현을 통해 학습한 내용을 체득합니다.

SW.1: OSI 모델을 활용한 네트워크 트러블슈팅

Goal

OSI 7계층 모델의 Bottom-up 접근 방식을 사용하여 실제 네트워크 문제를 체계적으로 진단하고 해결하는 능력을 습득합니다.

Input

Expected

Evaluation

Steps

Step 1: 물리 계층(Layer 1) 체크

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Windows
# 네트워크 어댑터 상태 확인
netsh interface show interface

# 네트워크 어댑터 활성화 확인
Get-NetAdapter | Select-Object Name, Status, LinkSpeed

# Linux/macOS
# 네트워크 인터페이스 상태 확인
ip link show
# 또는
ifconfig

# 케이블 연결 상태 확인 (Linux)
ethtool eth0

체크리스트:

Step 2: 데이터 링크 계층(Layer 2) 체크

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Windows
# ARP 테이블 확인
arp -a

# MAC 주소 확인
ipconfig /all

# Linux/macOS
# ARP 테이블 확인
arp -n
# 또는
ip neigh show

# MAC 주소 확인
ip link show eth0

체크리스트:

1
2
3
4
5
6
# 기본 게이트웨이에 ping
# Windows
ping 192.168.1.1

# Linux/macOS
ping -c 4 192.168.1.1

Step 3: 네트워크 계층(Layer 3) 체크

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Windows
# IP 설정 확인
ipconfig

# 라우팅 테이블 확인
route print

# Linux/macOS
# IP 설정 확인
ip addr show

# 라우팅 테이블 확인
ip route show
# 또는
route -n

체크리스트:

1
2
3
4
5
6
7
8
9
# 외부 IP에 ping (Google DNS)
ping 8.8.8.8

# traceroute로 경로 확인
# Windows
tracert 8.8.8.8

# Linux/macOS
traceroute 8.8.8.8

Step 4: 전송 계층(Layer 4) 체크

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Windows
# 열린 포트 확인
netstat -an | findstr "LISTENING"

# 특정 연결 확인
netstat -an | findstr "80"

# Linux/macOS
# 열린 포트 확인
ss -tuln
# 또는
netstat -tuln

# 특정 포트로 연결 테스트 (telnet 사용)
telnet www.example.com 80

체크리스트:

Step 5: 응용 계층(Layer 7) 체크

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# DNS 해석 확인
# Windows
nslookup www.example.com

# Linux/macOS
nslookup www.example.com
# 또는
dig www.example.com

# HTTP 요청 테스트 (curl 사용)
curl -I https://www.example.com

# 또는
curl -v https://www.example.com

체크리스트:

Step 6: 문제 해결 및 문서화

문제가 Layer 3(네트워크 계층)에서 발견된 경우의 예:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
문제: 기본 게이트웨이가 설정되지 않음
원인: DHCP 서버 오류 또는 수동 설정 누락
해결: 
1. Windows: "제어판 > 네트워크 및 공유 센터 > 어댑터 설정 변경 > IPv4 속성"에서 DHCP 또는 수동 IP 설정
2. Linux: /etc/network/interfaces 또는 NetworkManager 설정 수정
3. macOS: "시스템 환경설정 > 네트워크"에서 TCP/IP 설정 확인

검증: 
# 기본 게이트웨이에 ping
ping 192.168.1.1
# 외부 인터넷에 ping
ping 8.8.8.8

SW.2: Wireshark를 이용한 OSI 계층별 패킷 분석

Goal

Wireshark를 사용하여 실제 네트워크 트래픽을 캡처하고, OSI 7계층 모델에 따라 각 계층의 헤더와 데이터를 분석하는 능력을 습득합니다.

Input

Expected

Evaluation

Steps

Step 1: Wireshark 설치 및 캡처 시작

  1. Wireshark를 다운로드하고 설치합니다.
  2. Wireshark를 실행하고 사용 중인 네트워크 인터페이스를 선택합니다 (예: Wi-Fi, Ethernet).
  3. 캡처를 시작합니다 (상단의 상어 지느러미 아이콘 클릭 또는 Ctrl+E).

Step 2: HTTP 트래픽 생성

웹 브라우저를 열고 http://www.example.com (HTTPS가 아닌 HTTP) 에 접속합니다.

주의: HTTPS는 암호화되어 있어 내용을 볼 수 없으므로, HTTP 사이트를 사용하거나 Wireshark에서 TLS/SSL 키를 설정해야 합니다.

Step 3: 캡처 중지 및 필터 적용

  1. 캡처를 중지합니다 (Ctrl+E).
  2. 필터를 적용하여 HTTP 트래픽만 표시합니다.
1
http

또는 특정 IP 주소로 필터링:

1
ip.addr == 93.184.216.34

Step 4: Layer 2 (데이터 링크 계층) 분석 - Ethernet Frame

  1. Wireshark에서 HTTP GET 요청 패킷을 선택합니다.
  2. 하단 패널에서 “Ethernet II” 섹션을 확장합니다.

분석할 필드:

예제:

1
2
3
4
Ethernet II, Src: Dell_12:34:56 (00:11:22:33:44:55), Dst: Cisco_ab:cd:ef (aa:bb:cc:dd:ee:ff)
    Destination: Cisco_ab:cd:ef (aa:bb:cc:dd:ee:ff)
    Source: Dell_12:34:56 (00:11:22:33:44:55)
    Type: IPv4 (0x0800)

Step 5: Layer 3 (네트워크 계층) 분석 - IP Packet

“Internet Protocol Version 4” 섹션을 확장합니다.

분석할 필드:

예제:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Internet Protocol Version 4, Src: 192.168.1.100, Dst: 93.184.216.34
    Version: 4
    Header Length: 20 bytes
    Total Length: 578
    Identification: 0x1234 (4660)
    Flags: 0x4000, Don't fragment
    Time to live: 64
    Protocol: TCP (6)
    Source: 192.168.1.100
    Destination: 93.184.216.34

Step 6: Layer 4 (전송 계층) 분석 - TCP Segment

“Transmission Control Protocol” 섹션을 확장합니다.

분석할 필드:

예제:

1
2
3
4
5
6
7
8
9
Transmission Control Protocol, Src Port: 50234, Dst Port: 80, Seq: 1, Ack: 1, Len: 518
    Source Port: 50234
    Destination Port: 80
    Sequence number: 1
    Acknowledgment number: 1
    Flags: 0x018 (PSH, ACK)
        .... .... ...1 .... = Acknowledgment
        .... .... .... 1... = Push
    Window size value: 64240

Step 7: Layer 7 (응용 계층) 분석 - HTTP Request

“Hypertext Transfer Protocol” 섹션을 확장합니다.

분석할 필드:

예제:

1
2
3
4
5
6
Hypertext Transfer Protocol
    GET / HTTP/1.1\r\n
    Host: www.example.com\r\n
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)\r\n
    Accept: text/html,application/xhtml+xml\r\n
    \r\n

Step 8: Encapsulation 구조 시각화

Wireshark의 중간 패널에서 계층 구조를 관찰합니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Frame 123: 578 bytes on wire
├─ Ethernet II
│  ├─ Destination: aa:bb:cc:dd:ee:ff
│  ├─ Source: 00:11:22:33:44:55
│  └─ Type: IPv4 (0x0800)
├─ Internet Protocol Version 4
│  ├─ Source: 192.168.1.100
│  ├─ Destination: 93.184.216.34
│  └─ Protocol: TCP (6)
├─ Transmission Control Protocol
│  ├─ Source Port: 50234
│  ├─ Destination Port: 80
│  └─ Flags: PSH, ACK
└─ Hypertext Transfer Protocol
   └─ GET / HTTP/1.1

Step 9: 분석 결과 문서화

분석 결과를 다음 형식으로 문서화합니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
## 패킷 분석 결과

### 기본 정보
- 패킷 번호: 123
- 시간: 2025-11-08 10:30:45.123456
- 전체 크기: 578 bytes

### Layer 2 (Ethernet)
- Src MAC: 00:11:22:33:44:55 (Dell)
- Dst MAC: aa:bb:cc:dd:ee:ff (Cisco 라우터)
- EtherType: 0x0800 (IPv4)

### Layer 3 (IP)
- Src IP: 192.168.1.100 (내 컴퓨터)
- Dst IP: 93.184.216.34 (www.example.com)
- Protocol: TCP (6)
- TTL: 64

### Layer 4 (TCP)
- Src Port: 50234 (임시 포트)
- Dst Port: 80 (HTTP)
- Flags: PSH, ACK
- Seq: 1, Ack: 1

### Layer 7 (HTTP)
- Method: GET
- URI: /
- Host: www.example.com
- User-Agent: Mozilla/5.0...

SW.3: 간단한 프로토콜 스택 구현

Goal

Python을 사용하여 OSI 모델의 핵심 개념(Encapsulation, PDU 생성, 계층 간 통신)을 구현하는 간단한 프로토콜 스택을 만들고, 이를 통해 계층화된 네트워크 아키텍처를 실습합니다.

Input

Expected

Evaluation

Steps

Step 1: 프로젝트 구조 설정

1
2
3
4
5
6
# 프로젝트 디렉토리 생성
mkdir osi_protocol_stack
cd osi_protocol_stack

# Python 파일 생성
touch protocol_stack.py

Step 2: Layer 4 (TCP Segment) 클래스 구현

protocol_stack.py 파일에 다음 코드를 작성합니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import struct
import random

class TCPSegment:
    """TCP 세그먼트 (Layer 4)"""
    
    def __init__(self, src_port, dst_port, data, seq_num=None, ack_num=0, flags=0x18):
        self.src_port = src_port
        self.dst_port = dst_port
        self.seq_num = seq_num if seq_num else random.randint(1000, 9999)
        self.ack_num = ack_num
        self.data_offset = 5  # 5 * 4 = 20 bytes (헤더 크기)
        self.flags = flags  # 0x18 = PSH + ACK
        self.window = 65535
        self.checksum = 0  # 실제로는 계산 필요
        self.urgent_ptr = 0
        self.data = data
    
    def encapsulate(self):
        """TCP 헤더 + 데이터를 바이너리로 직렬화"""
        header = struct.pack(
            '!HHIIBBHHH',  # 네트워크 바이트 순서 (big-endian)
            self.src_port,
            self.dst_port,
            self.seq_num,
            self.ack_num,
            (self.data_offset << 4),  # 상위 4비트는 data offset
            self.flags,
            self.window,
            self.checksum,
            self.urgent_ptr
        )
        return header + self.data.encode('utf-8')
    
    @classmethod
    def decapsulate(cls, binary_data):
        """바이너리 데이터에서 TCP 세그먼트 복원"""
        header_size = 20
        header = binary_data[:header_size]
        payload = binary_data[header_size:].decode('utf-8')
        
        unpacked = struct.unpack('!HHIIBBHHH', header)
        
        return cls(
            src_port=unpacked[0],
            dst_port=unpacked[1],
            data=payload,
            seq_num=unpacked[2],
            ack_num=unpacked[3],
            flags=unpacked[5]
        )
    
    def __repr__(self):
        return (f"TCP(SrcPort={self.src_port}, DstPort={self.dst_port}, "
                f"Seq={self.seq_num}, Flags=0x{self.flags:02x})")

Step 3: Layer 3 (IP Packet) 클래스 구현

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class IPPacket:
    """IP 패킷 (Layer 3)"""
    
    def __init__(self, src_ip, dst_ip, payload, protocol=6):
        self.version = 4
        self.ihl = 5  # 5 * 4 = 20 bytes
        self.tos = 0
        self.total_length = 20 + len(payload)
        self.identification = random.randint(1, 65535)
        self.flags = 0x4000  # Don't Fragment
        self.ttl = 64
        self.protocol = protocol  # TCP = 6
        self.checksum = 0  # 실제로는 계산 필요
        self.src_ip = src_ip
        self.dst_ip = dst_ip
        self.payload = payload
    
    def _ip_to_int(self, ip_str):
        """IP 주소 문자열을 32비트 정수로 변환"""
        parts = [int(x) for x in ip_str.split('.')]
        return (parts[0] << 24) + (parts[1] << 16) + (parts[2] << 8) + parts[3]
    
    def _int_to_ip(self, ip_int):
        """32비트 정수를 IP 주소 문자열로 변환"""
        return f"{(ip_int >> 24) & 0xFF}.{(ip_int >> 16) & 0xFF}.{(ip_int >> 8) & 0xFF}.{ip_int & 0xFF}"
    
    def encapsulate(self):
        """IP 헤더 + TCP 세그먼트를 바이너리로 직렬화"""
        header = struct.pack(
            '!BBHHHBBHII',
            (self.version << 4) + self.ihl,
            self.tos,
            self.total_length,
            self.identification,
            self.flags,
            self.ttl,
            self.protocol,
            self.checksum,
            self._ip_to_int(self.src_ip),
            self._ip_to_int(self.dst_ip)
        )
        return header + self.payload
    
    @classmethod
    def decapsulate(cls, binary_data):
        """바이너리 데이터에서 IP 패킷 복원"""
        header_size = 20
        header = binary_data[:header_size]
        payload = binary_data[header_size:]
        
        unpacked = struct.unpack('!BBHHHBBHII', header)
        
        packet = cls(
            src_ip="0.0.0.0",
            dst_ip="0.0.0.0",
            payload=payload,
            protocol=unpacked[6]
        )
        packet.src_ip = packet._int_to_ip(unpacked[8])
        packet.dst_ip = packet._int_to_ip(unpacked[9])
        
        return packet
    
    def __repr__(self):
        return f"IP(Src={self.src_ip}, Dst={self.dst_ip}, Proto={self.protocol}, TTL={self.ttl})"

Step 4: Layer 2 (Ethernet Frame) 클래스 구현

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import binascii

class EthernetFrame:
    """Ethernet 프레임 (Layer 2)"""
    
    def __init__(self, src_mac, dst_mac, payload, ethertype=0x0800):
        self.dst_mac = dst_mac
        self.src_mac = src_mac
        self.ethertype = ethertype  # IPv4 = 0x0800
        self.payload = payload
    
    def _mac_to_bytes(self, mac_str):
        """MAC 주소 문자열을 바이트로 변환"""
        return bytes.fromhex(mac_str.replace(':', ''))
    
    def _bytes_to_mac(self, mac_bytes):
        """바이트를 MAC 주소 문자열로 변환"""
        return ':'.join(f'{b:02x}' for b in mac_bytes)
    
    def _calculate_fcs(self, data):
        """FCS (CRC-32) 계산"""
        return binascii.crc32(data) & 0xFFFFFFFF
    
    def encapsulate(self):
        """Ethernet 헤더 + IP 패킷 + FCS를 바이너리로 직렬화"""
        header = (
            self._mac_to_bytes(self.dst_mac) +
            self._mac_to_bytes(self.src_mac) +
            struct.pack('!H', self.ethertype)
        )
        frame_data = header + self.payload
        fcs = struct.pack('!I', self._calculate_fcs(frame_data))
        return frame_data + fcs
    
    @classmethod
    def decapsulate(cls, binary_data):
        """바이너리 데이터에서 Ethernet 프레임 복원"""
        dst_mac = binary_data[:6]
        src_mac = binary_data[6:12]
        ethertype = struct.unpack('!H', binary_data[12:14])[0]
        payload = binary_data[14:-4]  # FCS 제외
        fcs = binary_data[-4:]
        
        frame = cls(
            src_mac="00:00:00:00:00:00",
            dst_mac="00:00:00:00:00:00",
            payload=payload,
            ethertype=ethertype
        )
        frame.src_mac = frame._bytes_to_mac(src_mac)
        frame.dst_mac = frame._bytes_to_mac(dst_mac)
        
        # FCS 검증 (실제로는 검증 수행)
        calculated_fcs = frame._calculate_fcs(binary_data[:-4])
        received_fcs = struct.unpack('!I', fcs)[0]
        
        if calculated_fcs != received_fcs:
            print(f"경고: FCS 불일치! 계산={calculated_fcs:08x}, 수신={received_fcs:08x}")
        
        return frame
    
    def __repr__(self):
        return f"Ethernet(Src={self.src_mac}, Dst={self.dst_mac}, Type=0x{self.ethertype:04x})"

Step 5: 프로토콜 스택 사용 예제

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
def main():
    print("=" * 60)
    print("OSI 프로토콜 스택 시뮬레이션")
    print("=" * 60)
    
    # 송신자
    print("\n[송신자] Encapsulation 시작")
    print("-" * 60)
    
    # Layer 7: Application Data
    message = "Hello, OSI Model!"
    print(f"L7 Application: 메시지 = '{message}'")
    
    # Layer 4: TCP Segment
    tcp_segment = TCPSegment(
        src_port=50234,
        dst_port=80,
        data=message
    )
    tcp_data = tcp_segment.encapsulate()
    print(f"L4 Transport: {tcp_segment}")
    print(f"   TCP 세그먼트 크기 = {len(tcp_data)} bytes")
    
    # Layer 3: IP Packet
    ip_packet = IPPacket(
        src_ip="192.168.1.100",
        dst_ip="203.0.113.50",
        payload=tcp_data
    )
    ip_data = ip_packet.encapsulate()
    print(f"L3 Network: {ip_packet}")
    print(f"   IP 패킷 크기 = {len(ip_data)} bytes")
    
    # Layer 2: Ethernet Frame
    ethernet_frame = EthernetFrame(
        src_mac="00:11:22:33:44:55",
        dst_mac="aa:bb:cc:dd:ee:ff",
        payload=ip_data
    )
    frame_data = ethernet_frame.encapsulate()
    print(f"L2 Data Link: {ethernet_frame}")
    print(f"   Ethernet 프레임 크기 = {len(frame_data)} bytes")
    
    # Layer 1: Physical (비트 스트림으로 변환)
    print(f"L1 Physical: 비트 스트림으로 변환 중...")
    bit_stream = ''.join(f'{byte:08b}' for byte in frame_data[:20])  # 처음 20바이트만 표시
    print(f"   비트 스트림 (처음 160 bits): {bit_stream}...")
    
    # 수신자
    print("\n" + "=" * 60)
    print("[수신자] Decapsulation 시작")
    print("-" * 60)
    
    # Layer 1: Physical
    print("L1 Physical: 비트 스트림 수신, 프레임으로 변환 중...")
    
    # Layer 2: Ethernet Frame
    received_ethernet = EthernetFrame.decapsulate(frame_data)
    print(f"L2 Data Link: {received_ethernet}")
    print(f"   FCS 검증 완료")
    
    # Layer 3: IP Packet
    received_ip = IPPacket.decapsulate(received_ethernet.payload)
    print(f"L3 Network: {received_ip}")
    print(f"   TTL 확인, 라우팅 완료")
    
    # Layer 4: TCP Segment
    received_tcp = TCPSegment.decapsulate(received_ip.payload)
    print(f"L4 Transport: {received_tcp}")
    print(f"   순서 번호 확인, ACK 전송 준비")
    
    # Layer 7: Application
    received_message = received_tcp.data
    print(f"L7 Application: 수신 메시지 = '{received_message}'")
    
    # 검증
    print("\n" + "=" * 60)
    print("전송 검증")
    print("-" * 60)
    print(f"송신 메시지: '{message}'")
    print(f"수신 메시지: '{received_message}'")
    print(f"전송 성공: {message == received_message}")
    
    # 오버헤드 계산
    print("\n" + "=" * 60)
    print("오버헤드 분석")
    print("-" * 60)
    payload_size = len(message)
    tcp_header_size = 20
    ip_header_size = 20
    ethernet_header_size = 14
    fcs_size = 4
    total_overhead = tcp_header_size + ip_header_size + ethernet_header_size + fcs_size
    
    print(f"실제 페이로드: {payload_size} bytes")
    print(f"TCP 헤더: {tcp_header_size} bytes")
    print(f"IP 헤더: {ip_header_size} bytes")
    print(f"Ethernet 헤더: {ethernet_header_size} bytes")
    print(f"FCS: {fcs_size} bytes")
    print(f"총 오버헤드: {total_overhead} bytes")
    print(f"전체 프레임 크기: {len(frame_data)} bytes")
    print(f"오버헤드 비율: {total_overhead / len(frame_data) * 100:.1f}%")

if __name__ == "__main__":
    main()

Step 6: 프로그램 실행

1
python protocol_stack.py

예상 출력:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
============================================================
OSI 프로토콜 스택 시뮬레이션
============================================================

[송신자] Encapsulation 시작
------------------------------------------------------------
L7 Application: 메시지 = 'Hello, OSI Model!'
L4 Transport: TCP(SrcPort=50234, DstPort=80, Seq=3847, Flags=0x18)
   TCP 세그먼트 크기 = 37 bytes
L3 Network: IP(Src=192.168.1.100, Dst=203.0.113.50, Proto=6, TTL=64)
   IP 패킷 크기 = 57 bytes
L2 Data Link: Ethernet(Src=00:11:22:33:44:55, Dst=aa:bb:cc:dd:ee:ff, Type=0x0800)
   Ethernet 프레임 크기 = 75 bytes
L1 Physical: 비트 스트림으로 변환 중...
   비트 스트림 (처음 160 bits): 1010101010111011110011001100110111011101111011111110111111110000010000010001001000110011010001...

============================================================
[수신자] Decapsulation 시작
------------------------------------------------------------
L1 Physical: 비트 스트림 수신, 프레임으로 변환 중...
L2 Data Link: Ethernet(Src=00:11:22:33:44:55, Dst=aa:bb:cc:dd:ee:ff, Type=0x0800)
   FCS 검증 완료
L3 Network: IP(Src=192.168.1.100, Dst=203.0.113.50, Proto=6, TTL=64)
   TTL 확인, 라우팅 완료
L4 Transport: TCP(SrcPort=50234, DstPort=80, Seq=3847, Flags=0x18)
   순서 번호 확인, ACK 전송 준비
L7 Application: 수신 메시지 = 'Hello, OSI Model!'

============================================================
전송 검증
------------------------------------------------------------
송신 메시지: 'Hello, OSI Model!'
수신 메시지: 'Hello, OSI Model!'
전송 성공: True

============================================================
오버헤드 분석
------------------------------------------------------------
실제 페이로드: 17 bytes
TCP 헤더: 20 bytes
IP 헤더: 20 bytes
Ethernet 헤더: 14 bytes
FCS: 4 bytes
총 오버헤드: 58 bytes
전체 프레임 크기: 75 bytes
오버헤드 비율: 77.3%

Final Summary (FS)

OSI 7계층 모델은 ISO/IEC 7498-1 표준으로 정의된 네트워크 통신의 개념적 참조 프레임워크입니다. 물리 계층부터 응용 계층까지 7개의 독립적 계층으로 구성되며, 각 계층은 명확한 기능과 책임을 가집니다. S1에서는 OSI 모델의 탄생 배경, 7개 계층의 핵심 기능, 데이터 통신의 기본 흐름을 학습했습니다. S2에서는 분산 시스템 관점에서 CAP 정리, 합의 알고리즘, 복제 전략, 일관성 모델, 네트워크 프로토콜을 다루었습니다. S3에서는 Encapsulation/Decapsulation 메커니즘, 각 계층별 PDU 구조, TCP/IP 모델과의 매핑, ISO/IEC 7498-1 표준 명세, 계층 독립성 원칙을 심화 학습했습니다. SW에서는 네트워크 트러블슈팅, Wireshark 패킷 분석, 프로토콜 스택 구현을 통해 이론을 실습했습니다. OSI 모델은 비록 TCP/IP가 실제 인터넷 표준이지만, 네트워크 교육, 문제 해결, 프로토콜 설계의 보편적 언어로 여전히 널리 활용되고 있습니다.


Learning Guide (LG)

권장 학습 순서

1단계: S1 (Beginner) - 토픽 필수 기초 (2-3시간)

2단계: S2 (Intermediate) - 분산 시스템 관점 (4-5시간)

3단계: SW.1 (Hands-on) - 트러블슈팅 실습 (1-2시간)

4단계: S3 (Advanced) - 심화 지식 (5-6시간)

5단계: SW.2 (Hands-on) - 패킷 분석 실습 (2-3시간)

6단계: SW.3 (Hands-on) - 프로토콜 스택 구현 (3-4시간)

학습 팁

추가 학습 자료


Terminology (TERM)

용어(EN, 약어)한글정의역할/맥락관련 개념실무 연관성근거(RF#)
OSI ModelOSI 모델네트워크 통신을 7개 계층으로 분리한 개념적 참조 프레임워크ISO/ITU가 1984년 표준화한 네트워크 아키텍처TCP/IP Model, ISO/IEC 7498-1네트워크 교육, 문제 해결, 프로토콜 설계의 보편적 언어RF#1, RF#11
PDU (Protocol Data Unit)프로토콜 데이터 단위특정 계층에서 전송되는 데이터의 단위 (헤더+페이로드)각 계층마다 고유한 PDU 이름 사용 (Bit, Frame, Packet, Segment)SDU, Encapsulation패킷 분석, 네트워크 디버깅 시 계층별 데이터 구조 이해 필수RF#31, RF#32
SDU (Service Data Unit)서비스 데이터 단위상위 계층에서 하위 계층으로 전달되는 데이터 (하위 계층의 페이로드)(N+1) 계층의 PDU = (N) 계층의 SDUPDU, Encapsulation계층 간 인터페이스 설계 시 서비스 경계 정의RF#31, RF#34
Encapsulation캡슐화상위 계층 데이터에 하위 계층 헤더/트레일러를 추가하는 과정송신자 측에서 계층 7→1로 내려가며 수행PDU, Header, Trailer네트워크 프로그래밍 시 패킷 생성 과정 이해RF#33, RF#35
Decapsulation역캡슐화수신한 데이터에서 각 계층의 헤더/트레일러를 제거하는 과정수신자 측에서 계층 1→7로 올라가며 수행PDU, Header패킷 파싱, 프로토콜 분석 시 필수 개념RF#33, RF#35
SAP (Service Access Point)서비스 접근점상위 계층이 하위 계층의 서비스에 접근하는 논리적 지점포트 번호(전송 계층), 프로토콜 번호(네트워크 계층)로 식별Service Primitives, Layer IndependenceAPI 설계, 소켓 프로그래밍 시 서비스 경계 이해RF#41, RF#42
Service Primitives서비스 프리미티브계층 간 상호작용을 나타내는 추상 연산 (Request, Indication, Response, Confirm)SAP를 통해 교환되는 제어 메시지SAP, Layer Independence프로토콜 상태 머신 설계, 계층 간 통신 구현RF#45, RF#50
TCP/IP ModelTCP/IP 모델4개 계층으로 구성된 실용적 네트워크 모델 (Network Access, Internet, Transport, Application)1970년대 ARPANET에서 개발, 현대 인터넷의 기반OSI Model, Protocol Stack실제 네트워크 구현, Linux/Windows 네트워크 스택RF#21, RF#23
Layer Independence계층 독립성각 계층이 다른 계층의 내부 구현을 몰라도 독립적으로 작동하는 원칙정보 은닉과 추상화를 통해 모듈성 제공Abstraction, Modularity프로토콜 표준화, 멀티 벤더 상호운용성 보장RF#11, RF#14
ISO/IEC 7498-1ISO/IEC 7498-1 표준OSI 기본 참조 모델을 정의하는 국제 표준 (1994년 제2판)ITU-T X.200으로도 발행됨OSI Model, Standard네트워크 프로토콜 표준화 작업 시 참조 문서RF#11, RF#14
CAP TheoremCAP 정리분산 시스템에서 일관성(C), 가용성(A), 분할 내성(P) 중 최대 2가지만 동시 보장 가능Eric Brewer 제안(2000), Gilbert-Lynch 증명(2002)Consistency Models, Replication분산 데이터베이스 설계, 클라우드 아키텍처 결정RF#외부(분산시스템)
Consensus Algorithms합의 알고리즘분산 노드가 단일 값에 합의하도록 하는 알고리즘 (Paxos, Raft, BFT)네트워크 불안정, 노드 실패 환경에서 일관성 보장Replication, Consistency분산 시스템, 블록체인, 클러스터 관리 구현RF#외부(분산시스템)
MTU (Maximum Transmission Unit)최대 전송 단위특정 계층에서 전송 가능한 최대 PDU 크기 (Ethernet: 1500 bytes)크기 초과 시 Fragmentation 발생Fragmentation, Packet네트워크 성능 튜닝, Jumbo Frame 설정RF#31, RF#33
Fragmentation단편화큰 패킷을 MTU 크기에 맞춰 여러 작은 패킷으로 분할하는 과정IP 계층에서 수행, Don’t Fragment 플래그로 제어 가능MTU, ReassemblyVPN, 터널링 환경에서 패킷 손실 원인 분석RF#31
MAC AddressMAC 주소네트워크 인터페이스 카드의 고유 물리 주소 (48비트)데이터 링크 계층에서 로컬 네트워크 내 장치 식별ARP, Frame네트워크 보안(MAC 필터링), 스위치 설정RF#6, RF#36

| TCP Three-Way Handshake | TCP 3방향 핸드셰이크 | TCP 연결 설정을 위한 3단계 프로세스 (SYN, SYN-ACK, ACK) | 신뢰성 있는 연결 지향 통신 구현 | TCP, Connection-Oriented | 소켓 프로그래밍, 네트워크 지연 분석 | RF#37 | | Wireshark | 와이어샤크 | 오픈소스 네트워크 패킷 분석 도구 | 실시간 트래픽 캡처 및 프로토콜 분석 | Packet Analysis, Troubleshooting | 네트워크 문제 진단, 보안 분석, 프로토콜 학습 | RF#외부(도구) |


References (REF)


문서 작성 완료

이상으로 OSI 7계층 모델에 대한 완전한 기술 문서를 작성했습니다. 문서는 다음과 같이 구성되었습니다:

  1. Pre-Header: Topic, Classification, Review
  2. Summary & Overview: 전체 개요
  3. Tags: 주요 키워드
  4. S1 (Beginner): 토픽 필수 기초 (3개 하위 섹션)
  5. S2 (Intermediate): T-DSYS 유형별 중급 지식 (5개 필수 키)
  6. S3 (Advanced): 토픽 특화 심화 (5개 고급 키)
  7. SW (Workshop): 3개 실습 (트러블슈팅, Wireshark, 프로토콜 스택)
  8. Final Summary: 전체 요약
  9. Learning Guide: 학습 로드맵
  10. Terminology: 17개 핵심 용어 (7-컬럼 스키마)
  11. References: 30개 참조 자료

모든 섹션은 템플릿의 규칙(§0-§7)을 준수하며, 특히:

문서가 도움이 되셨기를 바랍니다!