지난 번 MAC 주소에서 IP 주소만 알고 MAC 주소를 모를 때 MAC 주소를 알 수 있게 하는 프로토콜 ARP에 대해 잠깐 언급을 했었다. 오늘은 그 ARP에 대해 공부해보겠다.
실제로 통신은 IP 주소 기반으로 일어나고 MAC 주소는 상대방의 주소를 자동으로 알아내 통신하게 된다.
-> 상대방의 MAC 주소를 알아내기 위해 사용되는 프로토콜이 ARP
IP 주소와 MAC 주소를 연계시켜 주기 위한 매커니즘
ARP 프로토콜 필드(ARP 헤더 + ARP 데이터)
- 사용중인 Hardware 주소 타입을 나타내는 필드. 네트워크 유형을 나타냄.
- 1(Ethernet), 2(Experimental Ethernet), 3(Amateur Radio AX.25), 4(Proteon ProNET Token Ring), 5(Chaos), 6(IEEE 802.3 networks)
목적지(수신지) MAC 주소 (6 byte)
목적지(수신지) IP 주소 (4 byte)
호스트에서 아무 통신이 없다가 처음 통신을 시도하면 패킷을 캡슐화 할 수 없음 => 상대방의 MAC 주소를 알 수 없기 때문에 2계층 캡슐화를 할 수 없음
상대방의 MAC 주소를 알아내기 위해선 ARP 브로드캐스트를 이용해 네트워크 전체에 상대방의 MAC주소를 질의해야함
ARP 브로드캐스트를 받은 목적지는 자신의 MAC주소를 응답 => 패킷이 정상적으로 인캡슐레이션되어 상대방에게 전달 할 수 있다.
패킷 네트워크에서는 데이터를 잘라 전송하므로 여러 개의 패킷을 전송, 패킷을 전송할 떄마다 ARP 브로드캐스트를 수행하면 효율성 크게 저하
=> 메모리에 정보를 저장해두고 재사용, 성능 유지를 위해 ARP 테이블이 오래 유지되는 것이 좋지만 논리 주소는 언제든 바뀔 수 있으므로 일정 시간 동안 통신이 없으면 테이블 삭제
네트워크 장비에서 ARP 작업은 CPU에서 직접 수행 => 짧은 시간 많은 ARP 요청이 들어오면 네트워크 장비에 큰 부하 작용.
=> 네트워크 장비를 무력화하려는 해커들은 다량의 ARP를 이용한 공격 수행
=> 대응하기 위해 ARP 요청 필터링, 천천히 처리하기
=> 또는 ARP 테이블을 수동으로만 갱신하도록 설정해 운영
참고
패킷으로 데이터를 전송하는 네트워크에서는 데이터를 보내기 위해 여러 개의 패킷을 사용해야함
=> 반복잡업을 줄이기 위해 참조할 수 있는 여러 가지 테이블을 사용
=> ARP 테이블 외에도 DNS 캐시나 라우팅 캐시와 같은 다양한 계층에서 네트워크 성능을 높이기 위한 캐시 테이블을 가지고 있음
ARP 패킷의 여러 가지 필드 중 ARP 데이터에 사용되는 송신자 하드웨어 MAC 주소, 송신자 IP 프로토콜 주소, 대상자 MAC 주소, 대샂아 IP 프로토콜 주소 4개의 필드가 중요하게 사용
서버 A에서 서버 B로 요청을 보낼 때, 서버 A는 서버 B의 MAC 주소를 알지 못하기 때문에 3계층까지 밖에 캡슐화를 할 수 없음
서버 A는 B의 MAC주소를 알아내기 위해서 ARP요청을 네트워크에 브로드캐스트함
브로드캐스트 할 때, 출발지 MAC은 자신의 MAC주소 목적지 MAC주소는 브로트 캐스트인 (FF-FF-FF-FF-FF-FF)이다. 전송자MAC,IP 는 사용자의 주소를 이용하고, 대상자 IP 주소는 목적지 IP 주소를 이용하고 대상자 MAC주소는 00-00-00-00-00-00을 채워서 넣어준다. 그 이유는 대상자 MAC주소를 찾아줘야하기 때문이다.
A가 브로드캐스트로 요청을 했을 때 서버B에서 브로드캐스트 요청을 받고 대상IP가 자신의 IP인것을 확인하면 ARP 응답을 보낼 때 출발지와 도착지 MAC 주소가 명시되어 있는 유니캐스트로 보내주게 된다.
서버A는 서버 B로 부터 ARP 응답을 받아 자신의 ARP 캐시 테이블을 갱신
ARP 프로토콜 필드를 그대로 사용하지만 ARP 와는 다른 목적으로 사용하는 GARP, RARP같은 프로토콜이 있음
GARP는 자신의 IP와 MAC 주소를 알릴 목적으로 사용 => GARP의 목적지 MAC 주소는 브로드캐스트 MAC주소 사용, 송신자 MAC,IP 대상자 IP 주소 모두 자신의 주소를 사용
GARP를 사용하는 이유
IP주소는 유일하게 할당되어야 하지만 예외적인 경우 다른사람도 같은 IP 주소를 사용할 수 있음
=> IP 충돌이 나는지 확인하고 예방하기 위해 자신에게 할당된 IP가 네트워크에서 이미 사용되는지 GARP를 통해 확인. 응답이 오면 네트워크상에서 해당 IP를 이미 사용중이라는 뜻.
가상 MAC 주소를 사용하지 않는 데이터베이스 HA솔루션에서 주로 사용
데이터 베이스 JA는 주로 두 데이터베이스 서버가 하나의 가상 IP주소로 서비스
두 대의 데이터베이스 중 한 대만 동작 나머지 한 대는 대기하는 액티브-스탠바이로 동작
액티브 상태인 서버의 IP는 가상 IP 주소 요청에 응답 하지만 MAC 주소는 실제 데이터베이스의 MAC주소를 사용
스탠바이의 데이터베이스가 작동하게 되고 액티브 데이터베이스가 대기로 바뀌게 되면 MAC 주소는 변경됨. 하지만 이 데이터베이스를 사용하고 있는 사용자의 캐시 테이블의 MAC 주소는 현재 액티브 데이터베이스가 아닌 전 액티브 데이터 베이스이므로 캐시 테이블을 갱신하기 위해서 통신
참고
최근 네트워크 장비에서는 이런 형태의 HA를 사용하지 않음
GARP를 이용해 패킷을 가로채는 기법이 많이 사용
보안상 + 운영상의 이유로 가상 MAC을 사용하는 HA 솔루션 사용
위의 HA 경우와 다르게 실제 MAC 주소를 사용하지 않는 가상 MAC주소를 사용하는 클러스터링 VRRP,HSRP와 같은 FHRP에서도 GARP가 사용됨
클러스터링과 VRRP,HSRP의 GARP 사용 이유는 사용 네트워크에 있는 스위치 장비의 MAC 테이블 갱신
참고
VRRP, HSRP는 디폴트 게이트웨이에 장애가 발생할 경우, 외부 네트워크로 통신할 수 없는 문제를 해결하기 위해 개발
두 대의 디폴트 게이트웨이 라우터가 한 대처럼 동작해서 한 대에 문제가 생기더라도 다른 한 대에서 서비스를 지속할 수 있도록 사용
클러스터링의 경우 단말은 가상 MAC 주소로 이용하기 때문에 ARP 테이블 갱신 필요x
중간 스위치의 MAC 테이블의 경우 마스터가 변경되었을 때(디폴트 라우터가 변경되었을 때) 가상 MAC 주소의 위치를 제대로 찾아가도록 업데이트해야함 => 마스터가 변경되는 시점에 MAC 테이블의 갱신 필요 => 마스터 변경 시 GARP 전송 스위치에서는 GARP를 통해 MAC주소에 대한 포트 정보를 새로 변경해서 MAC 테이블 갱신
참고
클러스터링이나 HA 솔루션에서 빠른시간 안에 장애가 해결되지 않는 다면 HA 솔루션이나 클러스터링 문제가 있을 수도 있지만 GARP를 받은 수위치가 MAC테이블을 빨리 갱신해주지 않아 문제가 생기는 경우도 존재
사전에 이런 부분을 고려한 테스트가 되어야함.
HA 솔루션에서 GARP를 보내는 시간이나 횟수를 조절하거나 스위치와 연결된 포트를 순간적으로 리셋해서 MAC 테이블을 초기화하는 기법도 사용
ARP를 반대로 동작하는 법 MAC주소는 알지만 IP주소를 모를 때 사용
제한된 기능 때문에 BOOTP, DHCP로 대체
배운 점
참고 자료
https://galid1.tistory.com/168
https://m.blog.naver.com/kjh131222/220454539207
https://security-nanglam.tistory.com/195
https://m.blog.naver.com/nackji80/220998936085
http://www.ktword.co.kr/test/view/view.php?m_temp1=2188