🐕 ARP(Address Resolution Protocol)
ARP는 간단하게 생각하면 MAC 주소를 알아내기 위한 프로토콜 입니다.
왜 MAC 주소를 알아내야 하는가 하면 IP 주소 체계는 물리적 MAC 주소와 연관성이 없지만
두 주소를 연계시킬 필요성이 있기 때문입니다.
ARP 프로토콜의 헤더는 다음과 같이 구성됩니다.
하드웨어타입(2계층) | 프로토콜 타입(3계층) | |
하드웨어 주소 길이 (2계층) |
프로토콜 주소 길이 (3계층) |
오퍼레이션 코드 |
송신자 하드웨어 주소 (2계층) MAC 주소 | ||
송신자 프로토콜 주소 (3계층) IP 주소 | ||
대상자 하드웨어 주소 (2계층) | ||
대상자 프로토콜 주소 (3계층) IP 주소 |
MAC 주소가 없으면 곤란한 이유는 데이터 링크 계층에서 주소 매핑을 할수가 없어지기 때문입니다.
MAC 주소를 통해서 호스트 간의 통신이 가능해지는데 MAC주소를 모르면 통신을 할 수가 없습니다.
따라서 이 MAC 주소를 알아내기 위해 ARP를 이용해서 IP 주소를 MAC 주소로 매핑해야합니다.
호스트에서 아무 통신이 없다가 처음 통신을 시도하면 패킷을 바로 캡슐화 할 수 없습니다.
통신을 시도할 때 출발지와 목적지 IP 주소 정도는 미리 알고 있어 캡슐화 하는데 문제가 없지만
(출발지 IP 주소는 당연히 알 수 있고 목적지는 DNS주소를 IP로 매핑해서 IP는 알고있음 )
하지만 상대방의 MAC 주소를 알 수 없어서 2계층 캡슐화를 수행할 수가 없습니다.
그럼 ARP 프로토콜은 어떻게 상대방의 MAC 주소를 알아낼 수 있는 것일까요?
그것은 ARP 브로드 캐스트를 이용해 네트워크 전체에 상대방의 MAC 주소를 질의하는 것으로 실현합니다.
ARP 프로토콜은 ARP 브로드 캐스트를 이용해 네트워크 전체에 상대방의 MAC 주소를 질의합니다.
👻패킷 네트워크
패킷 네트워크에서는 큰 데이터를 잘라 전송하므로 여러 개의 패킷을 전송해야 합니다.
패킷을 보낼 때 마다 ARP 브로드캐스트를 수행하면 네트워크 통신의 효율성이 크게 저하되므로
메모리에 이 정보를 저장해두고 재사용합니다.
성능 유지를 위해서는 ARP 테이블을 오래 유지하는게 당연히 좋겠지만
논리 주소는 언제든지 바뀔 수 있으므로 일정 시간동안 통신이 없으면 이 테이블은 삭제되어야 합니다.
그런데 네트워크 장비에서의 ARP 작업은 하드웨어 가속으로 처리되지 않고
CPU에서 직접 수행하므로 짧은 시간에 많은 ARP 요청이 들어오면 네트워크 장비에서는 큰 부하로 작용합니다.
그동안 해커들이 네트워크 장비를 무력화하는 데 다량의 ARP를 이용한 공격을 많이 수행해왔습니다.
이런 공격에 대응하기 위해 네트워크 장비는 ARP 테이블 저장 기간을 일반 PC보다 길게 설정하고
많은 ARP 요청이 들어오면 이를 필터링하거나 천천히 처리하는 방식으로 네트워크 장비를 보호합니다.
ARP 테이블을 수동으로만 갱신하도록 설정하여 운영하기도 합니다.
ARP 패킷은 여러가지 필드 중 ARP 데이터에 사용되는
송신자 하드웨어 MAC 주소 / 송신자 IP 주소
대상자 MAC 주소 / 대상자 IP 주소 4개의 필드가 중요하게 사용됩니다.
ARP 요청을 네트워크에 브로드 캐스트 하는 것으로 확인 합니다.
그렇게 되면 이 ARP 패킷은 같은 네트워크 안에 있는 모든 단말에 보내지게 될 것입니다.
모든 단말은 ARP 프로토콜의 내용을 확인하고 대상자 IP가 자신이 아니면 ARP 패킷을 버립니다.
반면 대상자 IP가 자신이라면 ARP 요청을 처리하고 그에 대한 응답을 보냅니다.
이떄 송신자와 대상자의 위치가 바뀝니다. ARP 요청이 담긴 패킷에는
송신자의 MAC, IP 주소가 모두 있기 때문에 모든 ARP 필드를 채워서 응답할 수 있습니다.
그런데 특이한 점은 처음 ARP 프로토콜로 패킷을 보낼때는 브로드캐스트로 송신하지만
ARP 응답을 보낼때에는 유니캐스트 방식으로 패킷을 보낸다는 것입니다.
🥶 GARP
일반적인 ARP 외에도 ARP 프로토콜 필드를 그대로 사용하지만
내용을 살짝 변경해 원래 ARP 프로토콜의 목적과 다른 목적으로 사용하는
GARP, RARP와 같은 프로토콜이 존재합니다.
GARP는 (Gratuitous ARP)의 약자이며 대상자 IP 필드에 자신의 IP 주소를 채워 ARP 요청을 보냅니다.
ARP | GARP |
상대방의 MAC 주소를 알아내기 위해 사용함 | 자신의 IP, MAC 주소를 알리기 위해 사용함 |
쉽게 생각하면 GARP는 어그로 꾼이네요
이러한 GARP는 로컬 네트워크에 자신의 IP와 MAC 주소를 알릴 목적으로 사용하기 때문에
브로드캐스트 MAC 주소를 사용합니다.
그럼 왜 GARP를 사용하는 것일까요?
GARP를 사용하는 이유 세가지
1. IP 주소 충돌 감지
2. 상대방(동일 서브넷 상의 다른)의 ARP 테이블 갱신
3. HA (고가용성) 용도의 클러스터링 VRRP , HSRP
IP 주소 충돌 감지
IP 주소는 유일하게 할당되어야 하는 값이지만 여러가지 이유로 내가 할당받은 IP를
다른 사람이 사용하고 있을 수 있습니다.
IP 충돌로 인하여 통신이 안되는 것을 예방하기 위해 자신에게 할당된 IP가 네트워크에서 이미 사용되고 있는지
GARP를 이용하여 확인합니다.
상대방의 ARP 테이블 갱신
가상 MAC 주소를 사용하지 않는 데이터베이스 HA 솔루션에서 주로 사용하는 용도입니다.
데이터 베이스 HA는 주로 두 데이터베이스 서버가 하나의 가상 IP 주소로 서비스합니다.
두대의 데이터베이스 중 한대만 동작하며 한대는 대기하는 액티브 스탠바이로 동작하는데
액티브 상태인 서버가 가상 IP 주소 요청에 응답해 서비스하지만 MAC 주소는 가상 주소가 아닌
실제 MAC 주소를 사용합니다.
클러스터링 , FHRP(VRRP , HSRP)
앞에서 다룬 HA 솔루션의 경우엔 장비 이중화를 위해 사용되지만
실제 MAC 주소를 사용하지 않고 가상 MAC을 사용하는 클러스터링, VRRP , HSRP와 같은
FHRP에서도 GARP가 사용됩니다.
🌞RARP
RARP는 Reverse Arp의 줄임말입니다. 반대로 동작하는 ARP라는 뜻인데
GARP처럼 ARP 프로토콜 구조는 같지만 필드에 들어가는 내용이 다르고
원래 목적과 반대로 사용되게 됩니다.
ARP 주소가 IP주소를 이용해 MAC 주소를 찾는다면
RARP는 MAC주소를 이용해 IP 주소를 찾습니다.
즉 RARP는 IP 주소가 정해져 있지 않은 단말이 IP 할당을 요청할 때 사용합니다.
나 자신의 MAC 주소는 알지만 IP가 아직 할당되지 않아 IP를 할당해주는 서버에
내가 어떤 IP 주소를 써야하는지 물어볼 때 사용하는 프로토콜을 RARP라고 부릅니다!
🐶마치며
DNS를 공부할때 단골로 튀어나오는 ARP 프로토콜 이런 녀석이었군요
'Network' 카테고리의 다른 글
proxy 서버의 개념과 react project에서 사용하는 방법 (0) | 2023.04.29 |
---|---|
스위치에 대한 조금 더 깊은 이해 (0) | 2023.04.27 |
HTTPS (0) | 2023.04.21 |
www.google.com을 검색하면 무슨일이 생길까 (1) | 2023.04.20 |
HTTP를 찍먹 해보자. (0) | 2023.04.01 |