컴퓨터 구조 운영체제 네트워크 자료구조 알고리즘 데이터베이스 내 학습
network · 01

OSI 7계층

네트워크OSI프로토콜

OSI 7계층 모델은 네트워크 통신을 7개의 계층으로 표준화한 참조 모델입니다. 각 계층은 독립적인 역할을 수행하며, 송신 측에서 데이터를 아래 계층으로 내려보내며 헤더를 추가(캡슐화)하고, 수신 측에서는 위 계층으로 올라가며 헤더를 제거(역캡슐화)합니다.

7계층 — Application

응용 계층

사용자와 직접 상호작용하는 계층입니다. HTTP, HTTPS, FTP, SMTP, DNS, SSH 등의 프로토콜이 여기에 속합니다. 데이터 단위는 메시지(Message)이며, 브라우저·이메일 클라이언트·SSH 터미널 등의 애플리케이션이 이 계층을 사용합니다.

6계층 — Presentation

표현 계층

데이터의 형식 변환·암호화·압축을 담당합니다. 송신 측의 데이터 형식을 수신 측이 이해할 수 있는 형식으로 변환합니다. SSL/TLS 암호화, JPEG·MP3 포맷 변환, ASCII·UTF-8 인코딩 변환이 이 계층의 역할로 설명됩니다(실제 프로토콜이 계층에 정확히 대응하지는 않습니다). 현대 TCP/IP에서는 응용 계층에 통합되는 경우가 많습니다.

5계층 — Session

세션 계층

통신 세션의 시작·유지·종료를 관리합니다. 두 호스트 간의 대화를 조율하며, 체크포인트를 두어 긴 전송 중 오류 발생 시 재전송 범위를 최소화합니다. NetBIOS, RPC(Remote Procedure Call)가 대표적 프로토콜입니다.

4계층 — Transport

전송 계층

종단 간(End-to-End) 신뢰성 있는 데이터 전송을 책임집니다. TCP는 연결 지향·신뢰성 보장·흐름 제어·혼잡 제어를 제공하고, UDP는 비연결·빠른 전송을 제공합니다. 포트 번호로 프로세스를 구분하며, 데이터 단위는 세그먼트(TCP) 또는 데이터그램(UDP)입니다.

3계층 — Network

네트워크 계층

서로 다른 네트워크 간의 경로를 결정(라우팅)합니다. IP 주소를 사용해 논리적 주소를 지정하며, 라우터가 이 계층에서 동작합니다. IPv4·IPv6·ICMP가 대표 프로토콜이며(ARP는 2계층과 3계층 사이로 설명하기도 합니다), 데이터 단위는 패킷(Packet)입니다.

2계층 — Data Link

데이터 링크 계층

같은 네트워크 내 노드 간 신뢰성 있는 전송을 담당합니다. MAC 주소로 물리적 주소를 지정하며, 스위치가 이 계층에서 동작합니다. 오류 검출(CRC), 흐름 제어, 프레임 동기화를 수행합니다. 데이터 단위는 프레임(Frame)이며, Ethernet·Wi-Fi·PPP가 대표 프로토콜입니다.

1계층 — Physical (물리 계층) — 비트를 전기·광·무선 신호로 변환해 전송합니다. 케이블의 전압 레벨, 핀 배치, 신호 타이밍을 정의합니다. 허브·리피터·케이블이 이 계층의 장치이고, NIC는 1계층과 2계층에 걸칩니다. 데이터 단위는 비트(Bit)입니다.
캡슐화 (Encapsulation) — 송신 측이 데이터를 상위 계층에서 하위 계층으로 전달할 때 각 계층이 자신의 헤더(일부는 트레일러도)를 추가합니다. Application → Transport(TCP 헤더 추가, 세그먼트) → Network(IP 헤더 추가, 패킷) → Data Link(Ethernet 헤더+트레일러 추가, 프레임) → Physical(비트 전송) 순서입니다.
TCP/IP 4계층과의 관계 — 실제 인터넷은 OSI 7계층이 아닌 TCP/IP 4계층(Application / Transport / Internet / Network Access)을 사용합니다. OSI의 5·6·7계층이 TCP/IP의 Application 계층으로 통합되고, 1·2계층이 Network Access 계층으로 묶입니다.
계층별 장비 — Physical: 허브·리피터, Data Link: 스위치·브리지, Network: 라우터, Transport 이상: 게이트웨이·L7 로드 밸런서. 각 장비는 기본적으로 해당 계층까지의 헤더를 읽고 처리하며 상위 계층 내용에는 관여하지 않습니다(여러 계층을 함께 처리하는 장비도 있습니다).

OSI 모델이 나온 배경

OSI 참조 모델은 서로 다른 제조사의 장비와 소프트웨어가 통신할 수 있도록 통신 기능을 7개 계층으로 나눈 모델입니다. ISO가 표준(ISO/IEC 7498-1)으로 정했고 ITU-T도 같은 내용을 X.200으로 권고합니다. 실제 인터넷은 이 모델이 아니라 TCP/IP 구조로 만들어졌지만, 문제를 계층별로 나눠 말하는 공통 언어로 널리 쓰입니다.

숫자로 확인하기

캡슐화로 늘어나는 헤더 — 이더넷 프레임의 데이터 필드는 최대 1,500바이트입니다(IP 입장에서는 MTU 1,500). IPv4 헤더는 옵션이 없으면 20바이트이고 TCP 헤더도 옵션이 없으면 20바이트라서, 옵션이 없을 때 TCP 한 세그먼트가 실을 수 있는 데이터는 1,500 − 20 − 20 = 1,460바이트입니다(IP·TCP 옵션이 붙으면 줄어듭니다).
이더넷 프레임 전체 크기 — 이더넷 헤더 14바이트와 끝의 FCS 4바이트가 더해져 데이터 1,500바이트일 때 프레임은 1,518바이트입니다(802.3 기본 프레임, VLAN 태그 등은 제외).
OSI와 TCP/IP — OSI는 7계층이고 TCP/IP는 4계층(RFC 1122 기준 링크, 인터넷, 전송, 응용)으로 설명됩니다. 교재에 따라 TCP/IP를 5계층으로 나눠 부르기도 합니다.

자주 하는 오해

인터넷은 OSI 7계층 위에서 돌아간다 — 실제 프로토콜은 TCP/IP 구조를 따릅니다. OSI는 참조 모델이어서 프로토콜을 설명하는 틀로 쓰입니다.
모든 프로토콜은 정확히 한 계층에 속한다 — 구분이 애매한 것이 많습니다. TLS는 표현 계층의 기능(암호화)으로 설명되지만 OSI의 어느 계층에 정확히 대응하는지는 자료마다 다르고, ARP도 2계층과 3계층 사이에 놓입니다.
스위치는 2계층 장비이므로 IP를 절대 보지 않는다 — 2계층 스위치는 MAC 주소로 전달하지만, 3계층 기능을 가진 스위치도 있습니다. 장비 이름보다 어떤 헤더까지 보고 처리하는지가 중요합니다.
계층을 나누면 항상 효율적이다 — 계층화는 이해와 교체를 쉽게 하지만 계층 사이에 불필요한 처리가 생길 수 있습니다. RFC 3439에는 계층화가 해로울 수 있다는 논의가 따로 있습니다.

면접에서 이렇게 물어요

면접 질문

OSI 7계층을 설명해 주세요.

물리, 데이터 링크, 네트워크, 전송, 세션, 표현, 응용 순서입니다. 아래 계층일수록 신호와 프레임에 가깝고 위 계층일수록 사용자와 가까운 데이터를 다룹니다. 계층마다 데이터 단위(비트, 프레임, 패킷, 세그먼트)와 대표 장비가 다릅니다.

면접 질문

TCP/IP 4계층과 OSI 7계층의 차이는 무엇인가요?

OSI는 이론적 참조 모델이고 TCP/IP는 실제로 쓰이는 구조입니다. OSI의 5·6·7계층 기능이 TCP/IP의 응용 계층에 합쳐지고 1·2계층이 링크 계층으로 묶입니다.

면접 질문

브라우저에서 주소를 입력하면 각 계층에서 무슨 일이 일어나나요?

응용 계층에서 HTTP 요청을 만들고, 전송 계층에서 TCP 헤더를 붙이고, 네트워크 계층에서 IP 헤더를, 데이터 링크 계층에서 이더넷 헤더와 트레일러를 붙인 뒤 물리 계층으로 비트를 내보냅니다. 수신 측은 반대 순서로 헤더를 벗깁니다.

면접 질문

L4 로드 밸런서와 L7 로드 밸런서의 차이는 무엇인가요?

L4는 IP와 포트 같은 전송 계층 정보로, L7은 HTTP 요청의 경로와 헤더 같은 응용 계층 내용으로 분산합니다. L7은 더 세밀하게 나눌 수 있지만 요청을 해석하는 비용이 듭니다.

실제 시스템에서는

AWS 로드 밸런서 — AWS 문서는 Application Load Balancer가 OSI 모델의 7번째 계층(응용 계층)에서, Network Load Balancer가 4번째 계층(전송 계층)에서 동작한다고 설명합니다. 로드 밸런서 토픽에서 이어서 봅니다.
패킷 분석 도구 — Wireshark의 패킷 상세 창은 프로토콜별로 접고 펼 수 있는 트리를 보여 줍니다. 맨 위 Frame은 캡처 정보를 담은 항목이고 그 아래에 이더넷, IP, TCP 같은 헤더가 쌓여 있어서 캡슐화를 눈으로 확인할 수 있습니다.
TCP/IP의 정의 — RFC 1122는 호스트가 구현해야 하는 링크, 인터넷, 전송, 응용 계층에 대한 요구 사항을 정의합니다. TCP/IP 토픽에서 이어서 봅니다.

함께 보면 좋은 토픽

TCP/IP — 실제로 쓰이는 4계층 구조와 핸드셰이크를 봅니다.
HTTP — 응용 계층 프로토콜의 대표를 봅니다.
HTTPS / TLS — 표현 계층 기능으로 설명되는 암호화를 봅니다.
라우팅 — 네트워크 계층의 경로 결정을 봅니다.
로드 밸런서 — L4와 L7 분산의 차이를 봅니다.

참고 자료

Python — 소켓 통신으로 보는 OSI 계층 흐름

import socket
import ssl

# ── 송신 측 (클라이언트) ──────────────────────
# Layer 7 — Application: HTTP 요청 메시지 생성
request = (
    "GET / HTTP/1.1\r\n"
    "Host: example.com\r\n"
    "Connection: close\r\n\r\n"
)

# Layer 4 — Transport: TCP 소켓 생성 (OS가 처리)
# socket.SOCK_STREAM = TCP, SOCK_DGRAM = UDP
raw_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Layer 6 — Presentation: TLS 래핑 (암호화)
context = ssl.create_default_context()
sock = context.wrap_socket(raw_sock, server_hostname="example.com")

# Layer 3 — Network: IP 주소로 목적지 지정
# OS가 DNS 조회 → IP 확보 → 라우팅 테이블 참조
sock.connect(("example.com", 443))
# ↑ connect() 시점에 TCP 3-way handshake 발생
#   Layer 2 — Data Link: Ethernet 프레임 생성 (NIC/OS)
#   Layer 1 — Physical:  전기 신호로 변환 (NIC 하드웨어)

# Layer 7: 데이터 전송 (하위 계층들이 캡슐화 처리)
sock.sendall(request.encode())

# ── 수신 측 (서버) — 역캡슐화 ──────────────────────
# Physical → Data Link → Network → Transport → Application
# 각 계층이 헤더를 벗겨내고 상위 계층에 전달
response = b""
while chunk := sock.recv(4096):
    response += chunk

sock.close()

# 애플리케이션 계층에 도착한 순수 HTTP 응답
print(response.decode()[:200])

Python socket API는 Transport 계층(L4) 위에서 동작합니다.
소켓을 생성하면 OS가 TCP 헤더를 붙이고(L4), IP 헤더를 붙이고(L3), Ethernet 프레임으로 감싸(L2), NIC가 전기 신호로 변환(L1)합니다.
개발자는 Application 계층의 데이터(HTTP 메시지)만 다루며, L1~L4의 캡슐화/역캡슐화는 OS와 하드웨어가 자동으로 처리합니다.
ssl.wrap_socket()은 L6(Presentation) 역할을 합니다. TLS 핸드셰이크로 암호화 키를 교환하고 이후 데이터를 암호화합니다.
connect()를 호출하는 순간 3-way handshake(SYN→SYN-ACK→ACK)가 발생하며 이는 L4 TCP의 연결 수립 과정입니다.

Java — Wireshark 없이 패킷 헤더 직접 파싱

import java.net.*;
import java.nio.*;

public class OsiLayerDemo {

    /**
     * 각 OSI 계층의 헤더 구조를 상수로 표현
     * 실제 패킷을 파싱할 때 이 오프셋으로 필드를 추출
     */

    // Layer 2 — Ethernet 프레임 헤더 (14바이트)
    static final int ETH_DST_MAC  = 0;  // 6바이트: 목적지 MAC
    static final int ETH_SRC_MAC  = 6;  // 6바이트: 출발지 MAC
    static final int ETH_TYPE     = 12; // 2바이트: 0x0800=IPv4

    // Layer 3 — IPv4 헤더 (최소 20바이트)
    static final int IP_VERSION   = 14; // 상위 4비트: 버전(4)
    static final int IP_TTL       = 22; // 1바이트: TTL
    static final int IP_PROTOCOL  = 23; // 1바이트: 6=TCP, 17=UDP
    static final int IP_SRC       = 26; // 4바이트: 출발지 IP
    static final int IP_DST       = 30; // 4바이트: 목적지 IP

    // Layer 4 — TCP 헤더 (최소 20바이트, IP 헤더 이후)
    static final int TCP_SRC_PORT = 34; // 2바이트: 출발지 포트
    static final int TCP_DST_PORT = 36; // 2바이트: 목적지 포트 (80/443)
    static final int TCP_SEQ      = 38; // 4바이트: 시퀀스 번호
    static final int TCP_FLAGS    = 47; // TCP 시작(34)+13: SYN=0x02, ACK=0x10, FIN=0x01 (오프셋 46은 Data Offset 바이트)

    // Layer 7 — HTTP 데이터 시작 위치 (TCP 옵션 없을 때)
    static final int HTTP_PAYLOAD = 54; // ETH(14)+IP(20)+TCP(20)

    static void parsePacket(byte[] raw) {
        ByteBuffer buf = ByteBuffer.wrap(raw);

        // L2 파싱
        short ethType = buf.getShort(ETH_TYPE);
        boolean isIPv4 = (ethType & 0xFFFF) == 0x0800;

        // L3 파싱
        byte protocol = buf.get(IP_PROTOCOL);
        boolean isTCP = protocol == 6;

        // L4 파싱
        int dstPort = buf.getShort(TCP_DST_PORT) & 0xFFFF;
        byte flags   = buf.get(TCP_FLAGS);
        boolean isSyn = (flags & 0x02) != 0;

        // L7: HTTP 페이로드 (54바이트 이후)
        if (raw.length > HTTP_PAYLOAD) {
            String payload = new String(raw, HTTP_PAYLOAD, raw.length - HTTP_PAYLOAD);
            // "GET / HTTP/1.1\r\nHost: ..."
        }
    }
}

실제 이더넷 프레임의 바이트 오프셋을 직접 정의했습니다. 패킷 캡처 도구(Wireshark, tcpdump)는 이 구조로 raw 바이트를 파싱해 계층별 필드를 표시합니다.
HTTP 페이로드는 Ethernet(14) + IP(20) + TCP(20) = 54바이트 이후에 위치합니다. TCP 옵션이 있으면 오프셋이 더 뒤로 밀립니다.
TCP flags 바이트에서 비트 마스킹으로 SYN·ACK·FIN을 구분합니다. 3-way handshake는 SYN → SYN+ACK → ACK 순서로 flags가 변합니다.
Java에서 실제 raw 소켓에 접근하려면 JNI 또는 pcap4j 같은 라이브러리가 필요합니다.
일반 socket API는 L4(TCP/UDP)부터만 접근 가능합니다.

Q1

OSI 7계층 모델에서 데이터가 송신 측에서 캡슐화될 때 헤더가 추가되는 방향은?

송신 측은 상위 계층부터 시작해 하위 계층으로 전달됩니다.
송신 측에서는 응용 계층 데이터가 아래로 내려가며 각 계층이 자신의 헤더를 씌우는 캡슐화가 일어나고, 수신 측에서는 반대로 아래에서 위로 헤더를 벗기는 역캡슐화가 일어납니다.

Q2

OSI 7계층 모델에서 데이터가 송신 측에서 캡슐화될 때 헤더가 추가되는 방향은?

송신 측은 상위 계층부터 시작해 하위 계층으로 전달됩니다.
송신 측에서는 응용 계층 데이터가 아래로 내려가며 각 계층이 자신의 헤더를 씌우는 캡슐화가 일어나고, 수신 측에서는 반대로 아래에서 위로 헤더를 벗기는 역캡슐화가 일어납니다.

Q3

전송 계층(Transport Layer)의 대표 프로토콜은?

신뢰성 있는 전송(TCP)과 빠른 전송(UDP)을 담당합니다.
전송 계층은 종단 간(end-to-end) 데이터 전달을 담당하며 대표적으로 TCP(신뢰성)와 UDP(속도)가 있습니다.

Q4

전송 계층(Transport Layer)의 대표 프로토콜은?

신뢰성 있는 전송(TCP)과 빠른 전송(UDP)을 담당합니다.
전송 계층은 종단 간(end-to-end) 데이터 전달을 담당하며 대표적으로 TCP(신뢰성)와 UDP(속도)가 있습니다.

Q5

네트워크 계층(Network Layer)의 주요 역할은?

IP 주소를 다루는 계층입니다.
네트워크 계층은 IP 주소를 이용해 패킷이 목적지까지 가는 경로를 결정하는 라우팅을 담당합니다.

Q6

네트워크 계층(Network Layer)의 주요 역할은?

IP 주소를 다루는 계층입니다.
네트워크 계층은 IP 주소를 이용해 패킷이 목적지까지 가는 경로를 결정하는 라우팅을 담당합니다.