한양과학기술고등학교

에듀테크 프로젝트 대시보드

ARP (주소 결정 프로토콜)

ARP — "그 IP, MAC 주소가 뭐야?"

같은 네트워크 안에서 컴퓨터는 IP 주소만으로는 프레임을 못 보낸다. 실제로 랜선/와이파이 위를 흐르는 건 MAC 주소가 붙은 프레임이기 때문. ARP(Address Resolution Protocol)는 "이 IP 쓰는 사람, 당신 MAC 주소 좀 알려줘!"라고 온 네트워크에 소리치는 프로토콜이다.

한 줄 요약: IP는 "어느 동네 몇 호"(논리 주소), MAC은 "그 기기의 지문"(물리 주소). ARP는 같은 랜(LAN) 안에서 IP → MAC 을 알아내는 브로드캐스트 질문 + 유니캐스트 대답이다.

1. 왜 IP만으로는 부족할까

웹 브라우저는 142.250.x.x 같은 IP로 통신한다. 하지만 그 패킷이 우리 집 공유기까지 가려면, 먼저 2계층(데이터링크) 프레임에 담겨야 한다. 프레임의 목적지 칸에는 IP가 아니라 48비트 MAC 주소(a4:83:e7:2b:19:04)가 들어간다.

어느 쪽이든 "IP는 아는데 MAC 을 모르는" 순간이 온다. 이때 등장하는 게 ARP다.

2. 직접 해보기 — 브로드캐스트 질문, 유니캐스트 대답

스위치로 연결된 작은 사무실 네트워크다. PC-A 가 다른 컴퓨터에게 데이터를 보내려 한다. A 의 ARP 캐시가 비어 있으면 먼저 ARP 질문을 모두에게 뿌린다. 해당 IP 주인만 대답하고, 나머지는 프레임을 조용히 버린다.

SWITCH GW (라우터) 192.168.0.1 ff:ee:00:00:00:01 PC-A 192.168.0.10 aa:aa:aa:00:00:0a PC-B 192.168.0.11 bb:bb:bb:00:00:0b PC-C 192.168.0.12 cc:cc:cc:00:00:0c PC-D 192.168.0.13 dd:dd:dd:00:00:0d
ARP 요청 (브로드캐스트) ARP 응답 (유니캐스트) 위조된 응답

PC-A 의 ARP 캐시

IP 주소MAC 주소상태
(비어 있음)

실제로는 arp -a (Windows/macOS) 또는 ip neigh (Linux) 로 볼 수 있다. 항목은 보통 수십 초~수 분 뒤 만료되어 다시 물어본다.

버튼을 눌러 ARP 동작을 관찰하세요.

3. ARP 패킷 안에는 뭐가 들었나

ARP 메시지는 아주 단순하다. 핵심은 4개의 주소 칸이다.

필드ARP 요청 (A가 C를 찾음)ARP 응답 (C가 답함)
Opcode1 (request)2 (reply)
Sender MACaa:aa:aa:00:00:0acc:cc:cc:00:00:0c
Sender IP192.168.0.10192.168.0.12
Target MAC00:00:00:00:00:00 (모름)aa:aa:aa:00:00:0a
Target IP192.168.0.12192.168.0.10
이더넷 목적지ff:ff:ff:ff:ff:ff (전체)aa:aa:aa:00:00:0a (1:1)
응답을 받은 A 는 C 의 MAC 을 캐시에 저장한다. 동시에, 요청을 받아본 다른 컴퓨터들은 "A(192.168.0.10) = aa:aa:aa:00:00:0a" 라는 정보를 얻어 자기 캐시에 갱신하기도 한다. 그래서 처음 통신할 때만 ARP 가 튀고, 그 뒤 대화는 조용하다.

4. 의사코드로 보는 전송 결정

def send_ip_packet(dst_ip, data):
    if same_subnet(dst_ip, my_ip, my_mask):
        next_hop = dst_ip                 # 같은 랜: 상대에게 직접
    else:
        next_hop = default_gateway        # 다른 망: 공유기에게 맡김

    if next_hop not in arp_cache:
        broadcast(ArpRequest(target_ip=next_hop))   # ff:ff:ff:ff:ff:ff
        reply = wait_for_arp_reply(next_hop)
        arp_cache[next_hop] = reply.sender_mac      # 학습·저장

    dst_mac = arp_cache[next_hop]
    send_frame(dst_mac, data)             # 이제 2계층 프레임 완성

5. ARP 스푸핑 — 신뢰가 만든 구멍

ARP 에는 인증이 없다. "내가 192.168.0.1(게이트웨이)이고 MAC 은 나야"라고 아무나 응답을 보낼 수 있고, 받은 쪽은 그냥 캐시를 덮어쓴다. 심지어 묻지도 않았는데 보내는 gratuitous ARP 도 정상 취급된다.

위 데모에서 「ARP 스푸핑 켜기」 를 누르면 PC-D 가 공격자가 되어, A 가 게이트웨이를 찾을 때 자기 MAC 을 게이트웨이 MAC 인 척 응답한다. 그 뒤 A 의 인터넷 트래픽은 전부 D 를 거쳐 흐른다(중간자 공격, MITM).

공격이 가능한 이유

  • 응답에 서명·검증이 없음
  • 요청 없이 온 응답도 수용
  • 나중에 온 응답이 앞의 것을 덮어씀

방어 방법

  • 스위치의 Dynamic ARP Inspection, DHCP Snooping
  • 중요 장비는 정적 ARP 항목 고정
  • 종단 암호화(HTTPS·VPN)로 가로채도 못 읽게
  • arpwatch 등으로 MAC 변경 감지

6. 알아두면 좋은 것들