OSI 2, 3계층이 주소를 가지고 있고 통신을 할 때 목적지를 찾아갈 수 있도록 합니다.
하지만 사실 2계층 MAC 주소와 3계층 IP 주소 간에는 아무 관계도 없습니다.
실제로 통신은 IP 주소를 기반으로 일어나고 MAC 주소는 상대방의 주소를 자동으로 알아내 통신하게 됩니다.
이때 상대방의 MAC 주소를 알아내기 위해 사용되는 프로토콜이 ARP(Address Resolution Protocol) 입니다.
IP 주소 체계는 물리적 MAC 주소와 전혀 연관성이 없으므로 두 개의 주소를 연결시켜 주기 위한 메커니즘으로 사용되는 프로토콜이 ARP 입니다.
ARP 프로토콜은 TCP/IP 프로토콜 스택을 위해서만 동작하는 것이 아닙니다. 3계층 논리적 주소와 2계층 물리적 주소 사이에 관계가 없는 프로토콜에서 ARP과 같은 메커니즘을 사용해 물리적 주소와 논리적 주소를 연결합니다.
호스트에서 최초로 통신을 시도할 때, 패킷을 바로 캡슐화할 수 없습니다.
출발지와 목적지 IP 주소는 미리 알고 있어 3계층 캡슐화에는 문제가 없지만 상대방의 MAC 주소를 알 수 없어 2계층 캡슐화를 수행할 수 없습니다.
이후, 패킷은 정상적으로 캡슐화되어 상대방에게 전달될 수 있습니다.
패킷 네트워크에선 큰 데이터를 잘라 여러 개의 패킷을 전송해야 하므로, 전송할 때마다 ARP 브로드캐스트를 수행하면 네트워크 통신의 효율성이 크게 저하되므로 메모리에 이 정보를 저장해두고 재사용합니다.
성능 유지를 위해 ARP 테이블을 오래 유지하는 것이 좋지만 논리 주소는 언제든지 바뀔 수 있으므로 일정 시간 동안 통신이 없으면 이 테이블은 삭제됩니다.
윈도우 명령 프롬프트에서
apr -a
명령을 입력하면 PC의 ARP 테이블 정보를 확인할 수 있습니다.
ARP 프로토콜을 이용해 IP 주소와 MAC 주소를 매핑하면 [유형]필드에 “동적”으로 표기됩니다.
네트워크 장비에서의 ARP 작업은 하두웨어 가속으로 처리되지 않고 CPU에서 직접 수행하므로 짧은 시간에 많은 ARP 요청이 들어오면 네트워크 장비에서는 큰 부하로 작용합니다.
해커들이 네트워크 장비를 무력화하는 데 다량의 ARP를 이용한 공격을 많이 수행해왔습니다. 이런 공격에 대응하기 위해 네트워크 장비는 다음 방식으로 장비를 보호합니다.
ARP 데이터 중, 송신자 하드웨어 MAC 주소, 송신자 IP 프로토콜 주소, 대상자 MAC 주소, 대상자 IP 프로토콜 주소 4개의 필드가 중요하게 사용됩니다.
위에서 얘기했듯이 ARP 브로드캐스트를 보내 MAC 주소를 알아냅니다. 그 과정을 자세히 예시로 알아봅시다.
서버 A에서 B로 ping
을 보내려 할 때, 3계층 IP 주소까진 캡슐화할 수 있지만 목적지 MAC 주소를 모르기 때문에 2계층 캡슐화를 할 수 없어 패킷을 완성할 수 없습니다.
서버 B의 MAC 주소를 알아내기 위해 ARP 요청을 네트워크에 브로드캐스트합니다.
이 ARP 패킷은 같은 네트워크 안에 있는 모든 단말에 보내지고 모든 단말은 ARP 프로토콜 내용을 확인하는데 ARP 프로토콜 필드의 대상자 IP가 자신이 맞는지 확인해 자신이 아니면 ARP 패킷을 버립니다.
서버 B는 대상자 IP 주소가 자신의 IP이므로 ARP 요청을 처리하고 그에 대한 응답을 보냅니다.
처음 ARP 요청은 브로드캐스트이고, ARP 응답을 보낼 때는 출발지와 도착지 MAC 주소가 명시되어 있으므로 유니캐스트입니다.
서버 A는 서버 B로부터 ARP 응답을 받아 자신의 ARP 캐시 테이블을 갱신합니다. 이 캐시 테이블은 정해진 시간 동안 서버 B와의 통신이 없을 때까지 유지됩니다.
ARP 캐시 테이블이 갱신된 후, 상대방 MAC 주소를 알고 있으므로 도착지 MAC 주소 필드를 완성해 ping
패킷을 보낼 수 있습니다.
Gratuitous ARP의 약자인 GARP는 대상자 IP 필드에 자신의 IP 주소를 채워 ARP 요청을 보냅니다.
ARP가 상대방 MAC 주소를 알아내기 위해 사용되는 반면, GARP는 자신의 IP와 MAC 주소를 알릴 목적으로 사용됩니다.
로컬 네트워크에 자신의 IP와 MAC 주소를 알릴 목적으로 사용되므로 GARP의 목적지 MAC 주소는 브로드캐스트 MAC 주소를 사용합니다.
GARP 패킷에 다음처럼 넣어 네트워크에 브로드캐스트 합니다.
GARP를 사용해 동일 네트워크에 자신의 IP 주소와 MAC 주소를 알려주는 이유는 다음과 같습니다.
유일하게 할당되어야 하는 값인 IP를 여러 이유로 다른 사람이 사용하고 있을 수도 있습니다.
IP 충돌 때문에 통신이 안 되는 것을 방지하기 위해 자신에게 할당된 IP가 네트워크에서 이미 사용되고 있는지 GARP를 통해 확인합니다.
만약 GARP 패킷을 전송했을 때, 응답이 온다면 네트워크 상에서 해당 IP를 이미 사용중인 단말이 있다는 것을 알 수 있습니다.
윈도의 경우, 이런 응답을 받으면 IP 주소 충돌과 관련된 에러 메시지를 사용자에게 알려줍니다.
가상 MAC 주소를 사용하지 않는 데이터베이스 HA(고가용성) 솔루션에서 주로 사용합니다.
데이터베이스 HA는 주로 두 DB 서버가 하나의 가상 IP 주소로 서비스합니다.
두 대의 데이터베이스가 액티브-스탠바이로 동작합니다.(한 대는 동작, 한 대는 대기)
액티브 상태인 서버가 가상 IP 주소로 요청에 응답해 서비스하지만 MAC 주소는 가상 주소가 아닌 실제 MAC 주소를 사용합니다.
그렇기 때문에 두 대의 데이터베이스가 동일한 가상의 IP를 이용하는데 반해 MAC 주소는 다르기 때문에, 동작되는 데이터베이스가 바뀌면 상대방의 ARP를 갱신해주어야 합니다.
두 DB 장비 A, B가 있다고 합니다.
위와 같을 때, A가 동작할 때 패킷을 보내던 장비 C의 ARP 캐시 테이블엔 IP가 1.1인 장비의 MAC 주소는 AA로 저장되어 있습니다.
A가 동작하지 않고 B가 동작하게 변경되면, C는 B의 MAC 주소가 아닌 A의 MAC 주소인 AA로 패킷을 보내게 됩니다.
이럴 경우, 패킷은 정상적으로 동작하지 않아 네트워크에서 응답이 불가능하거나 스탠바이 상태인 A로 패킷이 보내지므로 정상적인 서비스를 받을 수 없게 됩니다.
이런 현상을 예방하기 위해 스탠바이 장비가 액티브 상태가 되면 GARP 패킷을 네트워크에 보내 액티브 장비가 변경되었음을 알립니다.
이후 로컬 네트워크 단말들의 ARP 테이블에는 1.1번이 BB MAC 주소로 갱신되어 통신됩니다.
최근 네트워크 장비에서는 이런 형태의 HA는 잘 쓰이지 않습니다.
GARP를 이용해 패킷을 가로채는 기법이 많이 사용되어 보안상의 이유나 다른 운영상의 이유로 GARP를 받더라도 ARP 테이블을 갱신하지 않는 단말들이 존재할 가능성이 있어 이런 문제가 발생하지 않도록 가상 MAC을 사용하는 HA 솔루션을 사용합니다.
앞의 HA 솔루션 경우처럼 장비 이중화를 위해 사용되지만 실제 MAC 주소를 사용하지 않고 가상 MAC을 사용하는 클러스터링, VRRP, HSRP와 같은 FHRP에서도 GARP가 사용됩니다.
VRRP(Virtual Router Redundancy Protocol), HSRP(Hot Standby Router Protocol)는 FHRP의 일종입니다.
이 프로토콜들은 디폴트 게이트웨이에 장애가 발생할 경우, 해당 네트워크에 속한 단말이 외부 네트워크로 통신할 수 없는 문제를 해결하기 위해 개발되었습니다.
FHRP: 두 대의 디폴트 게이트웨이 라우터가 한 대처럼 동작해 한 대에 문제가 생기더라도 다른 한 대에서 서비스를 지속할 수 있다.
클러스터링에서 가상 MAC 주소를 사용하는 경우, 단말은 ARP 정보를 가상 MAC 주소로 학습하므로 단말의 ARP 테이블을 갱신할 필요가 없습니다.
하지만 클러스터링 중간에 있는 스튀치의 MAC 테이블은 마스터가 변경되었을 때 가상 MAC 주소의 위치를 적절히 찾아가도록 업데이트해야 하므로 마스터가 변경되는 시점에 MAC 테이블의 갱신이 필요합니다.
따라서 슬레이브가 마스터로 역할이 변경되면 GARP를 전송하고 스위치에서는 이 GARP를 통해 MAC 주소에 대한 포트 정보를 새로 변경해 MAC 테이블을 갱신합니다.
클러스터링이나 HA 솔루션에서 빠른 시간 안에 정상적으로 페일오버(Failover, 장애 극복)가 되지 않을 경우, HA 솔루션 자체의 문제인 경우도 있지만 GARP를 받은 스위치가 MAC 테이블을 빨리 갱신해주지 않아 문제가 되는 경우도 많습니다.
HA 솔루션을 도입하는 경우, 사전에 이런 부분들이 반드시 함께 고려되고 테스트되어야 합니다.
위와 같은 기법을 사용해 해결하기도 합니다.
Reverse ARP의 줄임말로 말 그대로 반대로 동작하는 ARP인데 GARP처럼 ARP 프로토콜 구조는 같지만 필드에 들어가는 내용이 다르고 목적과 반대로 사용됩니다.
RARP는 IP 주소가 정해져 있지 않은 단말이 IP 할당을 요청할 때 사용합니다.
ARP는 내가 통신해야 할 상대방의 MAC 주소를 모를 때 상대방의 IP 주소로 MAC 주소를 물어볼 목적으로 만들어진 프로토콜입니다.
반대로 RARP는 자신의 MAC 주소는 알지만 IP가 아직 할당되지 않아 IP를 할당해주는 서버에 어떤 IP 주소를 써야하는지 물어볼 때 사용됩니다.
RARP는 과거에 네트워크 호스트의 주소 할당에 사용되었지만 제한된 기능으로 인해 BOOTP와 DHCP로 대체되어 사용되지 않습니다.
[IT 엔지니어를 위한 네트워크 입문] 도서를 참조해 공부한 내용입니다.
감사합니다.
Photographs by Chaelin, Unsplash.