[이해하기] ARP (Address Resolution Protocol) 프로토콜

ARP (Address Resolution Protocol) 프로토콜 이란, 소프트웨어적으로 할당된 논리 주소인 IP 주소를 (L3, 네트워크 계층) 실제적인 물리 주소인 MAC 주소 (Media Access Control / L2, 데이터링크 계층) 로 바꾸어주는 역할을 하는 ‘주소 해석 프로토콜’ 을 의미합니다. (** 참고 : 반대로 MAC 주소를 가지고 IP 주소를 알아내는 프로토콜은 RARP 프로토콜이라고 합니다. 최근에는 거의 사용하지 않는 추세입니다.)

두 단말 (예> PC 와 PC, PC 와 네트워크 장비 등) 간 통신을 할 때에는 기본적으로 각각의 LAN 카드에 할당되어 있는 고유한 실질적인 물리 주소 (MAC 주소) 를 통해 결국 데이터가 전달되게 됩니다. 그 이유는 MAC 주소가 시리얼 번호와 같이 전 세계에서 유일한 실제 목적지의 주소 이며, 이를 바탕으로 OSI 7계층 또는 TCP/IP 4계층의 표준화된 모델에 따라 그렇게 통신을 하기로 약속했기 때문입니다. (** 네트워크는 기본적으로 OSI 7계층 & TCP/IP 4계층 의 표준화된 모델에 따라 통신을 합니다. 이에 대해 자세히 알아보려면 : 클릭)


1. ARP 프로토콜 동작 순서

ARP 프로토콜이 동작하는 경우는 크게 통신하고자 하는 두 단말이 같은 네트워크에 있을 때와 다른 네트워크에 있을 때로 나눌 수 있습니다.

– 같은 네트워크에 있을 때
같은 네트워크 내에 있는 단말 들의 MAC 주소는 중계 장치 (예> 허브, 스위치 등) 가 MAC 주소 테이블 정보를 저장하고 관리하고 있으므로 내부에서 단말들이 MAC 주소를 가지고 통신을 할 수 있게 됩니다.

1) A 가 B 와 통신하기 위해 같은 네트워크 대역에 ARP 요청을 브로드캐스트 (Broadcast) 방식 (A 단말이 전송한 데이터가 네트워크에 연결된 모든 단말에 전송) 으로 B 의 10.0.0.2/24 IP 주소 를 가진 단말이 있는지 물어봅니다. (IP 주소와 MAC 주소를 비교해서 확인 해달라는 요청) A 는 상대방 B 의 MAC 주소를 모르기 때문에 MAC 주소는 일단 기본 게이트웨이 (FF:FF:FF:FF:FF:FF) 로 기록합니다.
2) 네트워크 스위치 장비는 A 의 MAC 주소 (00:11:BB:00:00:AA) 를 자신의 MAC 주소 테이블에 저장합니다. (저장 되어 있지 않은 경우)
3-1) 네트워크 스위치 장비가 ARP 요청을 받고나서 자신이 가지고 있는 MAC 테이블에 B 의 IP 주소 10.0.0.2/24 에 대한 MAC 주소 (00:11:BB:00:00:BB) 가 저장되어 있다면, A 에게 B 의 IP 주소 10.0.0.2/24 의 MAC 주소 (00:11:BB:00:00:BB) 를 알려 줍니다
3-2) 네트워크 스위치 장비가 ARP 요청을 받고나서 자신이 가지고 있는 MAC 테이블에 B 의 IP 주소 10.0.0.2/24 의 MAC 주소 (00:11:BB:00:00:BB) 가 저장되어 있지 않다면, 반대편의 B 까지 ARP 요청이 전달됩니다. 이 후 B 는 ARP 요청을 받은 다음 자신의 IP 주소가 목적지에 기록되어 있음을 확인한 후 자신의 MAC 주소 (00:11:BB:00:00:BB) 를 알려주는 응답을 합니다. 이 후 네트워크 스위치는 B 의 MAC 주소 (00:11:BB:00:00:BB) 를 MAC 주소 테이블에 저장합니다.
4) A 는 마침내 전달 받은 B 의 MAC 주소 (00:11:BB:00:00:BB) 를 확인하고 B 와 통신을 시작합니다.

– 같은 네트워크에 없을 때
같은 네트워크에 있는 중계 장비의 MAC 주소 테이블에 존재하지 않는 다른 네트워크 대역에 있는 단말과 통신을 해야 하는 경우, IP 주소를 이용하여 통신하게 되므로 ARP 프로토콜을 통해 IP 주소와 MAC 주소 간 변환을 통해 통신을 하게 됩니다.

1) A 가 B 와 통신하기 위해 같은 네트워크 대역에 ARP 요청을 브로드캐스트 (Broadcast) 방식 으로 B 의 20.0.0.1/24 IP 주소 를 가진 단말이 있는지 물어봅니다. (IP 주소와 MAC 주소를 비교해서 확인 해달라는 요청) A 는 상대방 B 의 MAC 주소를 모르기 때문에 MAC 주소는 일단 기본 게이트웨이 (FF:FF:FF:FF:FF:FF) 로 기록합니다.
2) 라우터는 해당 ARP 요청을 받고 (목적지가 게이트웨이의 MAC 주소이므로) 목적지 B 의 IP 주소가 같은 네트워크에 있지 않기 때문에 같은 네트워크 대역대에 있는 라우터 자신의 인터페이스 MAC 주소 (00:00:00:00:RR:00) 로 응답해 줍니다.
3) A 는 B 와 통신하기 위해 다시 라우터에게 B 의 목적지 IP 주소 20.0.0.1/24 와 같은 네트워크 대역의 라우터 인터페이스 MAC 주소 (00:00:00:00:RR:00) 를 목적지로 ARP 요청을 보냅니다.
4) 라우터는 해당 네트워크 대역까지 패킷을 보냅니다. 단, 라우터도 목적지 B 의 MAC 주소를 모르므로 해당 네트워크 대역대에 Broadcast 메세지로 20.0.0.1/24 IP 주소를 가진 단말이 있는지 물어봅니다.
5) B 단말이 자신의 IP 주소가 목적지로 되어 있는 패킷을 보고 라우터에게 자신의 MAC 주소 (00:11:BB:00:00:BB) 를 포함하여 응답합니다.
6) 이 후 라우터를 통해 A 와 B 가 통신을 시작합니다. (MAC <-> IP <-> MAC)

(** MAC 주소를 어렵게 얻어왔으므로, 각 단말은 방금 통신한 IP 주소의 MAC 주소를 일정 시간 동안 보관하여 활용합니다. 이를 ARP 캐시 (Cache) 라고 합니다.)


2. ARP 프로토콜 패킷 분석

ARP 패킷은 기본적으로 같은 네트워크 내에서만 동작하는 프로토콜 이므로 멀리있는 다른 네트워크와 통신하기 위한 IP 헤더가 필요 없습니다. 다른 네트워크 통신하는 경우에도 결국 같은 네트워크에 있는 기본 게이트웨이로 목적지를 찾기 때문입니다. 따라서 다른 네트워크로 넘어갈 필요가 없는 프로토콜 입니다.

# 헤더 영역
– Destination address (6 bytes) : ARP 요청 (Broadcast 또는 Unicast), ARP 응답 (Unicast 또는 Broadcast)
– Type : 0x0806 (ARP 의 타입 정보)
# ARP 패킷 영역
– Hardware type : 사용 중인 네트워크 하드웨어를 정의. Ethernet (10MB) 환경의 경우 0x0001 으로 세팅
– Protocol type : 프로토콜의 유형을 정의. IPv4 의 경우 0x0800 세팅
– Hardware address length : MAC 주소의 길이를 정의, Ethernet 환경의 경우 6 세팅
– Protocol address length : 프로토콜의 길이를 정의, IPv4 의 경우 4 세팅
– Operation code : ARP 패킷의 유형을 정의. ARP 요청의 경우 1, ARP 응답의 경우 2 세팅 (RARP 요청은 3, RARP 응답은 4)
– Source hardware address : 발신자의 MAC 주소 세팅
– Source protocol address : 발신자 IP 주소 세팅
– Target hardware address : 목적지 MAC 주소 (그러나 ARP 요청의 경우에는 알 수 없으며 기본 게이트웨이 주소로 세팅)
– Target protocol address : 목적지 IP 주소 세팅

아울러 ARP 프로토콜이 IP 주소를 기반으로 MAC 주소를 알아오기 때문에 3계층이라는 논란도 있습니다. 그러나 기술 표준 문서 RFC 6747 (https://tools.ietf.org/html/rfc6747) 에 따르면 ARP 프로토콜은 2계층이라고 명시되어 있습니다.

| ARP 프로토콜에 대한 RFC 6747 문서 중 L2 를 명시한 일부 내용



#Steven

답글 남기기