📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 06편
이전 글: 05. 네트워크 인터페이스와 NIC · 다음 글: 07. IP Address란 무엇인가
MAC 주소(Media Access Control Address) 는 Ethernet·Wi-Fi 같은 2계층(데이터 링크 계층)에서 같은 링크에 연결된 인터페이스를 구분하는 주소입니다. 흔히 "하드웨어 주소", "물리 주소"라고도 부르며, NIC 제조 시 기본값이 부여됩니다.
| 표기 방식 | 예 | 주로 쓰는 곳 |
|---|---|---|
| 콜론 구분 | 00:0c:29:3a:4b:5c | Linux, Wireshark |
| 하이픈 구분 | 00-0C-29-3A-4B-5C | Windows (ipconfig /all, getmac) |
| 점 3구간 | 000c.293a.4b5c | Cisco 장비 |
세 표기는 모두 같은 주소입니다. 서로 다른 장비의 로그를 대조할 때는 표기를 하나로 정규화한 뒤 비교해야 합니다.
MAC 주소 6바이트는 앞뒤 두 부분으로 나뉩니다.
00 : 0c : 29 : 3a : 4b : 5c
└──── OUI ────┘ └─ 장치 고유 부분 ─┘
(제조사 식별 번호, (제조사가 장치마다
IEEE가 할당) 겹치지 않게 부여)
첫 바이트(0x00)의 하위 2비트
bit0 (I/G) : 0 = 개별 주소(유니캐스트) 1 = 그룹 주소(브로드캐스트·멀티캐스트)
bit1 (U/L) : 0 = 제조사 할당 주소 1 = 로컬에서 관리(임의 지정·랜덤화)
같은 LAN 안에서 MAC 주소가 쓰이는 흐름은 다음과 같습니다.
PC-A (192.168.10.25)가 PC-B (192.168.10.80)에게 보내려 함
↓ ① 목적지 IP는 같은 네트워크 → PC-B의 MAC이 필요
↓ ② ARP 캐시 확인 → 없으면 ARP 요청(목적지 MAC ff:ff:ff:ff:ff:ff)
↓ ③ PC-B가 자기 MAC으로 응답
↓ ④ 프레임 작성: 출발지 MAC = PC-A, 목적지 MAC = PC-B
↓ ⑤ 스위치가 목적지 MAC을 보고 PC-B 포트로만 전달
PC-B의 NIC가 목적지 MAC이 자기 것임을 확인하고 수신
MAC 주소가 쓰이는 범위는 같은 링크(같은 브로드캐스트 도메인) 안입니다. 스위치는 프레임의 목적지 MAC을 보고 어느 포트로 보낼지 결정하고, 호스트는 목적지 IP에 해당하는 MAC을 ARP로 알아낸 뒤 프레임을 만듭니다. 라우터를 지나 다른 네트워크로 넘어가면 프레임이 새로 만들어지므로 MAC 주소는 구간마다 바뀝니다(구간별 주소 변화는 07편에서 IP와 비교해 다룸).
ARP의 동작은 31. Ethernet 프레임과 MAC 주소 · ARP 동작 원리에서, Wireshark에서 OUI·I/G·U/L 비트를 필드로 읽는 방법은 112. Ethernet 프레임 필드 분석 — eth.src·eth.dst·eth.type로 읽는 2계층 증거에서 다룹니다.
① 특수한 MAC 주소가 있습니다.
| 주소 | 의미 |
|---|---|
ff:ff:ff:ff:ff:ff | 브로드캐스트 — 같은 링크의 모든 장치 (ARP 요청, DHCP Discover 등) |
01:00:5e:xx:xx:xx | IPv4 멀티캐스트용 MAC (IP 멀티캐스트 주소의 하위 23비트를 매핑) |
33:33:xx:xx:xx:xx | IPv6 멀티캐스트용 MAC |
00:00:00:00:00:00 | 미지정 — ARP 요청의 대상 MAC 필드(아직 모름) 등에 사용 |
② OUI로 제조사를 추정할 수 있습니다. 예를 들어 00:0c:29, 00:50:56은 VMware, 08:00:27은 VirtualBox 가상 NIC에 쓰이는 OUI입니다. 자산 목록에 없는 제조사의 MAC이 나타나면 어떤 장치인지 확인하는 단서가 됩니다.
③ MAC 주소는 바꿀 수 있습니다. 제조 시 기본값이 있을 뿐, OS 설정으로 다른 값을 쓰는 것은 어렵지 않습니다. 또한 최신 스마트폰·Windows·Linux(NetworkManager)는 개인정보 보호를 위해 Wi-Fi 연결 시 무작위 MAC을 쓰는 기능을 제공합니다. 이 경우 첫 바이트의 U/L 비트가 1(로컬 관리 주소)입니다.
④ MAC 주소는 라우터를 넘지 않습니다. 인터넷 너머 서버는 내 PC의 MAC을 알 수 없고, 내가 보는 외부 서버 패킷의 출발지 MAC은 게이트웨이(라우터)의 MAC입니다.
실습 예시 — 내 MAC과 이웃의 MAC 확인 (Rocky Linux / Ubuntu 공통)
# 예시(값은 환경마다 다름)
ip link show ens33 # link/ether 뒤가 내 인터페이스의 MAC
ip neigh # 같은 LAN에서 알게 된 IP ↔ MAC (ARP/NDP 캐시)
# 출력 형식 예시(값은 환경마다 다름)
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether 00:0c:29:3a:4b:5c brd ff:ff:ff:ff:ff:ff
192.168.10.1 dev ens33 lladdr 00:50:56:aa:bb:cc REACHABLE
192.168.10.80 dev ens33 lladdr 00:0c:29:77:88:99 STALE
Windows에서는 getmac /v 또는 ipconfig /all(물리적 주소), 이웃 목록은 arp -a로 확인합니다. brd ff:ff:ff:ff:ff:ff는 이 인터페이스의 브로드캐스트 MAC을 뜻합니다.
U/L 비트 확인 방법(이론적으로 확인할 수 있는 방법): 첫 바이트의 16진수 두 번째 자리가 2, 6, a, e 중 하나이면 로컬 관리 주소입니다. 예를 들어 02:42:...(Docker 컨테이너에서 흔히 보이는 형태)이나 da:...는 랜덤·로컬 주소입니다.
MAC 주소는 식별자이지만 인증 수단은 아닙니다. 이 점에서 여러 위험이 생깁니다.
| 로그 소스 | MAC이 보이는 방식 | 활용 |
|---|---|---|
| DHCP 서버 로그 | 어떤 MAC에 어떤 IP를 언제 할당했는지 | IP → 장치 식별의 핵심 근거 |
| 스위치 로그 | 포트별 학습 MAC, MAC 이동(flapping) 메시지 | 장치가 연결된 물리 위치 추적 |
| 무선 컨트롤러 | 접속 단말 MAC, AP 위치 | 무선 단말 위치·접속 시간 확인 |
| 패킷 캡처 | 프레임의 출발지·목적지 MAC | 같은 LAN 안의 실제 송신 장치 확인 |
| 경계 방화벽 로그 | (기록하는 경우) 대부분 게이트웨이·인접 장비의 MAC | 원격지 호스트 식별에는 쓸 수 없음 |
관제자가 확인할 질문은 다음과 같습니다.
⚠️ 오탐 주의: MAC 랜덤화를 쓰는 단말은 접속할 때마다(또는 네트워크마다) 다른 MAC으로 보일 수 있어 "미등록 장치"로 오인하기 쉽습니다. 가상머신·컨테이너 환경에서도 로컬 관리 MAC은 정상적으로 흔합니다.