ARP(Address Resolution Protocol)의 종류는 여러 가지가 있다.
- 일반 ARP
- RARP
- Proxy ARP
- Inverse ARP
- Gratuitous ARP
여기서는 Gratuitous ARP에 대해서 알아본다. Gratuitous ARP는 우리나라 말로 하면 공짜 ARP이다.
일반 ARP는 Ethernet 구간에서 IP주소(3계층 주소)를 가지고 MAC(2계층 주소)를 알아오는 일이 주 목적이다. 그러나 Gratuitous ARP는 자신이 사용하는 IP주소와 MAC을 담아서 해당 IP주소를 사용하는 장비가 있는지 확인하기 위한 기능을 가지고 있다.
Gratuitous ARP가 사용되는 목적은 여러 가지가 있지만 주로 다음과 같은 경우에 사용한다.
- IP 충돌 감지
- 게이트웨이 이중화에서 Active라우터가 변경되었을 경우
- 사용중에 IP정보를 수집하는 경우
Gratuitous ARP를 확인하기 위해서 다음과 같이 LAB을 구성하고 Packet을 확인해보자.

XP1과 XP2의 IP는 각각 10.10.10.1과 10.10.10.2로 설정하고 우선 통신이 되는지 확인해본다.
XP1에서 XP2로 ping을 시도해보면 다음과 같이 통신이 된다.

그리고 난 후 XP1의 IP주소를 XP2의 IP주소인 10.10.10.2로 변경해본다. 주소를 변경하고 확인을 누르자 마자 다음과 같은 메시지가 표시된다. 같은 네트워크 대역에서 10.10.10.2 주소를 사용하고 있는 장비가 있다는 말이다.

충동이 났을 때 Packet을 캡쳐해 보면 다음과 같이 Gratuitous ARP가 보인다.

IP를 처음 설정하는 경우에는 설정한 IP를 같은 네트워크에서 다른 장비가 사용하고 있는지 검사하기 위해서 Gratuitous ARP Request를 Broadcast한다. 이때 Sender와 Target의 IP주소를 모두 10.10.10.2로 설정하고 Sender 의 MAC주소에 자신의 MAC을 입력해서 보낸다.

만약 같은 IP를 사용하고 있는 장비가 없어서 응답이 돌아오지 않는다면 해당 IP주소를 사용할 수 있고 같은 IP를 사용하는 장비가 있다면 Gratuitous ARP Reply로 응답을 해준다. 이런 응답을 받을 경우에는 IP를 나중에 설정한 XP1은 TCP/IP 바인딩에 실패하고 IP설정이 되지 않는다.

그런데 여기서 하나의 문제점이 있다. 운영체제 내에 있는 ARP Cache는 자신에게 들어온 ARP면 Request이든 Reply이든 그 안에 있는 모든 정보를 Cache안에 저장한다는 것이다. 위처럼 기존에 사용하고 있는 10.10.10.2의 MAC주소를 당연히 XP2의 MAC주소가 네트워크 상의 다른 장비의 ARP Cache에 저장이 되어 있을 것이다. 그런데 XP1이 10.10.10.2로 IP를 설정하고 Gratuitous ARP Request를 Broadcast하면서 같은 네트워크 상의 모든 장비의 ARP Cache정보가 바뀌어 잘못된 ARP Table을 가질 수 있다. 이를 해결하기 위해서 원래 10.10.10.2 주소를 가지고 있던 XP2가 마지막으로 Gratuitous ARP Request를 한번 더 Broadcast하면서 이런 문제를 해결한다.

그리고 나중에 IP를 설정한 XP1은 IP가 이미 사용 중이기 때문에 IP가 해제되어 사용하지 못하게 된다. XP2의 IP주소를 확인해보면 0.0.0.0으로 IP가 할당 되지 않았음을 확인할 수 있다.