Gratuitous ARP

오늘은 Gratuitous ARP에 대해 알아보도록 하자.

Gratuitous ARP는 줄여서 그냥 GARP 라고 부른다.

우선 gratuitous 의 사전적인 의미를 찾오보면 '불필요한', '쓸모없는' 이란 뜻이다.

과연 GARP는 불필요하고 쓸모없는 프로토콜일까? 

절대 그렇지 않다!!!

 

일반 ARP는 Request를 전송하고, Response를 기다리는 방식이지만 GARP는 Response가 없으며, GARP가 사용되는 사례는 아래와 같다.

1. IP 설정시 동일한 네트웍에 중복된 IP가 있는지 확인

2. 이중화 절체시 인근 스위치 및 Host 들이 경로를 절체시킬 수 있도록 자신의 MAC 주소를 알려줌

 

먼저 첫번째 예를 확인해보자.

테스트는 윈도우에서 IP를 세팅하던, 라우터 인터페이스에서 IP를 세팅하던 동일하다.

IP를 입력하는 순간 동일한 IP를 사용하는지 체크하기 위해 GARP가 Broadcast 된다. 

 

위의 그림은 라우터 인터페이스의 IP를 1.1.12.1로 설정한 후 no shutdown 한 직후 발생한 GARP의 패킷을 잡아보았다.

패킷을 보면 Sender IP와 Target IP가 동일하다. 동일 네트웍에 있는 모든 노드들은 이 패킷을 수신하여 자신의 IP와 비교후 다르면 무시하고, 같으면 GARP를 Broadcast 하여 중복되었음을 알려준다.

 

아래 그림은 중복된 IP 가 존재할 경우 발생한 GARP 패킷이다.

 

그리고 라우터에서는 아래 화면과 같이 Duplicate address 로그가 계속해서 발생한다.

만약 윈도우 OS라면 중복된 IP가 존재한다는 창이 팝업될 것이다. 

 

여기서 한가지 생각해볼 부분은 IP가 중복되어 발생하는 GARP도 Broadcast 방식이라는 점이다.

다시말해 Host A가 1.1.1.1 이라는 IP를 기존에 사용중이였는데 Host B에서 IP를 1.1.1.1로 세팅하면

Host B에서 먼저 중복된 IP를 검색하는 GARP를 Broadcast 하고, Host A에서는 중복이 발생했다는 의미로

GARP를 다시 Broadcast 한다.

두번째 발생하는 GARP가 Unicast를 사용하는게 아니라 굳이 Broadcast 하는 이유는 왜일까?

이는 동일 네트웍 상의 다른 모든 노드들의 ARP 테이블을 정상적으로 다시 Refresh 시켜주기 위함이다.

처음 Host B에서 Host A로 GARP를 Broadcast 하면 이를 수신한 모든 노드들은 자신의 ARP 테이블에 해당 IP의

MAC 주소는 Host B의 MAC 주소로 등록시켜 버린다. 이런 문제점을 보완하기 위해 IP 중복이 발생한 경우에도

GARP는 Broadcast로 모든 노드들에게 전송시켜줘야 한다.

 

두번째 예를 확인해 보자.

아래 그림과 같이 HSRP 로 이중화 되어있는 구성에서 평상시 R1이 Active, R2가 Standby로 동작할 때

스위치의 MAC 테이블을 확인해보면 목적지 0000.0c07.ac01 에 대해서는 F0/1로 포워딩 하도록 저장되어 잇다.

이후 R1에서 R2로 Active가 절체되는 순간 R2는 GARP를 Broadcast 한다. 

GARP를 수신한 스위치에서는 목적지 0000.0c07.ac01 주소에 대한 포워딩 인터페이스를 F0/1에서 F0/2로 변경한다.

 

아래는 Active 절체시 R2에서 발생한 GARP 패킷을 캡쳐한 화면이다.

 

참고로 이중화 절체시 발생하는 GARP는 꼭 네트웍 장비만 발생시키는 것은 아니다. 서버 장비에서도 OS 설정에 따라

발생 가능하다. 실제로 내가 관리하는 사이트에 이중화로 동작하는 Sun 서버가 있었는데 이중화 절체시 IP가 중복되는

문제점을 몇년간 해결하지 못하다가 서버 절체시 GARP를 전송하도록 OS 커널단에서 수정후 문제를 해결할 수 있었다.

 

 

'Protocol' 카테고리의 다른 글

SCTP  (0) 2013.09.14
Proxy ARP  (4) 2013.09.12