네트워크를 통해 전달되는 데이터와 패킷

네트워크를 통해 전달되는 데이터와 패킷입니다. header, payload, trailer, PDU, encapsulation, decapsulation, MAC/IP/port 차이를 정리했습니다.

네트워크를 통해 전달되는 데이터와 패킷

패킷은 네트워크를 통해 전달되는 데이터 단위를 넓게 부르는 말이다. 정확히는 계층마다 부르는 이름이 다르며, 각 계층은 자기 역할에 필요한 header를 붙여 아래 계층으로 넘긴다. 이 과정을 encapsulation이라고 하고, 수신 측에서 반대로 벗겨내는 과정을 decapsulation이라고 한다.

Header, Payload, Trailer

대부분의 네트워크 데이터는 제어 정보와 실제 데이터로 나뉜다. header에는 출발지/목적지 주소, 포트, 순서, 오류 검출에 필요한 정보가 들어가고, payload에는 상위 계층에서 내려온 데이터가 들어간다. 일부 계층은 trailer를 사용한다.

[ header ][ payload ][ trailer ]

header  : 전달과 제어에 필요한 정보
payload : 실제로 운반하는 상위 계층 데이터
trailer : 오류 검출 등 뒤쪽에 붙는 정보

계층별 PDU 이름

PDU는 Protocol Data Unit의 약자다. 같은 데이터를 보더라도 계층에 따라 이름이 달라진다.

Application layer : data 또는 message
Transport layer   : TCP segment / UDP datagram
Network layer     : packet
Data link layer   : frame
Physical layer    : bits

캡슐화 흐름

웹 요청을 보낸다고 가정하면 애플리케이션 데이터가 TCP header, IP header, Ethernet header를 차례로 얻어 아래 계층으로 내려간다.

HTTP data
TCP header + HTTP data
IP header + TCP segment
Ethernet header + IP packet + Ethernet trailer
bits on wire

역캡슐화 흐름

수신 측은 반대로 Ethernet frame을 받고, 목적지 MAC 주소와 오류 검사를 확인한 뒤 IP packet을 꺼낸다. IP 계층은 목적지 IP를 확인하고 TCP segment를 올린다. TCP는 port와 sequence 정보를 처리한 뒤 애플리케이션에 데이터를 넘긴다.

bits on wire
Ethernet frame
IP packet
TCP segment
HTTP data

주소가 계층마다 다른 이유

  • MAC address: 같은 링크 또는 같은 VLAN 안에서 frame을 전달할 때 사용한다.
  • IP address: 네트워크 사이에서 packet을 라우팅할 때 사용한다.
  • Port number: 한 호스트 안에서 어떤 프로세스와 통신할지 구분한다.

간단한 확인 명령

Linux에서 직접 확인할 수 있는 기본 명령이다. 캡처는 본인이 관리하는 장비와 네트워크에서만 수행한다.

ip addr show
ip route show
ss -tn
sudo tcpdump -ni any 'tcp port 80 or tcp port 443'

정리

패킷이라는 말은 넓게는 네트워크 데이터 전체를 가리키지만, 계층을 엄밀히 구분할 때는 L3의 PDU를 packet이라고 부른다. 장애 분석에서는 frame, packet, segment 중 어느 계층에서 문제가 나는지 구분해야 원인을 좁힐 수 있다.

BGM EVER