[Daily morning study] ARP 동작 원리와 MAC 주소 해석 과정

#daily morning study

Image


ARP란

ARP(Address Resolution Protocol)는 IP 주소를 MAC 주소로 변환하는 프로토콜이다. 네트워크 계층(L3)의 IP 주소만으로는 실제 데이터를 전송할 수 없고, 데이터링크 계층(L2)의 MAC 주소가 있어야 실제 이더넷 프레임을 만들어 전송할 수 있다. 이 둘을 연결하는 역할이 ARP다.

OSI 모델 기준으로 ARP는 L2와 L3 사이, 즉 네트워크 계층과 데이터링크 계층 경계에 위치한다.


ARP가 필요한 이유

IP 패킷을 목적지까지 전달할 때 라우터는 IP 주소를 기반으로 경로를 결정하지만, 실제 하나의 로컬 네트워크(LAN) 안에서 프레임을 보낼 때는 목적지 MAC 주소가 반드시 필요하다.

예를 들어 192.168.1.10에서 192.168.1.20으로 패킷을 보내려 할 때, 192.168.1.20의 MAC 주소를 모른다면 이더넷 프레임을 완성할 수 없다. 이때 ARP를 사용해서 IP → MAC 매핑을 알아낸다.


ARP 동작 과정

1단계: ARP Request (브로드캐스트)

송신 측은 목적지 MAC 주소를 모르는 상태에서 같은 네트워크의 모든 호스트에게 브로드캐스트 프레임을 보낸다.

이더넷 목적지 MAC: FF:FF:FF:FF:FF:FF  (브로드캐스트)
이더넷 출발지 MAC: AA:BB:CC:DD:EE:01  (자기 MAC)

ARP 내용:
  - 내 IP: 192.168.1.10
  - 내 MAC: AA:BB:CC:DD:EE:01
  - 찾는 IP: 192.168.1.20
  - 찾는 MAC: 00:00:00:00:00:00 (모름)

메시지의 의미: “192.168.1.20을 사용하는 기기야, 네 MAC 주소를 알려줘”

2단계: ARP Reply (유니캐스트)

ARP Request를 받은 모든 호스트는 자신의 IP와 비교한다. 192.168.1.20을 사용하는 호스트만 응답을 보낸다. 이 응답은 브로드캐스트가 아닌 요청자에게만 보내는 유니캐스트다.

이더넷 목적지 MAC: AA:BB:CC:DD:EE:01  (요청자 MAC)
이더넷 출발지 MAC: AA:BB:CC:DD:EE:02  (응답자 MAC)

ARP 내용:
  - 내 IP: 192.168.1.20
  - 내 MAC: AA:BB:CC:DD:EE:02

3단계: ARP 캐시 저장

응답을 받은 송신 측은 IP-MAC 매핑 정보를 ARP 캐시에 저장한다. 이후 같은 IP로 통신할 때는 ARP 요청 없이 캐시에서 바로 MAC 주소를 꺼내 쓴다.

# ARP 캐시 확인 (Linux/macOS)
arp -a

# 출력 예시
? (192.168.1.1) at aa:bb:cc:dd:ee:ff [ether] on eth0
? (192.168.1.20) at aa:bb:cc:dd:ee:02 [ether] on eth0

ARP 캐시 (ARP Cache / ARP Table)

ARP 캐시는 IP-MAC 매핑을 일시적으로 저장하는 테이블이다. 매번 ARP 요청을 보내면 네트워크에 부담이 생기므로 일정 시간 동안 결과를 캐싱한다.

항목설명
유효 시간보통 수십 초 ~ 수 분 (OS마다 다름)
만료 후다시 ARP Request를 보내 갱신
정적 항목관리자가 수동으로 등록한 항목, 만료되지 않음
동적 항목ARP로 자동 학습된 항목, TTL 있음

Gratuitous ARP

일반적인 ARP는 “누구의 MAC이 뭐냐”고 묻는 과정이지만, Gratuitous ARP는 스스로 자신의 IP-MAC 매핑을 네트워크에 알리는 ARP다. 요청에 대한 응답이 아니라 자발적으로 브로드캐스트한다.

주요 용도:

  • IP 충돌 감지: 부팅 시 자신의 IP로 Gratuitous ARP를 보내서 같은 IP를 쓰는 기기가 있으면 경고를 받는다.
  • ARP 캐시 갱신: 자신의 MAC 주소가 변경됐을 때 주변 기기들의 캐시를 갱신한다.
  • 고가용성(HA) 페일오버: Active 노드가 죽고 Standby가 IP를 이어받을 때 새 MAC 주소로 캐시를 갱신시킨다.

ARP와 라우터

같은 서브넷 내에서는 목적지 IP의 MAC을 직접 ARP로 알아낸다. 하지만 다른 서브넷으로 패킷을 보낼 때는 동작 방식이 다르다.

목적지가 외부 네트워크라면:

  1. 송신 측은 자신의 기본 게이트웨이(라우터) IP의 MAC 주소를 ARP로 조회한다.
  2. 이더넷 프레임의 목적지 MAC은 라우터의 MAC으로 설정한다.
  3. IP 패킷의 목적지 IP는 최종 목적지 그대로 유지한다.
  4. 라우터는 프레임을 받아서 IP를 보고 다음 라우터(또는 최종 목적지)로 전달한다.

이처럼 MAC 주소는 홉 단위로 바뀌지만, IP 주소는 출발지부터 목적지까지 변하지 않는다.


ARP 스푸핑 (ARP Spoofing)

ARP 프로토콜은 인증 메커니즘이 없어서 위조 ARP Reply를 보내는 공격에 취약하다.

공격 원리

공격자가 위조된 ARP Reply를 보내서 피해자의 ARP 캐시에 잘못된 IP-MAC 매핑을 심는다.

예를 들어, 게이트웨이(192.168.1.1)의 MAC 주소 대신 공격자의 MAC 주소를 피해자 캐시에 저장시키면, 피해자가 외부로 보내는 모든 트래픽이 공격자를 거쳐 나가게 된다. 이것이 중간자 공격(MITM, Man-in-the-Middle)이다.

대응 방법

방법설명
Dynamic ARP Inspection (DAI)스위치에서 ARP 패킷을 검증, 신뢰할 수 없는 포트의 ARP를 차단
정적 ARP 항목중요한 IP-MAC 매핑을 수동으로 고정
ARP 스푸핑 탐지 도구arpwatch 같은 도구로 ARP 캐시 변화를 모니터링
HTTPS/TLS트래픽이 노출되더라도 암호화로 내용 보호

ARP와 유사한 프로토콜

프로토콜역할
ARPIPv4 주소 → MAC 주소 변환
RARP (Reverse ARP)MAC 주소 → IPv4 주소 변환 (현재는 DHCP로 대체)
NDP (Neighbor Discovery Protocol)IPv6에서 ARP를 대체하는 프로토콜, ICMPv6 기반
InARP (Inverse ARP)프레임 릴레이 환경에서 DLCI → IP 변환

IPv6에서는 ARP를 사용하지 않고 NDP의 Neighbor Solicitation / Neighbor Advertisement 메시지로 같은 역할을 수행한다.


정리

  • ARP는 IP 주소(L3)를 MAC 주소(L2)로 변환하는 프로토콜이다.
  • ARP Request는 브로드캐스트, ARP Reply는 유니캐스트로 동작한다.
  • 학습한 매핑은 ARP 캐시에 저장해서 반복 요청을 줄인다.
  • 다른 서브넷으로 보낼 때는 목적지 IP가 아닌 게이트웨이의 MAC을 ARP로 조회한다.
  • ARP 스푸핑 공격에 취약하므로 스위치 레벨의 DAI 같은 보호 장치가 필요하다.
  • IPv6에서는 ARP 대신 NDP를 사용한다.