MAC 주소의 구조
MAC 주소의 구조
1. MAC 주소란?
정의
- MAC (Media Access Control) 주소
- 랜 카드(NIC)에 부여된 고유한 물리적 주소
- 제조할 때 새겨지기 때문에 **물리 주소(Physical Address)**라고도 함
- 전 세계에서 유일한 번호로 할당
MAC 주소의 특징
┌─────────────────────────────────────────────────────────────┐
│ MAC 주소 특징 │
├─────────────────────────────────────────────────────────────┤
│ │
│ • 48비트 (6바이트) 숫자로 구성 │
│ • 전 세계적으로 유일한 값 (이론상) │
│ • 제조사에서 하드웨어에 기록 (ROM에 저장) │
│ • 데이터 링크 계층 (2계층)에서 사용 │
│ • 같은 네트워크 내에서 장비 식별에 사용 │
│ │
└─────────────────────────────────────────────────────────────┘2. MAC 주소 구조
48비트 구조
MAC 주소 구조:
00 : 23 : AE : D9 : 7A : 9A
└────────┬────────┘ └────────┬────────┘
OUI (24비트) 일련번호 (24비트)
제조사 식별코드 제조사가 부여
┌─────────────────────────────────────────────────────────────┐
│ │
│ 00 : 23 : AE : D9 : 7A : 9A│
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐│
│ │8비트│ │8비트│ │8비트│ │8비트│ │8비트│ │8비트││
│ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘│
│ │
│ ←──────── 24비트 ─────────→←──────── 24비트 ─────────→ │
│ OUI 일련번호 │
│ (Organizationally (Network │
│ Unique Identifier) Interface Controller) │
│ │
└─────────────────────────────────────────────────────────────┘
총 48비트 = 6바이트 = 12자리 16진수OUI (Organizationally Unique Identifier)
┌─────────────────────────────────────────────────────────────┐
│ OUI │
├─────────────────────────────────────────────────────────────┤
│ │
│ • 앞쪽 24비트 (3바이트) │
│ • 랜 카드를 만든 제조사 번호 │
│ • IEEE에서 제조사에 할당 │
│ • 약 1,677만 개의 조합 가능 (2^24) │
│ │
└─────────────────────────────────────────────────────────────┘주요 제조사 OUI 목록
| OUI | 제조사 |
|---|---|
| 00:00:0C | Cisco Systems |
| 00:1A:2B | Ayecom Technology |
| 00:50:56 | VMware |
| 08:00:27 | Oracle VirtualBox |
| 00:0C:29 | VMware |
| 3C:5A:B4 | |
| DC:A6:32 | Raspberry Pi Foundation |
| 00:1E:C9 | Dell |
| 00:25:00 | Apple |
| 48:2C:6A | Intel |
| B8:27:EB | Raspberry Pi (구형) |
일련번호 (NIC)
┌─────────────────────────────────────────────────────────────┐
│ 일련번호 │
├─────────────────────────────────────────────────────────────┤
│ │
│ • 뒤쪽 24비트 (3바이트) │
│ • 제조사가 랜 카드에 붙인 고유 번호 │
│ • 제조사별로 중복 없이 관리 │
│ • 약 1,677만 개의 조합 가능 (2^24) │
│ │
│ OUI당 1,677만 개 = 제조사당 최대 1,677만 개 랜카드 제조 가능 │
│ (OUI 추가 신청 가능) │
│ │
└─────────────────────────────────────────────────────────────┘3. MAC 주소 표기 방식
다양한 표기법
같은 MAC 주소의 여러 표기 방식:
┌─────────────────────────────────────────────────────────────┐
│ 표기 방식 │
├──────────────────────┬──────────────────────────────────────┤
│ 콜론 구분 (Linux) │ 00:23:AE:D9:7A:9A │
├──────────────────────┼──────────────────────────────────────┤
│ 하이픈 구분 (Windows)│ 00-23-AE-D9-7A-9A │
├──────────────────────┼──────────────────────────────────────┤
│ 점 구분 (Cisco) │ 0023.AED9.7A9A │
├──────────────────────┼──────────────────────────────────────┤
│ 구분 없음 │ 0023AED97A9A │
└──────────────────────┴──────────────────────────────────────┘
※ 대소문자 구분 없음 (00:23:ae = 00:23:AE)2진수/16진수 변환
16진수 → 2진수 변환:
0 0 : 2 3 : A E
↓ ↓ ↓ ↓ ↓ ↓
0000 0000 0010 0011 1010 1110
각 16진수 한 자리 = 4비트 (니블)
예시:
┌──────┬─────────────┐
│16진수│ 2진수 │
├──────┼─────────────┤
│ 0 │ 0000 │
│ 1 │ 0001 │
│ ... │
│ 9 │ 1001 │
│ A │ 1010 │
│ B │ 1011 │
│ C │ 1100 │
│ D │ 1101 │
│ E │ 1110 │
│ F │ 1111 │
└──────┴─────────────┘4. MAC 주소 종류
첫 번째 바이트의 비트 구조
첫 번째 바이트 (8비트):
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ 비트 번호
└───┴───┴───┴───┴───┴───┴───┴───┘
↑ ↑
│ └── I/G 비트 (Individual/Group)
│ 0 = 유니캐스트
│ 1 = 멀티캐스트/브로드캐스트
│
└────── U/L 비트 (Universal/Local)
0 = 전역 (제조사 할당)
1 = 로컬 (관리자 설정)MAC 주소 유형
┌─────────────────────────────────────────────────────────────┐
│ MAC 주소 유형 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 유니캐스트 (Unicast) │
│ ───────────────────── │
│ • I/G 비트 = 0 │
│ • 단일 장비를 지정 │
│ • 예: 00:23:AE:D9:7A:9A │
│ │
│ 멀티캐스트 (Multicast) │
│ ───────────────────── │
│ • I/G 비트 = 1 │
│ • 특정 그룹을 지정 │
│ • 예: 01:00:5E:xx:xx:xx (IPv4 멀티캐스트) │
│ 33:33:xx:xx:xx:xx (IPv6 멀티캐스트) │
│ │
│ 브로드캐스트 (Broadcast) │
│ ───────────────────── │
│ • 모든 비트가 1 │
│ • 같은 네트워크의 모든 장비 │
│ • FF:FF:FF:FF:FF:FF │
│ │
└─────────────────────────────────────────────────────────────┘통신 방식 비교
유니캐스트:
──────────────────────────────────────────
┌────┐
[송신자] ───────→│수신│
└────┘
1:1 통신
멀티캐스트:
──────────────────────────────────────────
┌────┐
┌──→│그룹│
[송신자] ───┼──→│멤버│
└──→│ │
└────┘
1:그룹 통신
브로드캐스트:
──────────────────────────────────────────
┌────┐
┌──→│전체│
[송신자] ───┼──→│장비│
├──→│ │
└──→│ │
└────┘
1:전체 통신5. 이더넷 헤더와 트레일러
이더넷 프레임 구조
이더넷 프레임 상세 구조:
┌────────────────────────────────────────────────────────────────┐
│ 이더넷 프레임 │
├────────┬────────────┬────────────┬──────┬────────────┬─────────┤
│프리앰블│ 목적지 │ 출발지 │ 유형 │ 데이터 │ FCS │
│ +SFD │ MAC 주소 │ MAC 주소 │ │ (페이로드) │(트레일러)│
├────────┼────────────┼────────────┼──────┼────────────┼─────────┤
│8바이트 │ 6바이트 │ 6바이트 │2바이트│46~1500바이트│ 4바이트 │
└────────┴────────────┴────────────┴──────┴────────────┴─────────┘
└────────────────────────────────┘
이더넷 헤더 (14바이트)이더넷 헤더 상세
┌─────────────────────────────────────────────────────────────┐
│ 이더넷 헤더 (14바이트) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────┐│
│ │ 목적지 MAC 주소 (6바이트) ││
│ │ • 프레임을 받을 장비의 MAC 주소 ││
│ │ • 예: AA:BB:CC:DD:EE:FF ││
│ └────────────────────────────────────────────────────────┘│
│ │
│ ┌────────────────────────────────────────────────────────┐│
│ │ 출발지 MAC 주소 (6바이트) ││
│ │ • 프레임을 보내는 장비의 MAC 주소 ││
│ │ • 예: 11:22:33:44:55:66 ││
│ └────────────────────────────────────────────────────────┘│
│ │
│ ┌────────────────────────────────────────────────────────┐│
│ │ 유형/이더타입 (2바이트) ││
│ │ • 상위 계층 프로토콜 식별 ││
│ │ • 예: 0x0800 (IPv4), 0x0806 (ARP) ││
│ └────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘이더넷 유형 (EtherType)
| 유형 번호 (16진수) | 프로토콜 |
|---|---|
| 0x0800 | IPv4 |
| 0x0806 | ARP (Address Resolution Protocol) |
| 0x814C | SNMP over Ethernet |
| 0x86DD | IPv6 |
| 0x8100 | VLAN Tagged Frame (802.1Q) |
| 0x8847 | MPLS (유니캐스트) |
| 0x8848 | MPLS (멀티캐스트) |
| 0x88CC | LLDP (Link Layer Discovery Protocol) |
트레일러 (FCS)
┌─────────────────────────────────────────────────────────────┐
│ FCS (Frame Check Sequence) - 4바이트 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 목적: 데이터 전송 중 오류 발생 여부 확인 │
│ │
│ 방식: CRC-32 (Cyclic Redundancy Check) │
│ │
│ 동작: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 송신측 │ │
│ │ 1. 프레임 데이터로 CRC 계산 │ │
│ │ 2. 계산된 값을 FCS 필드에 추가 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 수신측 │ │
│ │ 1. 받은 프레임으로 CRC 재계산 │ │
│ │ 2. FCS 값과 비교 │ │
│ │ 3. 일치 → 정상 수신 │ │
│ │ 불일치 → 프레임 폐기 (오류 발생) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘6. 프레임 캡슐화와 역캡슐화
캡슐화 과정 (송신)
캡슐화 (Encapsulation) 과정:
[응용 계층]
│
│ 데이터
▼
┌─────────────────────────────────────────────────────────────┐
│ 전송 계층 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ TCP/UDP 헤더 │ 데이터 │ │
│ └──────────────────────────────────────────────────────┘ │
│ 세그먼트 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 네트워크 계층 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ IP 헤더 │ TCP/UDP 헤더 │ 데이터 │ │
│ └──────────────────────────────────────────────────────┘ │
│ 패킷 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 데이터 링크 계층 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │이더넷│ IP 헤더 │ TCP/UDP │ 데이터 │ FCS │ │ │
│ │헤더 │ │ 헤더 │ │ │ │ │
│ └──────────────────────────────────────────────────────┘ │
│ ★ 프레임 ★ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 물리 계층 │
│ │
│ 프레임 → 비트열 → 전기 신호 │
│ │
└─────────────────────────────────────────────────────────────┘
│
▼
케이블 (전기 신호 전송)역캡슐화 과정 (수신)
역캡슐화 (Decapsulation) 과정:
케이블 (전기 신호 수신)
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 물리 계층 │
│ │
│ 전기 신호 → 비트열 → 프레임 │
│ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 데이터 링크 계층 │
│ │
│ 1. 목적지 MAC 주소 확인 │
│ • 자신의 MAC? → 수신 │
│ • 브로드캐스트? → 수신 │
│ • 다른 MAC? → 폐기 │
│ │
│ 2. FCS 검증 (CRC 확인) │
│ • 일치 → 정상 │
│ • 불일치 → 폐기 │
│ │
│ 3. 이더넷 헤더 + FCS 제거 │
│ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 네트워크 계층 │
│ │
│ IP 헤더 분석 후 제거 → 상위 계층으로 전달 │
│ │
└─────────────────────────────────────────────────────────────┘
│
▼
... (전송 계층 → 응용 계층)7. MAC 주소를 이용한 통신
허브 환경에서의 통신
허브 환경에서 MAC 주소 기반 통신:
[PC-A] [PC-B] [PC-C]
MAC: AA:...:01 MAC: AA:...:02 MAC: AA:...:03
│ │ │
└─────────────────────┼─────────────────────┘
│
┌─────┴─────┐
│ HUB │
└───────────┘
PC-A가 PC-C에게 데이터 전송:
1단계: 프레임 생성 (PC-A)
────────────────────────────────────────
┌────────────────┬────────────────┬──────────────┐
│ 목적지 MAC │ 출발지 MAC │ 데이터 │
│ AA:...:03 │ AA:...:01 │ Hello! │
└────────────────┴────────────────┴──────────────┘
2단계: 허브가 모든 포트로 전송 (플러딩)
────────────────────────────────────────
[HUB] ──→ PC-A (송신자, 제외)
│───→ PC-B (목적지 아님)
└───→ PC-C (목적지!)
3단계: MAC 주소 확인 (각 PC)
────────────────────────────────────────
PC-B: 목적지 MAC ≠ 내 MAC → 폐기
PC-C: 목적지 MAC = 내 MAC → 수신!스위치 환경에서의 통신
스위치 환경에서 MAC 주소 기반 통신:
[PC-A] [PC-B] [PC-C]
MAC: AA:...:01 MAC: AA:...:02 MAC: AA:...:03
포트 1 포트 2 포트 3
│ │ │
└─────────────────────┼─────────────────────┘
│
┌──────┴──────┐
│ SWITCH │
│ │
│ MAC 테이블: │
│ AA:...:01→1 │
│ AA:...:02→2 │
│ AA:...:03→3 │
└─────────────┘
PC-A가 PC-C에게 데이터 전송:
1단계: 스위치가 MAC 테이블 확인
────────────────────────────────────────
"AA:...:03 → 포트 3번"
2단계: 해당 포트로만 전송
────────────────────────────────────────
[SWITCH] ──→ PC-C (포트 3번만!)
※ PC-B는 데이터를 받지 않음 (효율적!)8. MAC 주소 확인 방법
운영체제별 확인 명령어
Windows:
────────────────────────────────────────
> ipconfig /all
이더넷 어댑터 이더넷:
물리적 주소. . . . . . . . . : 00-23-AE-D9-7A-9A
└─ MAC 주소 (하이픈 구분)
또는:
> getmac
Linux / macOS:
────────────────────────────────────────
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
ether 00:23:ae:d9:7a:9a ← MAC 주소 (콜론 구분)
또는:
$ ip link show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
link/ether 00:23:ae:d9:7a:9a brd ff:ff:ff:ff:ff:ff네트워크 장비에서 확인
스위치 MAC 테이블 확인 (Cisco):
Switch# show mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0023.aed9.7a9a DYNAMIC Gi0/1
1 0023.aed9.7a9b DYNAMIC Gi0/2
1 0023.aed9.7a9c DYNAMIC Gi0/39. ARP (Address Resolution Protocol)
ARP란?
┌─────────────────────────────────────────────────────────────┐
│ ARP │
├─────────────────────────────────────────────────────────────┤
│ │
│ 목적: IP 주소 → MAC 주소 변환 │
│ │
│ 이유: │
│ • 상위 계층은 IP 주소 사용 │
│ • 데이터 링크 계층은 MAC 주소 필요 │
│ • IP 주소만 알고 MAC 주소를 모를 때 사용 │
│ │
│ 이더타입: 0x0806 │
│ │
└─────────────────────────────────────────────────────────────┘ARP 동작 과정
ARP 동작 과정:
PC-A (192.168.1.1)가 PC-C (192.168.1.3)의 MAC 주소를 모를 때:
1단계: ARP 요청 (브로드캐스트)
────────────────────────────────────────
PC-A → 브로드캐스트 (FF:FF:FF:FF:FF:FF)
"192.168.1.3의 MAC 주소가 뭐야?"
┌─────────────────────────────────────────────────────────────┐
│ ARP 요청 프레임 │
├─────────────────────────────────────────────────────────────┤
│ 목적지 MAC: FF:FF:FF:FF:FF:FF (브로드캐스트) │
│ 출발지 MAC: AA:...:01 (PC-A) │
│ 타입: 0x0806 (ARP) │
│ 내용: 192.168.1.3의 MAC 주소를 알려주세요 │
└─────────────────────────────────────────────────────────────┘
2단계: ARP 응답 (유니캐스트)
────────────────────────────────────────
PC-C → PC-A (유니캐스트)
"192.168.1.3의 MAC 주소는 AA:...:03이야!"
┌─────────────────────────────────────────────────────────────┐
│ ARP 응답 프레임 │
├─────────────────────────────────────────────────────────────┤
│ 목적지 MAC: AA:...:01 (PC-A) │
│ 출발지 MAC: AA:...:03 (PC-C) │
│ 타입: 0x0806 (ARP) │
│ 내용: 192.168.1.3 = AA:...:03 │
└─────────────────────────────────────────────────────────────┘
3단계: ARP 캐시에 저장
────────────────────────────────────────
PC-A는 192.168.1.3 = AA:...:03 을 ARP 테이블에 저장
(일정 시간 후 만료)ARP 테이블 확인
Windows:
> arp -a
인터페이스: 192.168.1.1
인터넷 주소 물리적 주소 유형
192.168.1.3 00-23-ae-d9-7a-9c 동적
192.168.1.254 00-11-22-33-44-55 동적
255.255.255.255 ff-ff-ff-ff-ff-ff 정적
Linux / macOS:
$ arp -a
? (192.168.1.3) at 00:23:ae:d9:7a:9c [ether] on eth0
? (192.168.1.254) at 00:11:22:33:44:55 [ether] on eth0핵심 정리
| 개념 | 설명 |
|---|---|
| MAC 주소 | 랜 카드의 고유한 물리적 주소 (48비트) |
| OUI | 앞쪽 24비트, 제조사 식별 코드 |
| 일련번호 | 뒤쪽 24비트, 제조사가 부여한 고유 번호 |
| 이더넷 헤더 | 목적지 MAC + 출발지 MAC + 유형 (14바이트) |
| FCS (트레일러) | 오류 검출용 CRC 값 (4바이트) |
| 프레임 | 이더넷 헤더 + 데이터 + FCS |
| ARP | IP 주소를 MAC 주소로 변환하는 프로토콜 |
프레임 구조 요약
┌────────────────────────────────────────────────────────────────┐
│ 이더넷 프레임 │
├──────────────────────────────────┬─────────────┬───────────────┤
│ 이더넷 헤더 (14바이트) │ 데이터 │ FCS (4바이트)│
├────────────┬────────────┬────────┼─────────────┼───────────────┤
│목적지 MAC │출발지 MAC │ 유형 │ 46~1500바이트│ CRC-32 │
│ (6바이트) │ (6바이트) │(2바이트)│ │ │
└────────────┴────────────┴────────┴─────────────┴───────────────┘용어 정리
- MAC 주소 (Media Access Control Address): 랜 카드에 부여된 48비트 물리적 주소
- OUI (Organizationally Unique Identifier): IEEE에서 제조사에 할당한 24비트 식별 코드
- 이더넷 헤더: 목적지 MAC, 출발지 MAC, 유형으로 구성된 14바이트 헤더
- FCS (Frame Check Sequence): 프레임 오류 검출을 위한 CRC-32 값
- 프레임 (Frame): 데이터 링크 계층의 데이터 단위 (헤더 + 데이터 + 트레일러)
- ARP (Address Resolution Protocol): IP 주소를 MAC 주소로 변환하는 프로토콜