[정리] ARP의 기능과 패킷 구조

데이터의 송수신 시 호스트의 IP 주소를 아는것만으로는 MAC 주소를 이용해 통신하는 네트워크 계층에서 프레임을 전달하는 것은 불가능하다. 


때문에 TCP/IP 통신에서 하드웨어 주소 즉, MAC 주소를 알기위해 ARP(Address Resolution Protocol)를 사용해 IP와 MAC 주소간의 동적 매핑을 제공한다. 동적 매핑이라 표현한 이유는 매핑이 자동으로 이뤄지며 변경이 발생하여도 시스템 관리자에 의해 재구성을 요하지 않은 채 변경이 적용되기 때문이다. ARP와 반대로 MAC 주소와 IP 주소간의 매핑을 제공하는 RARP (Rev-

erse Address Resolution Protocol)는 흔히 사용되지 않는다.


ARP는 IPv4에서만 사용되며 IPv6의 경우 ICMPv6에 포함되있는 NDP(Neighbor Discovery Protocol)를 사용한다. (이는 추후 포스팅 예정) 또한 ARP는 동일 브로드캐스트 도메인 내에서 브로드캐스트를 이용해 ARP Request을 송신한다


IANA에서 관리하고 할당하는 IP 주소와는 달리 MAC 주소는 NIC 제조업체에서 정해진 규칙에 의해 임의로 만들어진 주소를 장치 내부의 영구메모리에 저장된다. 48bit로 구성된 MAC주소 중 앞의 24bit는 제조업체의 식별 정보이며 나머지 24bit는 NIC의 시리얼 넘버이다. 

[그림 1] MAC 주소


송신자 A 10.0.0.1 수신자 B 10.0.0.2를 예로 들어 ARP 진행 과정을 설명하겠다. (http://www.example.com 으로 요청 시 실제 통신은 DNS 질의를 통해 알게된 10.0.0.1과 같은 32bit형식의 주소를 이용하여 진행하게 된다. 세부사항은 후에 포스팅 하겠다.) 


1. 송신자 A는 B의 MAC 주소를 알기 위해 ARP Request 패킷을 브로드캐스팅 한다. 이 요청은 동일 브로드캐스트 도메인 내에 존재하는 모든 호스트가 수신한다. (IPv4 또는 IPv6 프로토콜을 아예 운영하지 않는 시스템들도 포함하지만 VLAN이 지원되는 상황에서 다른 VLAN상의 시스템들은 포함하지 않는다.)


2. ARP Request 안에 지정된 IP주소를 가진 호스트 B만이 자신의 MAC 주소를 입력한 ARP Reply 패킷을 송신자 A에게 유니캐스트로 응답한다. 이때, 수신자 B는 송신자 A의 IP와 MAC주소를 알게되며 나중에 사용하기 위해 ARP 테이블에 기록한다. 이는 송신자가 곧 패킷을 전송할 것이며, 그 패킷을 수신한 수신자 B의 시스템또한 A에게 응답을 전송할 것이라는 가정하에 기초한 것이다. 수신자 B 이외에 다른 호스트는 ARP Request 패킷을 무시한다. 


3. ARP Reply를 수신한 A는 B에게 데이터그램을 전송 할 수 있다.


이렇게 IP에 대응되는 MAC 주소를 알게되면 곧바로 ARP 테이블에 저장하여 추후 통신에 이용하게 된다. ARP 테이블의 타임아웃 시간은 RFC1122에선 20분으로 규정되어 있지만 실제로는 해당 테이블이 참조될 때마다 타임아웃이 갱신되는 형식으로 구성되어 있다. ARP 패킷의 구조와 역할은 아래와 같다.


[그림 2] ARP 구조


Hardware Type : 하드웨어 주소의(MAC) 유형을 나타내며 이더넷 통신 시 값은 항상 1로 설정된다. 


Protocol Type : 매핑대상인 프로토콜 주소의 유형을 나타내며 IPv4의 경우 0x0800으로 설정된다.


Hardware Address Length : 하드웨어 주소의(MAC) 길이를 byte로 나타낸다. 이더넷 상에서 6으로 설정된다.


Protocol Address Length : 프로토콜 주소의 길이를 byte로 나타낸다. IPv4의 경우 4로 설정된다.


Operation Code : ARP의 구체적인 동작을 나타낸다. 


[표 1] Operation Code 값

동작

1

ARP Request

2

ARP Reply

3

RARP Request

4

RARP Reply


Source Hardware Address : 송신자의 MAC 주소


Source Protocol Address : 송신자의 IP 주소


Destination Hardware Address : 수신자의 MAC 주소, ARP Request 동작 시 0으로 설정된다. (이더넷 헤더의 Dst 주소가 ff:ff:ff:ff:ff:ff로 설정되어 브로드 캐스팅된다.) 


Destination Protocol Address : 수신자의 IP 주소


[그림 3] ARP 패킷 캡쳐 내용


[그림 3]은 ARP Request 패킷을 캡쳐한 내용으로 [그림 2]의 ARP 구조에 나온 항목들이 모두 표기되어 있음을 볼 수 있다. 패킷의 내용을 해석하면 프로토콜이 IP(0x0800)이고 이더넷상에서(1) 통신중인 송신자가 Operation code를 1로 설정함으로써 ARP Request 패킷을 송신하는 것을 알 수 있다.


[그림 4] Gratuitous ARP


패킷 캡처를 진행하다 보면 ARP 패킷 중 위와 같이 Gratuitous ARP 라는 패킷을 볼 수 있는데 해당 패킷의 내용을 확인해보면 [그림 5]처럼 송수신지의 IP 주소가 동일한 것을 볼 수 있다. 


[그림 5] Gratuitous ARP 값


Gratuitous ARP는 보통 PC의 부팅시에 NIC가 켜지면서 일어난다. Gratuitous ARP 송신 호스트는 응답을 받을것을 기대하지 않지만 응답을 수신한 경우 동일 브로드캐스트 도메인 안의 시스템이 잘못 구성되었음을 의미한다. 또한, MAC 주소가 변경된 호스트가 Gratuitous ARP 패킷을 송신함으로써 이를 수신한 호스트들의(ARP Request는 브로드캐스팅 된다는 점을 기억하자) ARP 테이블에 기록되 있던 송신자의 예전 MAC주소를 새로 갱신시키는 역할도 한다.