hhkb.dev

BLOG

2025-10-31 / 네트워크이론 · 01

네트워크 기초 이론

1. 네트워크를 구성하는 질서: 계층, 캡슐화, 모드

네트워크 통신은 보통 계층 구조로 이해하는 편이 가장 쉽다. 대표적인 기준이 OSI 7계층 모델이다. 통신 과정을 7단계로 나눠서, 각 계층이 어떤 역할을 맡는지 구분해 보는 방식이다.
프로토콜 예시

  • L7 (Application): HTTP, DNS 및 웹 프록시 등 사용자와 직접 상호작용
  • L6 (Presentation): 데이터 형식화, 암호화
  • L5 (Session): 애플리케이션 간의 세션 관리
  • L4 (Transport): TCP/UDP를 통한 종단 간 데이터 전송 (Port 식별자 사용, L4 부하분산 등)
  • L3 (Network): IP를 통한 네트워크 간 경로 설정 (Router, IP 식별자 사용)
  • L2 (Data Link): MAC 주소를 통한 로컬 네트워크 내 전송 (Switch, MAC 식별자 사용)
  • L1 (Physical): 케이블, 전기 신호를 통한 물리적 전송

이 계층 구조는 운영체제의 유저 모드와 커널 모드 개념과도 맞물린다. 예를 들어 브라우저 같은 L7 애플리케이션은 유저 모드에서 돌고, TCP/IP 스택이나 NIC 드라이버는 커널 모드에서 자원을 직접 다룬다.

데이터가 L7에서 L1로 내려가며 헤더를 덧붙이는 과정을 인캡슐레이션이라고 한다. 반대로 수신 측에서 헤더를 벗겨내며 올라가는 과정은 디캡슐레이션이다.

image
캡슐화&역캡슐화

  • 스트림(Stream)은 연속적인 데이터 자체를 의미하며, TCP는 이 스트림을 L4에서 '세그먼트(Segment)' 단위로 나눈다. 이 때 최대 크기는 MSS(Maximum Segment Size, 보통 1460바이트)이다.
  • '패킷(Packet)'은 L3에서 IP 헤더가 붙은 단위이며, 네트워크 전송의 최대 단위인 MTU(Maximum Transfer Unit, 보통 1500바이트)의 제한을 받는다.
  • '프레임(Frame)'은 L2에서 MAC 헤더가 붙은 단위이다.

목적지에서는 L1부터 L7까지 올라가며 헤더를 제거하고 원래 데이터를 복원한다.

2. 네트워크 구성 요소 및 작동 최소 조건 (DHCP)

네트워크는 호스트와 이를 연결하는 장비로 이뤄진다. 대표적인 장비는 MAC 기반으로 전달하는 스위치와, IP 기반으로 경로를 정하는 라우터다. 범위로는 LAN과 WAN으로 나눠서 보는 경우가 많다.

장치가 네트워크에 붙어서 제대로 통신하려면 최소한 아래 네 가지 정보가 필요하다.

  1. IP 주소: 네트워크상의 고유한 논리적 식별자.
  2. 서브넷 마스크: 네트워크와 호스트를 구분하여 네트워크 범위를 정의.
  3. 게이트웨이 IP: 외부 네트워크로 나가기 위한 라우터의 주소.
  4. DNS 서버: 도메인 이름을 IP 주소로 변환해주는 서버.

이 네 가지가 없으면 인터넷 연결이 거의 성립하지 않는다. 보통은 DHCP가 이 과정을 자동으로 처리해서, 장치가 접속하면 IP, 마스크, 게이트웨이, DNS를 한 번에 내려준다.

3. 목적지를 찾는 과정: ARP의 역할

IP 주소가 논리 주소라면, 로컬 네트워크에서 실제로 패킷을 주고받을 때는 MAC 주소가 필요하다. ARP는 이 IP와 MAC을 연결해 주는 프로토콜이다.

예를 들어 게이트웨이 IP는 알지만 MAC 주소를 모를 때, 장치는 ARP Request를 브로드캐스트해서 "이 IP를 가진 장비가 누구냐"고 묻는다.

응답을 받으면 그 값을 ARP 테이블에 저장해두고, 다음부터는 같은 요청을 반복하지 않고 바로 통신한다.

4. 연결성 확인: Ping과 ICMP

네트워크 진단에서 가장 기본적인 도구가 ping이다. 연결 여부와 RTT를 확인할 때 가장 먼저 써본다.

ping은 ICMP를 기반으로 동작한다. ICMP는 진단과 오류 알림에 쓰이지만, DoS에 악용될 수 있어서 방화벽에서 막아두는 환경도 많다.

5. 데이터가 흐르는 두 가지 방식: L4 (Transport)

전송 계층에서는 주로 TCP와 UDP 두 가지 방식으로 나눠서 본다.

  • TCP (Transmission Control Protocol): 연결 지향형 프로토콜이다. 데이터를 전송하기 전에 상대방과 가상 연결을 수립한다. 데이터가 순서대로, 유실 없이 전달되는 것을 보장(신뢰성)하며, 수신 측의 수용 버퍼 상태에 따라 전송을 조절한다. 웹 브라우징(HTTP), 파일 전송(FTP), 이메일(SMTP) 등 신뢰성이 중요한 통신에 사용된다.
  • UDP (User Datagram Protocol): 비연결형 프로토콜이다. 연결 설정 없이 수신 측 상태와 관계없이 데이터를 빠르게 전송한다. 순서를 보장하지 않고 재전송 기능이 없어 신뢰성은 낮지만, 실시간 영상 스트리밍이나 온라인 게임 등 속도가 더 중요한 통신에 적합하다.

둘 다 출발지와 목적지 포트를 포함한다. TCP는 신뢰성을 위한 제어 정보가 더 많고, UDP는 구조가 단순하다.

6. TCP의 신뢰성과 장애 대응

TCP는 여러 제어 로직 덕분에 신뢰성을 확보한다. 그래서 네트워크 장애 상황에도 어느 정도 대응할 수 있다.

  • 3-Way & 4-Way Handshake: TCP는 3-Way Handshake (SYN → SYN+ACK → ACK) 과정을 통해 신뢰할 수 있는 양방향 연결을 설정한다. 클라이언트가 Seq 1000을 담아 SYN을 보내면, 서버는 자신의 Seq 4000과 상대방의 Ack 1001을 담아 SYN+ACK로 응답하고, 클라이언트는 서버의 Ack 4001을 담아 ACK를 보내 연결을 확립한다. 연결을 끊을 때는 4-Way Handshake (FIN+ACK → ACK → FIN+ACK → ACK)를 통해 양측이 모든 데이터를 수신했음을 확인하고 안전하게 종료하며, 마지막 ACK를 보낸 클라이언트는 TIME_WAIT 상태를 유지한다.
  • 재전송 및 타이머 (RTO): 패킷이 손실(Packet Loss)되면 ACK가 오지 않고, TCP는 재전송 타이머(RTO)에 따라 재전송(Re-transmission)을 시도한다. 이 타이머는 기본 1초에서 2초, 4초, 8초, 16초 등으로 지연 시간이 증가하며, 보통 5회까지 시도한다. 이 때문에 잠시 LAN 케이블이 분리되어도 연결이 복구될 수 있다.
  • 기타 장애 상황: 패킷이 서로 다른 경로로 전송되어 순서가 뒤바뀌어 도착(Out-of-Order), 또는 수신 측 애플리케이션 지연 등으로 수신 버퍼가 가득 차 전송을 일시 중지하는(Zero Window) 상황 등이 있으며 TCP는 이에 대응한다.

7. IP 주소 체계와 이름 해석 (DNS)

IP 주소는 기계가 쓰기 좋고, DNS는 사람이 쓰기 좋게 바꿔주는 체계라고 보면 된다.

  • IP 주소 구조: IPv4는 32비트 주소 체계로, 8비트씩 4덩어리로 표현된다. (예: 192.168.0.1)
  • 서브넷과 CIDR: IP 주소는 서브넷 마스크와의 AND 연산을 통해 네트워크 ID와 호스트 ID로 구분된다. 예를 들어, '192.168.0.0/24' 같은 CIDR 표기법은 상위 24비트가 네트워크 ID임을 의미한다.
  • 예약 주소: 네트워크 주소(.0)와 브로드캐스트 주소(.255)는 일반적으로 호스트에 할당하지 않으며, .1은 게이트웨이 주소로 자주 사용된다.
  • DNS (Domain Name System): IP 주소는 기계가 기억하기는 좋지만 사람이 사용하기는 어렵다. DNS는 'google.com' 같은 도메인 이름을 IP 주소로 변환해주는 거대한 '분산형 데이터베이스'이자 네임 시스템이다. 도메인 영역(Zone)별로 관리 주체가 다르며, 트리 구조로 구성되어 유일성(Unique)이 보장된다.
  • URL vs URI: 웹 주소를 표현할 때는 URI(Uniform Resource Identifier, 리소스를 식별하는 모든 형식)라는 통합 식별자를 사용한다. 우리가 흔히 쓰는 'https://google.com' 형식은 리소스의 위치를 나타내는 URL(Uniform Resource Locator)로, 이는 URI의 하위 개념이다.

8. HTTP와 웹 시스템 아키텍처

HTTP는 L7 응용 계층에서 동작하는 웹 통신 규약이다. 기본 구조는 클라이언트 요청과 서버 응답이다.

웹사이트에 접속할 때는 아래 요소가 같이 움직인다.

  1. 클라이언트: 브라우저가 입력을 받고, JS가 요청을 만든다.
  2. HTTP/HTTPS: 요청과 응답이 오가는 통신 경로다.
  3. 웹 서버와 WAS:
    • 웹 서버는 정적 자원을 처리한다.
    • WAS는 동적 로직을 처리한다.
  4. 프레임워크: Spring 같은 계층이 비즈니스 로직 구현을 돕는다.
  5. DB: 사용자 데이터와 애플리케이션 데이터를 저장하고, 서버가 이를 조회해 응답을 만든다.