우리가 인터넷에서 고화질 영상을 보거나 대용량 파일을 다운로드할 때, 데이터는 하나의 거대한 덩어리로 이동하지 않습니다. 현대 네트워크 시스템의 근간은 ‘패킷 교환 방식(Packet Switching)’에 있으며, 모든 정보는 아주 작은 단위인 ‘패킷’으로 잘게 쪼개져 전송됩니다. 이 포스팅에서는 데이터가 어떤 논리에 의해 나뉘고, 복잡한 인터넷 망을 통과해 어떻게 다시 하나로 합쳐지는지 그 기술적 과정을 분석합니다.
1. 데이터 전송의 최소 단위, 패킷(Packet)의 정의와 필요성
네트워크 통신에서 패킷(Packet)은 데이터를 전송하는 기본 규격입니다. 데이터를 작은 단위로 분할하여 전송하는 이유는 네트워크 자원의 점유를 방지하고 전송 효율을 극대화하기 위함입니다.
왜 데이터를 쪼개서 보내야 하는가?
만약 1GB 크기의 파일을 분할하지 않고 한 번에 전송한다고 가정해 봅시다. 전송 도중 단 1비트의 오류만 발생해도 전체 데이터를 처음부터 다시 보내야 합니다. 또한, 특정 사용자가 회선을 독점하게 되어 다른 사용자의 통신이 차단되는 현상이 발생합니다. 패킷 단위 전송은 다음과 같은 이점을 제공합니다.
- 대역폭 효율성: 여러 사용자가 동일한 통신 회선을 공유하며 동시에 데이터를 주고받을 수 있습니다.
- 오류 복구 용이성: 특정 패킷에 오류가 발생할 경우 해당 패킷만 재전송(Retransmission)하면 되므로 자원 낭비가 적습니다.
- 유연한 경로 선택: 각 패킷은 네트워크 상황에 따라 서로 다른 경로를 통해 목적지에 도착할 수 있어 장애 대응 능력이 뛰어납니다.
패킷의 기본 구조
하나의 패킷은 크게 세 부분으로 구성됩니다. 데이터를 실어 나르는 본체인 페이로드(Payload), 수신처와 송신처 정보 및 제어 데이터를 담은 헤더(Header), 그리고 데이터의 끝을 알리고 오류 검출 정보를 담은 트레일러(Trailer)입니다. 이 구조는 마치 택배 박스에 송장을 붙여 보내는 것과 흡사합니다.
2. OSI 7계층과 캡슐화(Encapsulation) 과정
사용자가 생성한 데이터는 실제 물리적 회선을 타기 전까지 여러 계층을 거치며 각 계층에 필요한 정보가 덧붙여집니다. 이를 캡슐화(Encapsulation)라고 합니다.
[Image of OSI 7 layer encapsulation process]
| 계층 (Layer) | 데이터 단위 (PDU) | 주요 추가 정보 | 주요 역할 |
|---|---|---|---|
| 전송 계층 (L4) | Segment | Port 번호, 순서 번호 | 프로세스 간 신뢰성 있는 통신 보장 |
| 네트워크 계층 (L3) | Packet (Datagram) | 출발지/목적지 IP 주소 | 최적 경로 결정 (Routing) |
| 데이터 링크 계층 (L2) | Frame | MAC 주소, 오류 검출 코드 | 물리적 인접 노드 간 데이터 전달 |
전송 계층(Transport Layer)에서는 데이터를 세그먼트(Segment) 단위로 나눕니다. 여기에 TCP 헤더가 붙어 포트 번호와 시퀀스 번호가 부여됩니다. 이후 네트워크 계층(Network Layer)으로 내려오면 IP 헤더가 추가되어 패킷(Packet)이 됩니다. 마지막으로 데이터 링크 계층에서 MAC 주소가 포함된 프레임(Frame)으로 감싸져 물리적 신호로 변환됩니다.
3. 패킷 분할의 기술적 제약: MTU와 MSS
데이터를 무한정 크게 쪼갤 수는 없습니다. 네트워크 장비가 한 번에 처리할 수 있는 최대 데이터 크기가 정해져 있기 때문입니다. 이를 이해하기 위해서는 MTU(Maximum Transmission Unit)의 개념을 반드시 알아야 합니다.
MTU와 데이터 단편화(Fragmentation)
일반적인 이더넷 환경에서 MTU는 1,500바이트입니다. 만약 상위 계층에서 내려온 데이터가 이 크기보다 크다면, 네트워크 계층의 라우터는 이를 더 작은 조각으로 나눕니다. 이를 단편화(Fragmentation)라고 합니다. 단편화된 패킷들은 각각의 IP 헤더에 ‘오프셋(Offset)’ 값을 가져 나중에 재조립될 수 있도록 합니다.
MSS: 전송 계층에서의 최적화
단편화는 라우터에 부하를 주고 전송 지연을 초래합니다. 이를 방지하기 위해 TCP 프로토콜은 MSS(Maximum Segment Size)를 설정합니다. MSS는 MTU에서 IP 헤더와 TCP 헤더 크기(각 최소 20바이트)를 뺀 값으로, 보통 1,460바이트로 설정되어 원천적으로 단편화가 발생하지 않도록 조절합니다.
4. 패킷의 이동 경로와 라우팅 메커니즘
준비된 패킷은 이제 인터넷이라는 거대한 미로를 통과합니다. 각 패킷은 독립적으로 처리되며, 라우터는 라우팅 테이블(Routing Table)을 참조하여 목적지까지의 최적 경로(Next Hop)를 결정합니다.
이 과정에서 흥미로운 점은 IP 주소만으로는 다음 장비에 전달할 수 없다는 것입니다. 라우터는 목적지 IP를 가진 장비의 물리적 주소를 알아내기 위해 ARP(Address Resolution Protocol)를 사용합니다. 패킷은 매 홉(Hop)을 지날 때마다 데이터 링크 계층의 헤더(MAC 주소)가 계속해서 교체되며 전달됩니다. IP 헤더는 유지되지만, 물리적 껍데기(프레임)는 계속 바뀌는 셈입니다.
5. 목적지에서의 재조립과 오류 제어
목적지 호스트에 도착한 패킷들은 역캡슐화(Decapsulation) 과정을 거칩니다. 하지만 인터넷의 복잡성 때문에 패킷들은 송신 순서와 다르게 도착하거나, 일부가 유실될 수 있습니다.
- 순서 번호(Sequence Number) 기반 재조립: 수신 측 TCP 계층은 헤더에 기록된 시퀀스 번호를 확인하여 뒤섞인 패킷을 원래 순서대로 정렬합니다.
- 흐름 제어(Flow Control): 수신 측의 처리 속도보다 데이터가 빨리 들어오면 ‘윈도우 크기(Window Size)’를 조절하여 송신 속도를 늦추도록 요청합니다.
- 체크섬(Checksum) 검증: 헤더와 페이로드의 값이 전송 중 변조되지 않았는지 수학적으로 검증합니다. 만약 값이 맞지 않으면 해당 패킷은 즉시 폐기하고 재전송을 요청(ACK 응답 보류)합니다.
6. 전문가적 통찰: 네트워크 최적화를 위한 의견
효율적인 패킷 전송을 위해서는 경로 MTU 탐색(PMTUD) 기능을 활성화하는 것이 중요합니다. 이는 전송 경로 상의 가장 작은 MTU 값을 미리 파악하여 애초에 그 크기에 맞춰 데이터를 보내는 기술입니다. 이를 통해 불필요한 단편화를 막고 CPU 자원을 절약할 수 있습니다. 또한, 최근 HTTP/3(QUIC) 프로토콜의 도입은 이러한 패킷 기반 통신의 고질적인 문제인 ‘Head-of-Line Blocking(앞선 패킷 유실 시 뒤 패킷들이 대기하는 현상)’을 해결하여 더욱 혁신적인 전송 속도를 제공하고 있습니다.
결론적으로, 패킷은 단순한 데이터 조각이 아니라 네트워크의 안정성과 확장성을 담보하기 위한 정교한 설계의 산물입니다. 캡슐화와 라우팅, 그리고 재조립으로 이어지는 이 메커니즘을 깊이 이해하는 것은 고성능 네트워크 애플리케이션을 설계하고 운영하는 모든 엔지니어에게 필수적인 능력입니다.