1. ARP(Address Resolution Protocol)
ARP(Address Resolution Protocol) : 상대방의 MAC 주소를 알아내기 위해 사용되는 프로토콜
간단하게 말하면 IP주소로 MAC 주소를 알아내는 건데, 따라서 ARP에 대해 이해하려면 IP 주소와 MAC 주소에 대한 개념, 즉 2, 3 계층에 대한 개념이 있어야 한다.
참고하면 좋은 글 : OSI 7계층 - 2계층, 3계층
앞에서 배운 대로 2, 3계층은 각각 주소를 가지고 있어 통신 시 목적지를 찾아갈 수 있게 해준다.
2계층 MAC주소는 하드웨어 생산업체에서 임의적으로 할당한 주소이므로 NIC(Network Interface Card)에 종속되어있고, 3계층 IP주소는 우리가 직접 할당하거나 DHCP를 이용해 자동으로 할당받는다.
실제 통신은 IP 주소 기반으로 일어나고 MAC 주소는 상대방의 주소를 자동으로 알아내 통신한다.
이 때 상대방의 MAC 주소를 자동으로 알아내기 위해 사용되는 프로토콜이 ARP이다.
ARP란?
이처럼 데이터 통신에서 MAC 주소(물리)와 IP 주소(논리) 두 개가 사용되는데, IP 주소 체계는 MAC 주소와 연관성이 전혀 없다. 따라서 두 주소를 연계시켜주기 위한 매커니즘이 필요해 ARP를 사용한다.
위 그림에서 보이는 것 처럼 ARP 프로토콜 필드에는 2계층과 3계층 정보가 모두 포함되어 IP주소와 MAC 주소를 연결할 수 있다.
IP 주소를 이용해 MAC 주소를 알아내야 하는 이유는?
OSI 7계층을 배울 때, 송신 측에서 L7~L1을 따라 데이터를 보내는 과정을 캡슐화(Encapsulation)라고 했다.
그런데 호스트에서 아무 통신이 없다가 처음 통신을 시작하면, 출발지와 목적지 IP주소는 미리 알고 있어 문제가 없지만 상대방의 MAC 주소는 알 수 없어 2계층 캡슐화를 수행할 수 없다.
- 이 때 출발지에서 ARP 브로드캐스트를 이용해 네트워크 전체에 상대방의 MAC 주소를 물어본다.
- 목적지가 ARP 브로드캐스트를 받으면 ARP 프로토콜을 이용해 응답하고, 이렇게 자신의 MAC 주소를 알려주게 된다.
- 이 작업이 완료되면 출발지, 목적지 모두 서로의 MAC 주소를 학습해 패킷이 정상적으로 캡슐화되어 상대방에게 전달 될 수 있다.
ARP 테이블
하지만 패킷은 그냥 보내는 게 아니라 큰 데이터를 잘라 여러 개의 패킷으로 보내기 때문에, 통신을 할 때 마다 매번 ARP 브로드캐스트를 통해 MAC 주소를 알아내는 건 상당히 비효율적이다.
그래서 IP주소와 MAC 주소를 1:1로 대응하여 테이블로 저장해두는데 이를 ARP 테이블이라 한다.
명령 프롬프트 → arp -a
- 일정 시간 이상 통신이 없으면 이 테이블은 삭제된다.
- ARP 테이블이 한 번 생성되면 오래 유지하는 것이 성능 유지에 좋음
- 그러나 논리 주소는 언제든지 바뀔 수 있기 때문
- 주의할 점
- 네트워크 장비에서 ARP 작업은 CPU에서 직접 수행
- 따라서 짧은 시간에 많은 ARP요청이 들어오면 네트워크 장비에는 큰 부하로 작용
- 부하를 해결하는 방법
- 네트워크 장비의 ARP 테이블 저장 기간을 일반 PC보다 길게 설정
- 많은 ARP 요청이 들어오면 이를 필터링하거나 천천히 처리함
- 일부 장비에서는 ARP 테이블을 수동으로만 갱신하도록 설정해 운영
2. ARP 동작
위에서 봤던 ARP 프로토콜 필드 중 중요하게 사용되는 것은
- 송신자 하드웨어 MAC 주소
- 송신자 IP 프로토콜 주소
- 대상자 MAC 주소
- 대상자 IP 프로토콜 주소
이다.
이제 예시를 통해 ARP 동작 과정에 대해 자세히 알아보자.
1) 서버 A → 서버 B로 ping 보냄(최초 통신 시도)
- 목적지 MAC 주소를 모르기 때문에 정상적으로 패킷을 만들 수 없다.
- 서버 A는 서버 B의 MAC 주소(1.1.1.2 IP의 MAC 주소)를 알아내기 위해 ARP 요청을 브로드캐스트
2) 서버 A → 서버 B로 ARP 브로드캐스트
- 출발지 👉🏻 자신의 MAC
- 도착지 👉🏻 브로드캐스트(FF-FF-FF-FF-FF-FF)
- ARP 프로토콜 필드의 전송자 MAC과 IP 주소 👉🏻 자신의 주소
- 대상자 IP 주소 👉🏻 1.1.1.2
- 대상자 MAC 주소 👉🏻 00-00-00-00-00-00
3) 브로드캐스트를 받은 서버에서 IP 비교 후 자신의 MAC 주소 반환
- 2번에서 브로드캐스트로 전송했으므로 ARP 패킷이 같은 네트워크 내의 모든 단말에 보내짐.
- 따라서 모든 단말은 각자 ARP 프로토콜을 확인
- 대상자 IP와 자신의 IP와 비교
- 일치하지 않으면 폐기
- 일치한다면 받은 ARP 프로토콜 필드를 통해 목적지 정보(IP, MAC)를 알아냄
- 목적지 정보를 이용해 ARP 프로토콜을 보냄
- 응답을 보낼 때는 출발지, 도착지 MAC 주소가 명시되어있기 때문에 유니캐스트로 전송
4) ARP 캐시 테이블 갱신 및 서버 A → 서버 B 패킷 송신
- 서버 A는 서버 B로부터 ARP 응답을 받아 자신의 ARP 캐시 테이블 갱신
- 이 ARP 캐시 테이블은 정해진 시간동안 서버 B와 통신이 없을때까지 유지
- 시간 내에 통신이 다시 이뤄지면 시간은 다시 초기화된다.
- 상대방의 MAC 주소를 알고 있으므로 도착지 MAC 주소 필드를 완성해 ping 패킷을 보낼 수 있다.
ARP 프로토콜 필드를 그대로 사용하지만 내용을 변경해 원래 목적과 다른 용도로 사용하는 프로토콜이 있다.
대표적인 예가 GARP, RARP 이며, 이제부터 이들에 대해 알아보도록 하자.
3. GARP(Gratuitous ARP)
- 대상자 IP 필드에 자신의 IP 주소를 채워서 ARP 요청을 보내는 것
- 자신의 IP와 MAC 주소를 알릴 목적으로 사용
- 로컬 네트워크에 자신의 주소 정보를 알릴 목적이므로 목적지 MAC주소는 브로드캐스트 MAC 주소를 사용
- GARP를 사용해 동일 네트워크에 자신의 주소 정보를 알리는 이유는 다음과 같다.
- IP 주소 충돌 감지
- 상대방(동일 서브넷 상의 다른)의 ARP 테이블 갱신
- HA(고가용성) 용도의 클러스터링, VRRP, HSRP
IP 주소 충돌 감지
- IP 주소는 유일하게 할당 👉🏻 여러 이유로 내 IP를 다른 사람이 사용하고 있을 수 있음
- 이를 예방하기 위해 GARP를 통해 IP 충돌을 확인한다.
상대방(동일 서브넷)의 ARP 테이블 갱신
- 가상 MAC 주소를 사용하지 않는 데이터베이스 HA(High Availability: 고가용성) 솔루션에서 주로 사용
- 이는 주로 두 데이터베이스 서버가 하나의 가상 IP 주소로 서비스한다.
- 두 대 중 하나만 동작하고, 나머지 한 대는 대기하는 액티브-스탠바이(Active-Standby)로 동작
- 왼쪽 그림처럼, 두 대 DB가 각각 1.2, 1.3 IP 주소를 가지고 있고, 가상 IP인 1.1로 서비스하고 있다고 하자.
- 평상시에는 왼쪽처럼 동작.
- DB-A(AA-AA-AA), DB-B(BB-BB-BB)둘 모두 IP 1.1에 대한 ARP 요청 수신
- 마스터가 DB-A이므로 얘가 액티브 역할 👉🏻 응답은 DB-A만 함.
- 오른쪽 그림처럼 마스터 장비인 DB-A(AA-AA-AA)가 동작하지 않을 경우
- DB-B장비가 액티브로 동작
- 얘가 IP 1.1에 대한 ARP 요청 응답
- 스탠바이 장비가 액티브 상태가 되었으므로 DB-B에서 GARP 패킷을 네트워크에 보내 액티브 장비가 변경되었음을 알려줌
- 이후 로컬 네트워크 단말들의 ARP 테이블에는 1.1번은 BB-BB-BB MAC주소로 갱신되어 통신
HA(고가용성) 용도의 클러스터링, FHRP(VRRP, HSRP)
- 실제 MAC 주소를 사용하지 않고 가상 MAC을 사용하는 클러스터링
- 또는 VRRP, HSRP와 같은 FHRP(First Hop Redundancy Protocol)에서도 GARP가 사용됨
- 주로 네트워크에 있는 스위치 장비의 MAC 테이블 갱신이 목적
- 클러스터링 중간에 있는 스위치의 MAC 테이블
- 마스터가 변경되었을 때 가상 MAC 주소의 위치를 적절히 찾아가도록 업데이트 해야한다.
- 따라서 마스터가 변경되는 시점에 MAC 테이블 갱신이 필요하다.
- 그래서 슬레이브가 마스터로 역할이 변경되면 GARP를 전송
- 스위치에서는 GARP를 통해 MAC주소에 대한 포트 정보를 새로 변경해 MAC 테이블을 갱신
4. RARP(Reverse ARP)
- 말 그대로 반대로 동작하는 ARP
- 필드에 들어가는 내용이 다르고 원래 목적과 반대로 사용한다.
- IP주소가 정해져 있지 않은 단말이 IP할당을 요청할 때 사용한다.
- ARP : IP주소 👉🏻 MAC 주소
- RARP : MAC 주소 👉🏻 IP 주소
- ARP : IP주소 👉🏻 MAC 주소
- 현재 제한된 기능으로 인해 BOOTP와 DHCP로 대체되어 사용되지 않는다.
참고
⌜IT 엔지니어를 위한 네트워크 입문⌟ 길벗, 2023
[3장] 네트워크 통신하기 | 3.5 ARP (p.111~121)
* 책을 참고해 필요한 내용을 정리한 것이므로, 책의 내용과 다를 수 있습니다.
GitHub 댓글