이더넷과 MAC 주소
물리 계층이 비트를 신호로 변환해서 전송한다는 것을 이해했습니다. 하지만 비트의 나열만으로는 통신이 성립하지 않습니다. 이 비트들이 어디서부터 어디까지가 하나의 데이터인지, 이 데이터를 누구에게 보내는 것인지를 알아야 합니다.
이 역할을 담당하는 것이 데이터 링크 계층이고, 그 핵심 기술이 바로 이더넷(Ethernet)입니다.
이더넷의 중심 질문은 단순합니다. 같은 링크 안에서 이 프레임을 어느 인터페이스로 보낼 것인가? 스위치는 프레임의 Source MAC을 보고 포트를 학습하고, Destination MAC을 보고 어느 포트로 내보낼지 결정합니다.
이더넷의 역사와 발전
초기 이더넷은 하나의 동축 케이블(버스)을 공유하는 구조였습니다. 여러 장치가 같은 매체를 공유하므로, 동시에 전송하면 충돌이 발생합니다. 이를 해결하기 위해 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)라는 매체 접근 제어 방식을 사용했습니다.
현대의 스위치 기반 이더넷에서는 각 포트가 독립적인 링크가 되고 전이중(Full Duplex) 통신이 일반적이므로, 공유 매체에서 필요했던 CSMA/CD는 실무에서 거의 등장하지 않습니다.
이더넷 프레임 구조
이더넷은 데이터를 프레임(Frame)이라는 단위로 묶어 전달합니다.
| 필드 | 크기 | 설명 |
|---|---|---|
| Preamble | 7 B | 10101010 반복, 클록 동기화 |
| SFD | 1 B | 10101011, 프레임 시작 표시 |
| Destination MAC | 6 B | 수신자 MAC 주소 |
| Source MAC | 6 B | 송신자 MAC 주소 |
| 802.1Q Tag | 4 B | VLAN 태그, 없을 수도 있음 |
| Type / Length | 2 B | Ethernet II에서는 EtherType, 802.3 계열에서는 Length |
| Payload | 46~1500 B | 상위 계층 데이터(IP 패킷 등), 부족하면 padding |
| FCS | 4 B | CRC-32 오류 검출 코드 |
Ethernet II 프레임에서는 Type 필드가 0x0800이면 IPv4, 0x86DD이면 IPv6, 0x0806이면 ARP를 뜻합니다. IEEE 802.3 계열에서는 같은 위치가 Length로 해석될 수 있고, 뒤에 LLC/SNAP 정보가 이어질 수 있습니다.
Preamble과 SFD는 프레임 전송을 위해 앞에 붙는 물리 계층 성격의 필드이며, 보통 말하는 64바이트 최소 이더넷 프레임 크기에는 Destination MAC부터 FCS까지가 포함됩니다. 페이로드가 46바이트 미만이면 패딩(padding)을 추가합니다. 이 최소 크기는 과거 CSMA/CD 충돌 감지 제약에서 비롯되었고, 현대 전이중 환경에서도 표준 프레임 형식의 일부로 유지됩니다. 일반적인 최대 페이로드 크기 1500바이트를 MTU(Maximum Transmission Unit)라고 합니다.
점보 프레임
데이터센터에서는 MTU를 9000바이트 안팎으로 확대한 점보 프레임(Jumbo Frame)을 사용하기도 합니다. 다만 점보 프레임 크기는 표준 이더넷 MTU처럼 하나로 고정된 값이 아니라 장비와 설정에 따라 달라집니다.
| 구분 | 표준 프레임 | 점보 프레임 |
|---|---|---|
| MTU | 1500 B | 9000 B |
| 헤더 비율 | ~3.6% | ~0.6% |
| 장점 | 호환성 | 높은 효율, 낮은 CPU 부하 |
| 단점 | - | 경로 전체 장비가 지원해야 함 |
MAC 주소의 구조와 역할
MAC(Media Access Control) 주소는 데이터 링크 계층에서 인터페이스를 식별하는 48비트 주소입니다. 전통적으로 NIC 제조 단계에서 할당된 주소를 많이 떠올리지만, 가상 NIC, 컨테이너, 테스트 환경, 개인정보 보호용 랜덤 MAC처럼 소프트웨어가 설정하는 locally administered 주소도 흔합니다.
| 특수 MAC 주소 | 의미 |
|---|---|
| FF:FF:FF:FF:FF:FF | 브로드캐스트 (모든 장치) |
| 01:00:5E:xx:xx:xx | IPv4 멀티캐스트 |
| 33:33:xx:xx:xx:xx | IPv6 멀티캐스트 |
| 00:00:00:00:00:00 | 미할당 (초기화 상태) |
MAC 주소의 첫 옥텟에는 중요한 플래그가 있습니다. 가장 낮은 비트(I/G)가 0이면 개별 주소, 1이면 그룹 주소입니다. 그다음 비트(U/L)가 0이면 IEEE가 관리하는 globally administered 주소, 1이면 locally administered 주소입니다. 그래서 02:42:ac:11:00:02처럼 첫 옥텟이 02인 주소는 Docker 같은 환경에서 자주 보이는 로컬 관리 주소입니다.
# 자신의 MAC 주소 확인
ip link show | grep ether
# OUI 확인 (제조사 조회)
# 방법: globally administered MAC의 앞 24비트를 IEEE OUI 데이터베이스에서 검색
# MAC 주소 변경 (테스트용)
# sudo ip link set eth0 address 02:42:ac:11:00:02MAC 주소는 같은 네트워크(LAN) 내에서 다음 홉의 인터페이스를 식별합니다. IP 주소가 네트워크 사이의 경로를 찾기 위한 논리적 주소라면, MAC 주소는 현재 링크에서 실제 프레임을 받을 인터페이스 주소입니다. 라우터를 지나면 IP 목적지는 유지되지만, 프레임의 출발지/목적지 MAC 주소는 홉마다 새로 바뀝니다.
IP 주소와 MAC 주소의 역할 분담
왜 IP 주소만으로 통신하지 않고 MAC 주소가 필요할까요?
IP 주소는 네트워크 간의 경로를 결정합니다. MAC 주소는 같은 네트워크에 연결된 장치에게 프레임을 전달합니다. 라우터가 어느 네트워크로 보낼지 결정하고, 스위치가 어느 장치에 전달할지 결정하는 역할 분담입니다.
유니캐스트, 브로드캐스트, 멀티캐스트
| 전달 방식 | 목적지 MAC | 수신자 | 예시 |
|---|---|---|---|
| 유니캐스트 | 특정 NIC 주소 | 1대 | 일반 HTTP 통신 |
| 브로드캐스트 | FF:FF:FF:FF:FF:FF | 같은 LAN 전체 | ARP 요청, DHCP |
| 멀티캐스트 | I/G 비트가 1인 그룹 주소 | 특정 그룹 | IPTV, 화상회의 |
"""MAC 주소에서 프레임 전달 방식 판별"""
def classify_mac(mac_str):
"""MAC 주소의 전달 방식을 판별"""
mac_bytes = bytes.fromhex(mac_str.replace(":", ""))
if mac_bytes == b"\xff\xff\xff\xff\xff\xff":
return "브로드캐스트"
elif mac_bytes[0] & 0x01: # 첫 바이트 LSB = 1
return "멀티캐스트"
else:
return "유니캐스트"
test_macs = [
"00:1A:2B:3C:4D:5E",
"FF:FF:FF:FF:FF:FF",
"01:00:5E:7F:00:01",
"33:33:00:00:00:01",
]
for mac in test_macs:
print(f"{mac} → {classify_mac(mac)}")브로드캐스트는 네트워크의 모든 장치가 해당 프레임을 처리해야 하므로 트래픽이 증가합니다. 네트워크 규모가 커질수록 브로드캐스트 트래픽이 성능에 미치는 영향도 커지는데, 이것이 뒤에서 다룰 VLAN의 등장 배경입니다.
CSMA/CD와 전이중 통신
초기 공유 매체 이더넷에서의 CSMA/CD 동작 과정입니다.
-
CS (Carrier Sense): 전송 전에 매체가 사용 중인지 감지
-
MA (Multiple Access): 여러 장치가 같은 매체에 접근 가능
-
CD (Collision Detection): 충돌 감지 시 전송 중단, 잼 신호 전송, 랜덤 시간 후 재시도
현대 스위치 기반 네트워크에서는 각 포트가 독립적인 전이중 링크이므로 CSMA/CD가 비활성화됩니다. 전이중(Full Duplex) 모드에서는 송신과 수신이 동시에 가능하여, 1Gbps 이더넷은 각 방향으로 1Gbps를 동시에 사용할 수 있습니다.
다음 절에서는 같은 네트워크 안에서 프레임이 정확히 어떻게 올바른 장치에 도달하는지, 스위치와 ARP의 동작을 살펴보겠습니다.