Data Link: 프레임과 MAC 주소로 같은 링크의 장치를 연결하는 계층
데이터 링크 계층(Data Link Layer)은 물리 계층이 전달하는 비트열을 프레임(Frame) 단위로 구분하고, 같은 링크에 연결된 장치 사이에서 데이터를 전달한다. 매체 접근 제어 주소(MAC Address), 오류 검출, 매체 접근 제어, 스위치의 프레임 전달을 담당한다. 이더넷(Ethernet)과 무선 랜(Wi-Fi)이 대표적인 데이터 링크 계층
By 송민성
1. 개념
데이터 링크 계층(Data Link Layer)은 개방형 시스템 상호 연결 모형(OSI Model)의 2계층이다. 네트워크 계층에서 받은 패킷(Packet)을 프레임(Frame)으로 감싸 물리 계층에 전달하고, 수신한 비트열에서 프레임을 복원한다.
송신 측
IP 패킷
↓
[목적지 MAC | 출발지 MAC | 유형 | 데이터 | 오류 검출값]
↓
물리 신호
수신 측
물리 신호
↓
프레임 복원 및 오류 검사
↓
IP 패킷데이터 링크 계층의 주요 역할은 다음과 같다.
- 프레이밍(Framing): 연속된 비트열을 프레임 단위로 구분
- 물리 주소 지정(Physical Addressing): MAC 주소로 같은 링크의 장치 식별
- 오류 검출(Error Detection): 전송 중 비트 손상 여부 확인
- 매체 접근 제어(Media Access Control): 여러 장치가 하나의 매체를 사용하는 방법 결정
- 프레임 전달(Frame Forwarding): 스위치가 적절한 포트로 프레임 전송
- 흐름 제어(Flow Control): 일부 규격에서 송신 속도 조절
전통적으로 데이터 링크 계층은 두 부계층으로 나눈다.
- 논리적 링크 제어(Logical Link Control, LLC): 상위 프로토콜 식별과 논리적 연결 관리
- 매체 접근 제어(Media Access Control, MAC): MAC 주소, 프레임 형식, 매체 접근 방식 관리
2. 왜 사용하는가
물리 계층은 비트를 전기·빛·전파 신호로 전달하지만, 비트가 어디서 시작하고 끝나는지 또는 어느 장치가 받아야 하는지 판단하지 않는다.
데이터 링크 계층은 같은 링크에 연결된 장치가 다음 정보를 공유하도록 만든다.
- 하나의 데이터 단위가 어디서 시작하고 끝나는가
- 누가 보냈고 누가 받아야 하는가
- 데이터가 전송 중 손상되었는가
- 여러 장치 중 누가 전송 매체를 사용할 수 있는가
- 스위치가 어느 포트로 데이터를 보내야 하는가
여기서 링크(Link)는 라우터를 거치지 않고 데이터 링크 계층 통신이 가능한 범위를 뜻한다. 이더넷 스위치로 연결된 하나의 근거리 통신망(LAN)이 대표적이다.
MAC 주소는 링크 내부 전달에 사용되고, IP 주소는 서로 다른 네트워크 사이의 전달에 사용된다.
같은 네트워크:
호스트 A ── 스위치 ── 호스트 B
MAC 주소로 전달
다른 네트워크:
호스트 A ── 라우터 ── 인터넷 ── 호스트 C
링크마다 MAC 주소 변경
IP 주소는 종단 간 전달에 사용3. 동작 원리
이더넷 프레임
일반적인 이더넷 II(Ethernet II) 프레임은 다음 구조를 사용한다.
| 목적지 MAC | 출발지 MAC | EtherType | 페이로드 | FCS |
| 6바이트 | 6바이트 | 2바이트 | 46~1500 | 4바이트 |- 목적지 MAC 주소: 프레임을 받을 인터페이스 주소
- 출발지 MAC 주소: 프레임을 보낸 인터페이스 주소
- 이더타입(EtherType): 페이로드에 포함된 상위 프로토콜
- 페이로드(Payload): IP 패킷 같은 상위 계층 데이터
- 프레임 검사 시퀀스(Frame Check Sequence, FCS): 오류 검출값
대표적인 이더타입 값은 다음과 같다.
| 이더타입 | 프로토콜 |
|---|---|
| 0x0800 | 인터넷 프로토콜 버전 4(IPv4) |
| 0x0806 | 주소 결정 프로토콜(ARP) |
| 0x86DD | 인터넷 프로토콜 버전 6(IPv6) |
| 0x8100 | 가상 근거리 통신망 태그(IEEE 802.1Q VLAN) |
표준 이더넷 프레임 크기는 목적지 MAC 주소부터 FCS까지 64~1518바이트다. 페이로드가 46바이트보다 짧으면 패딩(Padding)을 추가한다. IEEE 802.1Q 가상 근거리 통신망(VLAN) 태그가 있으면 일반적으로 최대 1522바이트가 된다.
프리앰블(Preamble) 7바이트와 프레임 시작 구분자(Start Frame Delimiter, SFD) 1바이트는 프레임 전송 전에 물리 계층에서 사용하며 64~1518바이트 계산에 포함하지 않는다.
MAC 주소
MAC 주소는 일반적으로 48비트이며 6개의 8비트 값을 16진수로 표시한다.
00:1A:2B:3C:4D:5E목적지 MAC 주소의 종류는 다음과 같다.
- 유니캐스트(Unicast): 특정 인터페이스 하나
- 멀티캐스트(Multicast): 특정 그룹
- 브로드캐스트(Broadcast): 같은 브로드캐스트 도메인의 모든 장치
- 브로드캐스트 주소:
FF:FF:FF:FF:FF:FF
MAC 주소는 장치를 전 세계에서 영구적으로 식별하는 신뢰 경계가 아니다. 운영체제에서 변경할 수 있고 프레임도 위조할 수 있다.
스위치의 MAC 주소 학습
이더넷 스위치(Ethernet Switch)는 프레임을 받을 때 출발지 MAC 주소와 수신 포트를 MAC 주소 테이블에 기록한다.
MAC 주소 포트
00:11:22:33:44:55 1
AA:BB:CC:DD:EE:FF 3프레임 전달 과정은 다음과 같다.
- 프레임의 출발지 MAC 주소를 수신 포트와 연결해 학습한다.
- 목적지 MAC 주소를 MAC 주소 테이블에서 찾는다.
- 목적지가 알려져 있으면 해당 포트로만 전달한다.
- 목적지가 알려져 있지 않으면 수신 포트를 제외한 같은 VLAN의 포트로 플러딩(Flooding)한다.
- 브로드캐스트 프레임도 같은 VLAN의 포트로 플러딩한다.
학습된 항목은 일정 시간 사용되지 않으면 에이징(Aging)으로 제거된다. 이동한 장치나 변경된 연결 구조를 반영하기 위한 동작이다.
IP 주소를 MAC 주소로 변환
송신 호스트는 목적지 IP 주소가 자신과 같은 서브넷인지 먼저 판단한다.
- 같은 서브넷: 목적지 호스트의 MAC 주소 조회
- 다른 서브넷: 기본 게이트웨이(Default Gateway)의 MAC 주소 조회
인터넷 프로토콜 버전 4에서는 주소 결정 프로토콜(Address Resolution Protocol, ARP)을 사용한다.
호스트 A:
"192.168.1.20을 가진 장치의 MAC 주소는 무엇인가?"
호스트 B:
"192.168.1.20은 나이며 MAC 주소는 AA:BB:CC:DD:EE:FF다."호스트 A는 응답을 ARP 캐시에 저장하고 해당 MAC 주소를 목적지로 사용해 이더넷 프레임을 만든다. 인터넷 프로토콜 버전 6에서는 이웃 탐색 프로토콜(Neighbor Discovery Protocol, NDP)을 사용한다.
라우터를 지날 때의 변화
MAC 주소는 링크마다 바뀐다. 라우터는 수신한 프레임을 제거하고 IP 패킷을 처리한 뒤, 다음 링크에 맞는 새 프레임으로 캡슐화한다.
첫 번째 링크:
출발지 MAC = 호스트 A
목적지 MAC = 라우터 R1
두 번째 링크:
출발지 MAC = 라우터 R1
목적지 MAC = 다음 홉
IP 출발지와 목적지:
일반적인 라우팅 과정에서는 종단까지 유지오류 검출
이더넷은 순환 중복 검사(Cyclic Redundancy Check, CRC)를 이용해 FCS를 계산한다. 수신 장치는 같은 방식으로 값을 계산해 프레임의 FCS와 비교한다.
값이 다르면 프레임이 손상된 것으로 판단하고 폐기한다. 이더넷 FCS는 오류를 검출하지만 손상된 프레임을 복구하거나 재전송하지 않는다. 필요한 재전송은 전송 제어 프로토콜(TCP) 같은 상위 계층이나 해당 링크 기술이 담당한다.
매체 접근 제어
초기 공유형 이더넷은 반송파 감지 다중 접속 및 충돌 검출(Carrier Sense Multiple Access with Collision Detection, CSMA/CD)을 사용했다.
현대의 스위치 기반 전이중(Full-Duplex) 이더넷에서는 각 링크의 송신 경로와 수신 경로가 분리되므로 충돌과 CSMA/CD가 사용되지 않는다.
무선 랜은 공유 전파 매체에서 충돌을 직접 검출하기 어려워 반송파 감지 다중 접속 및 충돌 회피(Carrier Sense Multiple Access with Collision Avoidance, CSMA/CA)를 사용한다.
4. 코드 예제
다음 코드는 FCS가 제거된 이더넷 프레임을 생성하고 헤더를 해석한다. 대부분의 패킷 캡처 환경에서는 네트워크 인터페이스나 드라이버가 FCS를 제거한 데이터를 제공한다.
from dataclasses import dataclass
ETHERTYPES = {
0x0800: "IPv4",
0x0806: "ARP",
0x86DD: "IPv6",
}
@dataclass(frozen=True)
class EthernetFrame:
destination: str
source: str
ether_type: int
protocol: str
payload: bytes
def format_mac(raw: bytes) -> str:
return ":".join(f"{byte:02X}" for byte in raw)
def parse_ethernet_frame(data: bytes) -> EthernetFrame:
if len(data) < 14:
raise ValueError("이더넷 헤더는 최소 14바이트여야 합니다.")
destination = format_mac(data[0:6])
source = format_mac(data[6:12])
ether_type = int.from_bytes(data[12:14], byteorder="big")
payload_offset = 14
# IEEE 802.1Q VLAN 태그: TPID 2바이트 + TCI 2바이트
if ether_type == 0x8100:
if len(data) < 18:
raise ValueError("VLAN 태그가 있는 헤더는 최소 18바이트여야 합니다.")
ether_type = int.from_bytes(data[16:18], byteorder="big")
payload_offset = 18
return EthernetFrame(
destination=destination,
source=source,
ether_type=ether_type,
protocol=ETHERTYPES.get(ether_type, "알 수 없음"),
payload=data[payload_offset:],
)
def build_example_frame() -> bytes:
destination = bytes.fromhex("FF FF FF FF FF FF")
source = bytes.fromhex("00 11 22 33 44 55")
ether_type = (0x0800).to_bytes(2, byteorder="big")
# 최소 이더넷 페이로드 크기인 46바이트
payload = b"hello" + bytes(41)
return destination + source + ether_type + payload
def main() -> None:
raw_frame = build_example_frame()
frame = parse_ethernet_frame(raw_frame)
print(f"목적지 MAC: {frame.destination}")
print(f"출발지 MAC: {frame.source}")
print(f"이더타입: 0x{frame.ether_type:04X}")
print(f"상위 프로토콜: {frame.protocol}")
print(f"페이로드 길이: {len(frame.payload)}바이트")
assert frame.destination == "FF:FF:FF:FF:FF:FF"
assert frame.source == "00:11:22:33:44:55"
assert frame.ether_type == 0x0800
assert len(frame.payload) == 46
if __name__ == "__main__":
main()실행 결과는 다음과 같다.
목적지 MAC: FF:FF:FF:FF:FF:FF
출발지 MAC: 00:11:22:33:44:55
이더타입: 0x0800
상위 프로토콜: IPv4
페이로드 길이: 46바이트운영체제에서 이웃 장치의 IP 주소와 MAC 주소 대응 정보를 확인할 수 있다.
ip neigh패킷 캡처 도구로 이더넷 헤더를 확인할 수도 있다.
sudo tcpdump -e -n -i any5. 시간 복잡도 또는 성능 특성
프레임 처리 비용
이더넷 헤더의 기본 필드는 고정 길이이므로 목적지 MAC 주소, 출발지 MAC 주소, 이더타입을 읽는 작업은 입력 프레임 크기와 무관하게 O(1)이다.
페이로드 전체를 복사하거나 CRC를 계산하는 작업은 프레임 길이를 n이라고 할 때 O(n)이다. 실제 네트워크 장비는 CRC 계산과 전달을 하드웨어 파이프라인으로 처리할 수 있다.
전송 시간
크기가 L비트인 프레임을 전송률 R비트/초인 링크에 싣는 직렬화 지연(Serialization Delay)은 다음과 같다.
직렬화 지연 = L / R1500바이트를 1기가비트/초 링크에 전송할 때 페이로드 자체의 직렬화 지연은 다음과 같다.
1500 × 8 / 1,000,000,000
= 0.000012초
= 12마이크로초실제 링크 사용량에는 이더넷 헤더, FCS, 프리앰블, 프레임 시작 구분자, 프레임 간 간격(Interpacket Gap)이 추가된다.
프레임 크기와 오버헤드
작은 프레임은 데이터에 비해 헤더와 프레임 간 간격의 비중이 크다. 큰 프레임은 같은 양의 데이터를 더 적은 프레임으로 전달해 오버헤드를 줄이지만, 전송 오류가 발생했을 때 한 번에 버려지는 데이터가 많아진다.
일반적인 이더넷 최대 전송 단위(Maximum Transmission Unit, MTU)는 1500바이트다. MTU는 이더넷 페이로드에 담을 수 있는 네트워크 계층 패킷의 최대 크기를 뜻하며 이더넷 헤더와 FCS는 포함하지 않는다.
6. 실무 사용 사례
스위치 기반 사내 네트워크
사무실의 컴퓨터, 서버, 프린터를 이더넷 스위치에 연결한다. 스위치는 MAC 주소를 학습하고 필요한 포트로만 유니캐스트 프레임을 전달한다.
가상 근거리 통신망
가상 근거리 통신망(Virtual LAN, VLAN)은 하나의 물리적 스위치 인프라를 여러 논리적 브로드캐스트 도메인으로 분리한다.
VLAN 10: 개발망
VLAN 20: 운영망
VLAN 30: 게스트망서로 다른 VLAN 사이의 통신에는 라우터나 3계층 스위치가 필요하다.
컨테이너와 가상 머신 네트워크
리눅스 브리지(Linux Bridge), 가상 이더넷 장치(Virtual Ethernet, veth), 가상 스위치는 이더넷 프레임과 MAC 주소를 이용해 컨테이너나 가상 머신을 연결한다.
컨테이너 ─ veth ─ 리눅스 브리지 ─ 물리 인터페이스패킷 분석과 장애 진단
패킷 캡처에서 다음 항목을 확인하면 링크 계층 문제를 찾을 수 있다.
- 목적지 MAC 주소가 예상한 장치인지
- ARP 요청에 응답이 오는지
- VLAN 태그가 올바른지
- 브로드캐스트나 알 수 없는 유니캐스트가 과도한지
- 인터페이스에서 CRC 오류나 프레임 폐기가 증가하는지
링크 집계
링크 집계(Link Aggregation)는 여러 물리 링크를 하나의 논리 링크로 묶는다. IEEE 802.1AX의 링크 집계 제어 프로토콜(Link Aggregation Control Protocol, LACP)이 대표적이다.
전체 트래픽은 여러 링크에 분산할 수 있지만, 하나의 흐름은 패킷 순서 보존을 위해 일반적으로 특정 물리 링크에 고정된다. 따라서 단일 흐름의 최대 처리량이 모든 링크 대역폭의 합과 같다고 보장할 수 없다.
7. 주의할 점
MAC 주소와 IP 주소의 역할을 혼동하지 않는다
MAC 주소는 현재 링크의 다음 수신자를 지정한다. IP 주소는 여러 네트워크를 통과하는 논리적 출발지와 목적지를 지정한다.
원격 서버로 데이터를 보낼 때 이더넷 프레임의 목적지 MAC 주소는 원격 서버가 아니라 기본 게이트웨이의 MAC 주소다.
FCS는 재전송 기능이 아니다
FCS는 손상 여부만 검출한다. 손상된 이더넷 프레임은 폐기되며, 이더넷 자체가 재전송을 요청하지 않는다.
무선 랜처럼 데이터 링크 계층에서 확인 응답과 재전송을 제공하는 기술도 있으므로, 모든 2계층 기술이 이더넷과 같은 동작을 한다고 가정하면 안 된다.
패킷 캡처에 FCS가 없을 수 있다
네트워크 인터페이스가 FCS를 검사하고 제거한 뒤 운영체제에 프레임을 전달하는 경우가 많다. 패킷 캡처에서 FCS 필드가 보이지 않는다고 해서 프레임에 FCS가 전송되지 않은 것은 아니다.
MTU 불일치가 통신 장애를 만든다
경로 중 일부 링크의 MTU가 더 작으면 패킷이 분할되거나 폐기될 수 있다. 경로 MTU 발견(Path MTU Discovery)에 필요한 인터넷 제어 메시지 프로토콜(ICMP) 메시지가 차단되면 작은 요청은 성공하지만 큰 응답은 멈추는 현상이 발생할 수 있다.
루프는 브로드캐스트 폭주를 일으킬 수 있다
이더넷 프레임에는 IP 패킷의 생존 시간(Time To Live, TTL)처럼 스위치를 지날 때마다 감소하는 필드가 없다. 스위치 사이에 순환 경로가 생기면 브로드캐스트 프레임이 계속 복제될 수 있다.
스패닝 트리 프로토콜(Spanning Tree Protocol, STP)은 일부 링크를 차단해 논리적으로 순환이 없는 구조를 만든다.
MAC 주소는 인증 수단이 아니다
MAC 주소는 변경하거나 위조할 수 있다. MAC 주소 허용 목록만으로 사용자를 인증하거나 민감한 시스템을 보호해서는 안 된다. 인증에는 IEEE 802.1X, 암호화된 상위 계층 프로토콜, 별도 접근 제어를 사용한다.
8. 핵심 정리
- 데이터 링크 계층은 비트열을 프레임으로 구분하고 같은 링크 안에서 전달한다.
- 이더넷 프레임은 목적지 MAC, 출발지 MAC, 이더타입, 페이로드, FCS로 구성된다.
- 스위치는 출발지 MAC 주소를 학습하고 목적지 MAC 주소에 따라 프레임을 전달하거나 플러딩한다.
- MAC 주소는 링크 내부 전달에 사용되며 라우터를 지날 때마다 바뀐다.
- FCS는 전송 오류를 검출하지만 손상된 프레임을 복구하거나 재전송하지 않는다.
- 현대의 전이중 스위치 이더넷에서는 충돌과 CSMA/CD가 사용되지 않는다.
- VLAN은 하나의 물리 네트워크를 여러 논리적 브로드캐스트 도메인으로 분리한다.