> [!abstract] Introduction
> 이번 글에서는 MAC 주소에 대해 알아봅니다.
MAC*Media Access Control* 주소는 데이터 링크 계층(OSI 7계층에서 2계층)에서 통신을 위해 네트워크 인터페이스(NIC)에 할당된 물리적인 고유 식별 주소다. 네트워크에 접속하는 모든 장비는 MAC 주소를 가지고 있으며, 이 주소를 이용해 서로 통신하게 된다. 이 주소는 유실이나 손상, 혹은 사용자가 마음대로 변경하는 것을 막기 위해 ROM 형태로 고정되어 출하되는 것이 일반적이라 이 주소를 BIA*Burned-In-Address*라고 부르기도 한다.
# MAC 주소 체계
MAC 주소는 48비트이며 16진수 12개로 표현하는 것이 일반적이다. 그 중 앞쪽의 24비트는 OUI*Organizational Unique Identifier*라 부르는데, 이 값은 IEEE가 네트워크 장비 제조업체에 할당하는 제조사 코드*Vendor Code*이다. 나머지 24비트는 UAA*Universally Administered Address*라 부르며, 각 네트워크 장비 제조업체는 UAA 값을 자체적으로 할당하여 네트워크에서 각 장비를 구분할 수 있게 해준다.[^mac-address-uniqueness]
![[MacAddress.png]]
그래서 모든 네트워크 장비의 MAC 주소는 제조업체가 할당받은 OUI에 UAA를 붙이면서 완성된다. 이 MAC 주소는 네트워크 장비 제조업체가 하드웨어에 ROM 형태로 고정시킨 뒤 장비를 출하하기 때문에 보통 장비마다 하나씩 가지게 된다.[^nic-multiple-addresses]
# MAC 주소의 동작 방식
이제 MAC 주소가 네트워크 통신 과정에 구체적으로 어떤 역할을 하고 있는지 알아보자.
## 내 주소가 아니면 버린다
MAC 주소는 NIC*Network Interface Card*의 하드웨어 메모리에 할당되어 있어서 모든 NIC는 자신만의 MAC 주소를 지닌다. 전기 신호가 들어오면 2계층에서 패킷*Packet*으로 변환하여 내용을 구분한 후 도착지 MAC 주소를 확인한다. 만약 도착지 MAC 주소가 자신이 가지고 있는 MAC 주소와 다르면 그 패킷을 폐기하고, 패킷의 목적지 주소가 자기 자신이거나 같은 그룹 주소이면 처리해야 할 주소로 인지해 패킷 정보를 상위 계층으로 넘겨준다.
![[ProtocolProcessingAtABridge.png]]
이게 어떻게 가능한 것일까? 아래 그림은 2계층에서 사용하는 패킷인 이더넷 프레임*Ethernet Frame*의 구조를 나타낸 것이다. NIC는 전기 신호를 데이터 형태로 변환하는데, 그 결과 이렇게 목적지 MAC 주소와 출발지 MAC 주소를 데이터로 확인할 수 있는 것이다.
![[EthernetFrameFormat.png]]
## 그럼 그룹 주소는 어떻게 받는 거지?
목적지 MAC 주소가 같은 그룹의 주소면 패킷의 목적지 주소가 자기 자신이 아니어도 처리해야 할 주소로 인지한다. 그런데 MAC 주소 자체는 그룹에 대한 별다른 처리를 하지 않는 것처럼 보이는데 어떻게 같은 그룹인지 아닌지 판단할 수 있는 걸까?
## MAC 주소와 IP 주소의 관계
대부분의 네트워크 통신에서 기본이 되는 주소는 하드웨어 주소인 MAC 주소와 IP 주소다. 분명 앞서 확인한 이더넷 프레임에는 출발지와 도착지의 MAC 주소가 담겨 있다. 하지만 실제 통신은 IP 주소 기반으로 일어나고 상대방의 MAC 주소는 어떤 과정을 통해 자동으로 알아내게 된다.
![[ConnectionInfoInNetwork.png]]
그렇다면 MAC 주소와 IP 주소 사이에 어떤 연관성이 있어서 자동으로 변환 가능한 것일까? 그렇지 않다. MAC 주소와 IP 주소 사이에는 별다른 연관성이 없다. MAC 주소에 IP 주소에 대한 정보가 따로 있는 것도 아니고, IP 주소에 MAC 주소에 대한 정보가 따로 있는 것도 아니다. 그런 두가지 주소 사이를 연결하는 것은 ARP*Address Resolution Protocol*라는 통신 체계다.
### ARP를 통한 MAC 주소 알아내기
상대방의 MAC 주소를 알기 위해서는 ARP 브로드캐스트*Broadcast*를 통해 네트워크 전체에 상대방의 MAC 주소를 물어봐야 한다. 네트워크 전체에 MAC 주소를 물어봤으니 어딘가는 ARP를 사용해 자신의 MAC 주소를 알려줄 것이다. 그러면 출발지와 목적지 둘 다 상대방의 MAC 주소를 학습하고 이후 패킷이 정상적으로 포장되어 상대방에게 전달될 수 있다. ARP에 대한 본격적인 내용은 [[Address Resolution Protocol|별도의 글]]로 다룰 예정이다.
![[ARPPacketFormat.png]]
패킷은 기본적으로 큰 데이터를 자른 것이다. 그런 패킷이 전송될 때마다 ARP 브로드캐스트를 수행하면 어차피 같은 곳으로 데이터를 여러 번 보낼 텐데 그 목적지를 계속 물어보는 셈이라 효율성이 떨어진다. 그래서 ARP를 지원하는 네트워크 장비의 메모리에는 ARP 테이블이 존재해 MAC 주소와 IP 주소의 관계를 저장해두었다가 다시 사용한다. ARP 테이블에 상대방의 MAC 주소가 저장되어 있으면 이더넷 프레임에서 도착지 MAC 주소에 해당하는 영역을 완성해 정상적인 패킷을 보낼 수 있게 된다.
---
# 출처
- _IT 엔지니어를 위한 네트워크 입문_ (2020). (주)도서출판길벗.
- https://roothyo.tistory.com/3
[^mac-address-uniqueness]: 이때 실수로 혹은 의도적으로 MAC 주소가 중복될 수 있는데, 이는 MAC 주소가 동일 네트워크에서만 중복되지 않으면 동작하는 데 문제가 없기 때문이다.
[^nic-multiple-addresses]: 이 또한 반드시 그런 것은 아니다. MAC 주소는 네트워크 장비가 아니라 NIC에 종속되기 때문에 멀티레이어 스위치, 라우터와 같이 NIC를 여러 개 가지고 있는 복잡한 네트워크 장비에는 여러 개의 MAC 주소가 할당된다.