본문 바로가기
TYLER SONGBlog
← Blog index
CS8 min read

Frame: 링크 계층에서 한 홉을 전달하는 데이터 단위

프레임(Frame)은 링크 계층(Data Link Layer)이 같은 링크 안에서 데이터를 전달할 때 사용하는 단위다. 이더넷 프레임(Ethernet Frame)은 출발지·목적지 MAC 주소, 상위 프로토콜 식별자, 페이로드, 오류 검출 정보를 포함한다. 스위치는 MAC 주소 테이블을 이용해 프레임을 전달하며, 라우터를 통과하면 기존 프레임은 제거되고 다음

By 송민성

1. 개념

프레임(Frame)은 링크 계층(Data Link Layer)의 프로토콜 데이터 단위(PDU, Protocol Data Unit)다. 같은 물리 또는 논리 링크에 연결된 장치 사이에서 네트워크 계층 패킷(Packet)을 운반한다.

이더넷 프레임(Ethernet Frame)의 기본 구조는 다음과 같다.

text
[목적지 MAC][출발지 MAC][EtherType][페이로드][FCS]

각 필드의 크기는 다음과 같다.

필드크기역할
목적지 MAC 주소6바이트프레임을 받을 인터페이스 식별
출발지 MAC 주소6바이트프레임을 보낸 인터페이스 식별
EtherType2바이트페이로드에 담긴 상위 프로토콜 식별
페이로드46~1,500바이트IP 패킷 등의 상위 계층 데이터
프레임 검사 시퀀스(FCS)4바이트전송 중 비트 오류 검출

가상 근거리 통신망(VLAN, Virtual LAN)을 위한 IEEE 802.1Q 태그가 있으면 MAC 주소와 EtherType 사이에 4바이트 필드가 추가된다.

계층별 데이터 단위는 다음처럼 구분한다.

계층데이터 단위주요 식별 정보
전송 계층(Transport Layer)TCP 세그먼트, UDP 데이터그램포트 번호
네트워크 계층(Network Layer)IP 패킷IP 주소
링크 계층(Data Link Layer)프레임MAC 주소
물리 계층(Physical Layer)비트전기·광학·무선 신호

2. 왜 사용하는가

IP 패킷만으로는 실제 링크에서 어느 네트워크 인터페이스에 데이터를 전달할지 결정할 수 없다. 프레임은 현재 링크에서 필요한 주소와 오류 검출 정보를 IP 패킷에 추가한다.

프레임은 다음 기능을 제공한다.

  • 같은 근거리 통신망(LAN) 안에서 MAC 주소를 기준으로 데이터 전달
  • 하나의 링크에서 여러 상위 프로토콜 구분
  • 프레임 검사 시퀀스(FCS)를 통한 비트 오류 검출
  • 가상 근거리 통신망(VLAN)을 이용한 논리적 네트워크 분리
  • 스위치의 선택적 포트 전달을 통한 불필요한 트래픽 감소

IP 주소는 종단 간 경로를 결정하는 데 사용된다. MAC 주소는 현재 링크의 다음 장치로 프레임을 전달하는 데 사용된다.

3. 동작 원리

캡슐화

송신 장치는 IP 패킷을 이더넷 프레임의 페이로드에 넣는다.

text
[IP 헤더][TCP 헤더][응용 데이터]
                ↓
[이더넷 헤더][IP 헤더][TCP 헤더][응용 데이터][FCS]

목적지가 같은 네트워크에 있으면 목적지 호스트의 MAC 주소를 사용한다. 다른 네트워크에 있으면 기본 게이트웨이(Default Gateway)의 MAC 주소를 사용한다.

IPv4에서는 주소 결정 프로토콜(ARP, Address Resolution Protocol)을 이용해 다음 홉의 IPv4 주소에 대응하는 MAC 주소를 찾는다. IPv6에서는 이웃 탐색 프로토콜(NDP, Neighbor Discovery Protocol)을 사용한다.

스위치 전달

스위치(Switch)는 수신한 프레임의 출발지 MAC 주소를 확인해 MAC 주소 테이블(MAC Address Table)을 학습한다.

text
포트 1에서 출발지 AA:AA:AA:AA:AA:AA 수신
→ AA:AA:AA:AA:AA:AA은 포트 1에 있다고 기록

목적지 MAC 주소가 테이블에 있으면 해당 포트로만 전달한다. 목적지 주소를 모르면 수신 포트를 제외한 같은 VLAN의 모든 포트로 플러딩(Flooding)한다.

브로드캐스트(Broadcast) 주소 ff:ff:ff:ff:ff:ff인 프레임도 같은 VLAN의 모든 포트로 전달한다.

라우터 통과

라우터는 수신 프레임에서 이더넷 헤더와 FCS를 제거한 뒤 IP 패킷을 처리한다. 다음 홉을 결정하면 해당 출력 링크에 맞는 새 프레임을 만든다.

text
호스트 A → 라우터
[라우터 MAC][호스트 A MAC][IP 패킷][FCS]

라우터 → 호스트 B
[호스트 B MAC][라우터 MAC][IP 패킷][FCS]

일반적인 라우팅에서는 IP 패킷의 출발지와 목적지 IP 주소가 유지된다. 프레임의 MAC 주소와 FCS는 홉마다 새로 만들어진다.

오류 검출

송신 장치는 프레임 내용을 바탕으로 순환 중복 검사(CRC, Cyclic Redundancy Check) 값을 계산해 FCS에 기록한다. 수신 장치는 같은 계산을 수행하고 값이 일치하지 않으면 프레임을 폐기한다.

FCS는 오류를 검출하지만 손상된 프레임을 복구하거나 재전송하지 않는다. 필요한 재전송은 TCP 같은 상위 프로토콜이나 무선 링크 계층의 별도 기능이 담당한다.

4. 코드 예제

다음 TypeScript 코드는 이더넷 프레임에서 MAC 주소, EtherType, 페이로드를 추출한다. 입력에는 네트워크 인터페이스가 보통 제거하는 FCS를 포함하지 않는다.

typescript
function hexToBytes(hex: string): Uint8Array { const normalized = hex.replace(/\s+/g, ""); if (!/^[0-9a-fA-F]*$/.test(normalized) || normalized.length % 2 !== 0) { throw new Error("16진수 문자열 형식이 올바르지 않습니다."); } return Uint8Array.from( normalized.match(/.{2}/g)?.map((value) => Number.parseInt(value, 16)) ?? [], ); } function formatMac(bytes: Uint8Array): string { return Array.from(bytes, (value) => value.toString(16).padStart(2, "0") ).join(":"); } function parseEthernetFrame(frame: Uint8Array) { const ETHERNET_HEADER_SIZE = 14; if (frame.length < ETHERNET_HEADER_SIZE) { throw new Error("이더넷 헤더보다 짧은 데이터입니다."); } const destinationMac = formatMac(frame.slice(0, 6)); const sourceMac = formatMac(frame.slice(6, 12)); const etherType = (frame[12] << 8) | frame[13]; const payload = frame.slice(ETHERNET_HEADER_SIZE); return { destinationMac, sourceMac, etherType: `0x${etherType.toString(16).padStart(4, "0")}`, payloadLength: payload.length, }; } const frame = hexToBytes(` 001122334455 aabbccddeeff 0800 450000140000000040060000c0a8010ac0a80114 `); const parsed = parseEthernetFrame(frame); console.log(parsed); if ( parsed.destinationMac !== "00:11:22:33:44:55" || parsed.sourceMac !== "aa:bb:cc:dd:ee:ff" || parsed.etherType !== "0x0800" ) { throw new Error("프레임 분석 결과가 예상값과 다릅니다."); }

실행 방법:

shell
bun run frame.ts

출력:

text
{
  destinationMac: "00:11:22:33:44:55",
  sourceMac: "aa:bb:cc:dd:ee:ff",
  etherType: "0x0800",
  payloadLength: 20
}

0x0800은 IPv4, 0x0806은 ARP, 0x86DD는 IPv6를 나타낸다.

5. 시간 복잡도 또는 성능 특성

프레임 전달 성능은 프레임 크기, 링크 속도, 스위치 처리 방식에 영향을 받는다.

일반적인 태그 없는 이더넷 프레임의 크기는 목적지 MAC 주소부터 FCS까지 최소 64바이트, 최대 1,518바이트다. IEEE 802.1Q VLAN 태그가 있으면 최대 1,522바이트가 된다.

최소 프레임의 페이로드가 46바이트보다 작으면 패딩(Padding)을 추가한다. 최소 크기 제한은 초기 공유 이더넷의 충돌 감지(CSMA/CD) 동작과 관련이 있다.

1기가비트 이더넷에서 1,500바이트를 전송하는 데 필요한 순수 직렬화 시간은 다음과 같다.

text
1,500바이트 × 8비트 ÷ 1,000,000,000비트/초
= 12마이크로초

실제 링크 점유 시간에는 이더넷 헤더, FCS, 프리앰블(Preamble), 프레임 시작 구분자(SFD), 프레임 간 간격(Interpacket Gap)이 추가된다.

스위치의 MAC 주소 조회는 구현에 따라 다르므로 일반적인 자료구조의 시간복잡도로 단정할 수 없다. 하드웨어 스위치는 보통 전용 메모리와 회로를 사용해 선속도(Line Rate) 전달을 목표로 한다.

작은 프레임이 많으면 같은 데이터 양을 전송하더라도 헤더 비율과 초당 처리해야 할 프레임 수가 증가한다. 큰 프레임은 헤더 오버헤드를 줄이지만 손실 시 다시 보내야 할 데이터 크기와 직렬화 지연이 커진다.

6. 실무 사용 사례

패킷 캡처 분석

와이어샤크(Wireshark)나 tcpdump로 트래픽을 확인하면 이더넷 헤더에서 출발지·목적지 MAC 주소와 EtherType을 볼 수 있다.

shell
sudo tcpdump -e -nn -i eth0

-e는 링크 계층 헤더를 출력하고, -nn은 주소와 포트를 이름으로 변환하지 않는다.

가상 근거리 통신망 분리

스위치는 IEEE 802.1Q 태그의 VLAN 식별자(VLAN ID)를 이용해 하나의 물리 네트워크를 여러 브로드캐스트 도메인(Broadcast Domain)으로 분리한다. 사내망, 서버망, 게스트망을 논리적으로 분리할 때 사용한다.

컨테이너와 가상 머신 네트워크

컨테이너 브리지(Bridge)와 가상 스위치(Virtual Switch)는 가상 네트워크 인터페이스 사이에서 이더넷 프레임을 전달한다. 컨테이너마다 별도의 MAC 주소가 할당될 수 있다.

최대 전송 단위 문제 진단

이더넷의 일반적인 최대 전송 단위(MTU, Maximum Transmission Unit)는 1,500바이트다. VPN이나 터널링이 추가되면 내부 헤더만큼 사용할 수 있는 페이로드가 줄어든다. 경로 MTU가 맞지 않으면 특정 크기 이상의 요청만 실패하는 현상이 발생할 수 있다.

7. 주의할 점

프레임과 패킷을 혼동하지 않는다

프레임은 링크 계층 단위이고 패킷은 네트워크 계층 단위다. 하나의 IP 패킷은 링크를 이동할 때마다 서로 다른 프레임에 담긴다.

MAC 주소는 종단 간 주소가 아니다

라우터를 통과할 때 프레임이 교체되므로 MAC 주소도 바뀐다. 인터넷의 원격 서버 MAC 주소를 ARP로 조회할 수 없다. 로컬 호스트는 원격 목적지로 보낼 때 기본 게이트웨이의 MAC 주소를 조회한다.

캡처에 FCS가 없을 수 있다

네트워크 인터페이스 카드(NIC)가 FCS를 검사하고 제거한 뒤 운영체제에 프레임을 전달하는 경우가 많다. 패킷 캡처 파일에 FCS가 보이지 않아도 비정상이라고 단정할 수 없다.

EtherType과 길이 필드를 구분한다

Ethernet II에서는 해당 2바이트가 EtherType이다. IEEE 802.3 형식에서는 값이 1,500 이하일 때 페이로드 길이를 의미할 수 있다. 캡처를 직접 분석할 때 프레임 형식을 함께 확인해야 한다.

FCS는 보안 기능이 아니다

CRC는 우발적인 전송 오류를 검출하기 위한 기능이다. 공격자가 프레임 내용을 바꾸고 FCS를 다시 계산하는 행위를 막지 못한다. 무결성과 인증이 필요하면 전송 계층 보안(TLS)이나 매체 접근 제어 보안(MACsec) 같은 별도 보안 프로토콜을 사용한다.

8. 핵심 정리

  • 프레임(Frame)은 링크 계층에서 한 홉을 전달하는 데이터 단위다.
  • 이더넷 프레임은 MAC 주소, EtherType, 페이로드, FCS로 구성된다.
  • 스위치는 출발지 MAC 주소를 학습하고 목적지 MAC 주소에 맞는 포트로 프레임을 전달한다.
  • 라우터는 프레임을 제거해 IP 패킷을 처리한 뒤 다음 링크용 프레임을 새로 만든다.
  • MTU, VLAN 태그, 패딩, FCS 포함 여부를 구분해야 프레임 크기와 캡처 결과를 정확히 해석할 수 있다.