네트워크 용어 사전
링크 계층주소 결정 프로토콜 · ARP 테이블

ARP

같은 세그먼트에서 IP 주소로 MAC 주소를 알아내는 프로토콜.

IP 주소는 아는데 MAC 주소를 모를 때 물어보는 프로토콜.

  • 호스트 A 가 192.168.1.20 에 보내려 한다

  • ① A: "192.168.1.20 인 사람 누구? MAC 알려줘" (브로드캐스트)

  • ② B: "나야. 내 MAC 은 aa:bb:cc:..." (유니캐스트 응답)

  • ③ A 가 ARP 테이블에 캐싱하고 프레임을 보낸다

왜 필요한가 — 계층이 다르다

  • IP 주소 — 논리 주소. 어느 네트워크인지를 나타낸다 (3계층)

  • MAC 주소 — 물리 주소. 실제로 프레임을 받을 장치를 지목한다 (2계층)

  • 최종 목적지가 멀리 있어도, 당장 프레임을 넘길 '다음 장치' 의 MAC 이 필요하다

목적지가 다른 서브넷이면

호스트는 목적지가 같은 서브넷인지 먼저 판정한다 (마스크로 AND)

  • 같다 — → 목적지 IP 로 ARP → 그 MAC 으로 직접 전송 다르다 → 게이트웨이 IP 로 ARP → 게이트웨이 MAC 으로 전송

    • (IP 헤더의 목적지는 최종 목적지 그대로, MAC 만 게이트웨이)

이 때문에 게이트웨이가 다른 서브넷에 있으면 ARP를 보낼 수 없어 외부 통신이 전면 불가해진다.

ARP 테이블

arp -a          # 캐시 확인
ip neigh        # 리눅스

항목은 일정 시간 후 만료된다 (보통 수십 초~수 분)
→ MAC 이 바뀌어도(장비 교체·페일오버) 결국 갱신된다

ARP 스푸핑

ARP 에는 인증이 없다 — 응답을 위조하면 트래픽을 가로챌 수 있다 "192.168.1.1 은 내 MAC 이야" 라고 거짓 응답 → 게이트웨이 행세

대응: 정적 ARP 항목, 스위치의 Dynamic ARP Inspection, 암호화(TLS)

면접 함정

  • "ARP는 라우터를 넘어간다" → 브로드캐스트라 같은 세그먼트 안에서만이다.
  • "목적지가 멀면 목적지 MAC을 ARP" → 게이트웨이 MAC을 구한다.

Gratuitous ARP

묻지도 않았는데 스스로 보내는 ARP

  • "192.168.1.1 은 내 MAC 이야" 를 브로드캐스트

정상 용도

  • IP 충돌 감지 (같은 IP 를 쓰는 장비가 있는지)
  • 페일오버 시 새 장비가 트래픽을 넘겨받는다는 통지
    • (VRRP·keepalived 가 이걸 쓴다)

악용하면 ARP 스푸핑이 된다

왜 페일오버에 필요한가

액티브 장비가 죽고 스탠바이가 같은 가상 IP 를 이어받아도, 주변 장비의 ARP 캐시에는 여전히 옛 MAC 이 남아 있다

  • 트래픽이 죽은 장비로 계속 간다

Gratuitous ARP 를 보내 캐시를 강제로 갱신시킨다

  • 이걸 안 보내면 캐시 만료(수십 초~수 분) 까지 장애가 지속된다

진단

ip neigh                    # ARP 캐시
ip neigh flush all          # 캐시 비우기 (문제 재현·검증용)
tcpdump -i eth0 arp         # ARP 패킷 관찰

incomplete 상태가 보이면 상대가 응답하지 않는 것이다

  • 상대가 꺼져 있거나, 다른 서브넷이거나, 방화벽이 막고 있다

IPv6에는 ARP가 없다

NDP(Neighbor Discovery Protocol) 가 대신한다 브로드캐스트가 아니라 '요청된 노드 멀티캐스트' 를 써서 관심 없는 호스트는 인터럽트조차 받지 않는다

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 링크 계층 — 이더넷·MAC·스위치·ARP