안동민 개발노트

본문 시작

TCP/IP 4계층 모델

실제 인터넷의 TCP/IP 4계층을 OSI 모델과 대응시키고 웹 요청이 각 계층을 통과하는 흐름을 추적합니다.

OSI 7계층 모델은 네트워크를 이해하기 위한 참조 모델이지만, 실제 인터넷은 이 모델을 그대로 따르지 않습니다.

현실에서 인터넷의 동작을 설명하는 데 사용되는 것은 TCP/IP 4계층 모델입니다.

그렇다면 왜 OSI를 먼저 배웠을까요?

OSI 모델이 각 계층의 역할을 더 세밀하게 나누어 놓았기 때문에, 네트워크의 동작 원리를 이해하는 데는 OSI가 더 좋은 학습 도구입니다.

하지만 실제 프로토콜 스택을 설명할 때는 TCP/IP 모델이 현실에 훨씬 가깝습니다.

IETF의 인터넷 호스트 요구사항 문서에서도 인터넷 프로토콜 묶음은 응용, 전송, 인터넷, 링크 계층으로 설명됩니다.

즉 TCP/IP 모델은 시험용 분류표라기보다, 오늘날 장비와 운영체제가 실제로 프로토콜을 나누어 구현하는 기준에 가깝습니다.


OSI와 TCP/IP의 대응 관계

OSI 기능을 TCP/IP 네 계층에 대응하기

OSI 기능을 TCP/IP 네 계층에 대응하기

OSI와 TCP/IP 기능 대응OSI의 응용·표현·세션 기능은 TCP/IP 응용 계층으로, 전송은 전송으로, 네트워크는 인터넷으로, 데이터 링크·물리는 네트워크 액세스로 대응합니다. 구현이 이 경계대로 일곱 모듈로 나뉘는 것은 아닙니다.OSI 7계층TCP/IP 4계층7 · 응용6 · 표현5 · 세션4 · 전송3 · 네트워크2 · 데이터 링크1 · 물리응용전송인터넷네트워크액세스
OSI와 TCP/IP 기능 대응OSI의 응용·표현·세션 기능은 TCP/IP 응용 계층으로, 전송은 전송으로, 네트워크는 인터넷으로, 데이터 링크·물리는 네트워크 액세스로 대응합니다. 구현이 이 경계대로 일곱 모듈로 나뉘는 것은 아닙니다.OSI 7계층TCP/IP 4계층7 · 응용6 · 표현5 · 세션4 · 전송3 · 네트워크2 · 데이터 링크1 · 물리응용전송인터넷네트워크액세스

기능을 묶어 이해하는 대응 관계입니다. TLS·세션 관리 등의 구현 위치를 하나로 강제하지 않습니다.


각 계층 상세

응용 계층 (Application Layer)

사용자가 직접 상호작용하는 계층입니다.

HTTP, DNS, SMTP 등 모든 응용 프로토콜이 여기에 속합니다.

응용 프로토콜의 기본 포트와 전송

응용 프로토콜의 기본 포트와 전송

응용 프로토콜의 기본 포트와 전송
프로토콜기본 포트·전송용도·범위
HTTP80 · TCP암호화하지 않은 웹 통신
HTTPS443 · TCP 또는 QUIC/UDP암호화된 웹. HTTP/3는 QUIC/UDP를 사용합니다.
DNS53 · UDP/TCP전통적인 DNS 질의·응답. 도메인 → IP 조회 등이 포함됩니다.
SMTP25 · TCP메일 서버 간 전송
SSH22 · TCP암호화된 원격 접속
FTP21 · TCP파일 전송의 제어 연결. 데이터 연결은 별도입니다.
DHCP67/68 · UDPDHCPv4 서버/클라이언트의 주소 자동 할당
NTP123 · UDP시간 동기화
HTTP
기본 포트·전송: 80 · TCP
용도·범위: 암호화하지 않은 웹 통신
HTTPS
기본 포트·전송: 443 · TCP 또는 QUIC/UDP
용도·범위: 암호화된 웹. HTTP/3는 QUIC/UDP를 사용합니다.
DNS
기본 포트·전송: 53 · UDP/TCP
용도·범위: 전통적인 DNS 질의·응답. 도메인 → IP 조회 등이 포함됩니다.
SMTP
기본 포트·전송: 25 · TCP
용도·범위: 메일 서버 간 전송
SSH
기본 포트·전송: 22 · TCP
용도·범위: 암호화된 원격 접속
FTP
기본 포트·전송: 21 · TCP
용도·범위: 파일 전송의 제어 연결. 데이터 연결은 별도입니다.
DHCP
기본 포트·전송: 67/68 · UDP
용도·범위: DHCPv4 서버/클라이언트의 주소 자동 할당
NTP
기본 포트·전송: 123 · UDP
용도·범위: 시간 동기화

기본 포트 예시이며 설정·프로토콜 변형에 따라 달라질 수 있습니다. 포트 번호만으로 실제 응용 프로토콜을 확정하지 않습니다.

개발자가 가장 많이 다루는 계층입니다.

fetch(), axios, curl 등은 모두 이 계층에서 동작합니다.

전송 계층 (Transport Layer)

프로세스 간 데이터 전달을 담당합니다.

TCP와 UDP가 핵심입니다.

transport_layer_demo.py
import socket

# TCP 소켓 (연결형, 신뢰성)
tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# UDP 소켓 (비연결형, 빠름)
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 개발자는 소켓 API를 통해 전송 계층에 접근
# 소켓 = 응용 계층과 전송 계층 사이의 인터페이스

QUIC은 UDP 위에서 동작하는 전송 프로토콜로, HTTP/3의 기반입니다.

흐름 제어가 있는 스트림, 낮은 지연의 연결 설정, 연결 마이그레이션, TLS 기반 보안을 함께 제공합니다.

인터넷 계층 (Internet Layer)

IP 프로토콜이 핵심이며, 서로 다른 네트워크 간의 라우팅을 담당합니다.

프로토콜역할
IPv432비트 주소, 현재 가장 널리 사용
IPv6128비트 주소, IPv4 고갈 대응
ICMP오류 보고, 진단 (ping)
IGMPIPv4 멀티캐스트 그룹 관리

ARP는 같은 링크의 IPv4 주소에 대응하는 링크 주소를 찾도록 돕습니다. IPv6에서는 Neighbor Discovery가 이 역할 등을 담당합니다.

아래는 Linux에서 도구가 설치된 환경의 조회·진단 명령 예시이며 실행 관측을 제시하지 않습니다.

internet_layer_check.sh
# IP 주소 확인
ip addr show

# 라우팅 테이블 확인
ip route show

# ICMP로 연결 확인
ping -c 4 8.8.8.8

# 경로 추적
traceroute 8.8.8.8

# ARP 테이블 확인 (IP → MAC 매핑)
arp -n

네트워크 인터페이스 계층 (Network Interface Layer)

물리적 전송과 프레이밍을 담당합니다.

이더넷, Wi-Fi가 대표적입니다.

  • Ethernet: IEEE 802.3. UTP·광섬유 등의 매체와 1/10/25/100 Gbps 같은 규격을 사용합니다.
  • Wi-Fi 5: IEEE 802.11ac, 5 GHz. PHY 전송률은 채널 폭·공간 스트림·변조 등 설정에 따라 달라집니다.
  • Wi-Fi 6/6E: IEEE 802.11ax 계열. Wi-Fi 6는 주로 2.4/5 GHz, 6E는 6 GHz 확장을 가리킵니다. PHY 최고 전송률과 실제 응용 처리량은 다릅니다.
  • 5G NR: 3GPP 규격으로 FR1과 FR2를 포함하므로 밀리미터파만 사용하는 기술이 아닙니다. 사용 주파수·대역폭·기지국과 단말 조건을 함께 확인해야 합니다.

현실에서 TCP/IP를 더 많이 쓰는 이유

OSI는 장애 위치와 책임 경계를 세분해 말할 때 유용하고, TCP/IP는 실제 인터넷의 IP·포트·라우팅·소켓 상태를 설명할 때 직접적입니다.

모델 자체와 프로토콜 구현을 구분하면 어느 쪽이 우월한지를 고르기보다 목적에 맞게 함께 사용할 수 있습니다.


데이터 흐름 예시

웹 브라우저에서 https://example.com에 접속할 때 각 계층에서 어떤 일이 일어나는지 추적해 봅시다.

아래 흐름은 이해를 위해 HTTP over TCP/TLS 경로를 기준으로 단순화한 예시입니다.

HTTP/3에서는 QUIC이 UDP 위에서 TLS 보안과 전송 기능을 함께 제공합니다.

TCP/TLS 사례에서는 응용 데이터가 TLS 레코드와 TCP 스트림에 실리고, IP가 목적지와 경로를, Ethernet 같은 링크가 다음 홉 전달을 맡습니다. 다음 계산은 옵션·VLAN 태그가 없는 Ethernet/IPv4/TCP 프레임 기준이며 preamble·IFG·TLS·응용 헤더는 효율 계산에서 제외합니다.

packet_structure.py
"""Ethernet + IPv4 + TCP 기본 헤더 크기를 계산하여
   전체 프레임에서 최대 TCP payload 비율을 확인

   실제 HTTPS에서는 TCP payload 안에 TLS record가 들어간다.
"""

headers = {
    "이더넷 헤더": 14,
    "IP 헤더": 20,
    "TCP 헤더": 20,
    "FCS (트레일러)": 4,
}

total_overhead = sum(headers.values())
mtu = 1500  # 이더넷 MTU
max_payload = mtu - 20 - 20  # IP + TCP 헤더 제외
frame_total = mtu + 14 + 4   # 이더넷 헤더 + FCS 포함

print("=== 헤더 크기 ===")
for name, size in headers.items():
    print(f"  {name}: {size} bytes")

print(f"\n전체 프레임: {frame_total} bytes")
print(f"프로토콜 오버헤드: {total_overhead} bytes")
print(f"최대 페이로드: {max_payload} bytes")
print(f"데이터 효율: {max_payload/frame_total*100:.1f}%")

실무에서의 계층 참조

실무에서는 OSI와 TCP/IP를 혼용합니다.

대화할 때는 OSI 번호를 쓰면서, 실제 프로토콜은 TCP/IP 기준입니다.

실무 표현의미
L7 로드 밸런서HTTP 헤더/URL 기반 트래픽 분배 (ALB)
L4 로드 밸런서IP/포트 기반 트래픽 분배 (NLB)
L3 스위치라우팅 기능이 있는 스위치
L2 VLANMAC 기반 가상 네트워크 분리

다음 절에서는 이 계층들 사이에서 데이터가 실제로 어떻게 포장되고 전달되는지, 캡슐화와 역캡슐화를 살펴보겠습니다.

송신 측에서는 데이터가 전송 세그먼트, IP 패킷 또는 데이터그램, 링크 프레임으로 감싸지고, 수신 측에서는 역순으로 헤더를 확인하며 원래 데이터에 접근합니다.

TCP/IP 기준으로 진단할 때는 응용의 이름·메시지, 전송의 포트·연결 상태, 인터넷의 IP·라우팅, 링크의 MAC·프레임 정보를 구분합니다. 암호화·캡처 위치에 따라 직접 보이는 정보는 달라집니다.