ARP(Address Resolution Protocol)란?
정의
- 동일한 네트워크 대역(LAN 영역)에서 통신하기 위해 필요한 MAC 주소(물리적 주소)를 IP주소를 이용해서 알아오는 프로토콜
- 즉, 논리적인 주소(IP)를 이용해 물리적인 주소(MAC)를 알아오는 프로토콜
특징
- IP 주소와 이에 해당하는 MAC 주소 정보는 각 IP 호스트의 ARP 캐시라 불리는 메모리에 테이블 형태로 저장된 후 패킷 전송 시 사용된다.
- Windows는 명령 프롬프트(cmd)에 arp -a 명령어, 리눅스의 경우 arp 명령어를 통하여 IP 주소와 MAC 주소의 대응 관계를 확인할 수 있다.
- 반대로 MAC 주소를 IP 주소로 대응 시키기 위해 사용하는 프로토콜인 RARP(Reverse Address Resolution Protocol)이 있다.
운영체제에 따른 arp 캐시 테이블 조회 결과는 위와 같다.
설명
컴퓨터는 IP 주소를 통해 다른 컴퓨터를 식별하는게 아니라 MAC 주소(물리적 주소)를 이용해 식별한다. 즉, IP 간 통신을 위해서는 MAC 주소(물리적 주소)를 알아야 하는데, 이를 확인하는 방법이 바로 ARP이다.
헤더 구조
ARP 헤더는 총 28bytes의 길이를 가진다.
- Hardware type(HTYPE) : 네트워크 유형을 뜻하지만 일반적으로 사용되는 Ethernet 환경은 0x0001 으로 세팅
- Protocol type(PTYPE) : 프로토콜을 정의한다. IPv4의 경우 0x0800 으로 세팅되며, 아직 IPv6는 거의 사용되지 않기 때문에 보통 0x0800 으로 세팅
- Hardware address length : MAC 주소(물리적 주소) 길이를 정의하며 Ethernet 환경의 경우 0x06 세팅
- Protocol address length : 프로토콜의 길이를 정의하며 IPv4는 0x04 세팅. Protocol type 에서 설명한 것과 같이 아직 IPv6는 거의 사용되지 않기 때문에 보통 IPv4인 0x04 세팅이 고정적임
- Opcode : ARP 패킷이 요청(Request) 또는 응답(Reply)에 따라 값이 바뀌게 되고 요청의 경우 1, 응답의 경우 2가 세팅
- Source hardware address : 출발지 MAC 주소
- Source protocol address : 출발지 IP 주소
- Destination hardware address : 목적지 MAC 주소, 요청(Request)의 경우 목적지 MAC 주소를 모르기 때문에 0으로 세팅
- Destination protocol address : 목적지 IP 주소
실습
ARP 캐시 테이블이 비워진 Test PC에서 ping 8.8.8.8 명령어를 입력하여 어떻게 ARP가 동작하는지 이해해보자.
ping 8.8.8.8 명령어 입력
ping 명령어 입력 시 운영체제는 서브넷 마스크를 기준으로 출발지와 도착지 네트워크 ID를 비교한다.
출발지 네트워크 ID는 192.168.0이고 도착지 네트워크 ID는 8.8.8이므로 서로 다른 LAN 영역에 존재한다. 따라서 목적지 IP 주소를 게이트웨이의 IP 주소로 변경해야 한다. 네트워크 ID가 동일하다는 것은 동일한 LAN 영역에 위치한다는 뜻이며, 게이트웨이까지 스위칭 통신을 하기 위해 목적지 MAC 주소가 필요하다.
Test PC(출발지 호스트)는 목적지 MAC 주소를 알아내기 위해 자신이 속한 LAN 영역 전체(동일한 네트워크 ID를 사용하는 호스트)를 대상으로 192.168.0.2에 대응하는 MAC 주소를 찾기 위해 ARP 질의를 브로드캐스트 방식으로 전송한다.
브로드캐스트(Broadcast)
자신과 동일한 네트워크 ID를 사용하는 모든 호스트에게 데이터를 전송
게이트웨이(192.168.0.2)는 자신의 MAC 주소를 요청하는 사실을 알기에 유니캐스트(Unicast)로 자신의 MAC 주소를 Test PC에 전달한다.
유니캐스트(Unicast)
특정 호스트에게 데이터를 전송
위 그림처럼 ARP 캐시 테이블에 목적지 MAC 주소가 올라오면 운영체제는 ARP 캐시 테이블을 참조해 ping 데이터를 유니캐스트 방식으로 게이트웨이에 전송한다. 이후, 게이트웨이가 IP 주소에 기반한 라우팅 통신을 진행한다.
ping 명령어를 입력한 후 ARP 캐시테이블을 확인한 결과는 위 그림과 같다.
정리하자면, 네트워크 계층에서 IP 간 통신을 하기 위해서는 데이터링크 계층에서 통신 경로를 먼저 설정해야 하며 도착지 식별을 위해 MAC 주소(물리적 주소)가 필요하다. ARP는 IP 주소를 MAC 주소로 변환시켜주는 프로토콜이며 IP, MAC 주소 간 매핑 정보는 ARP 캐시테이블에 저장이 된다. 다음에 통신 시 캐시테이블을 참조하여 데이터링크 계층 통신을 할 수 있다.
패킷 분석
와이어샤크를 통해 ping 8.8.8.8 명령어 입력 시 ARP 패킷을 분석해보자.
1) ARP Request 패킷
- Hardware type(HTYPE) : 0x0001 (Ethernet 환경)
- Protocol type(PTYPE) : 0x0800 (IPv4)
- Hardware address length : 0x06 (Ethernet 환경)
- Protocol address length : 0x04 (IPv4)
- Opcode : 0x01 (ARP Request 패킷)
- Source hardware address : 0x000c2902798c
- Source protocol address : 0xc0a800c8 (10진수:192.168.0.200)
- Destination hardware address : 0x0000000000
- Destination protocol address : 0xc0a80002 (10진수:192.168.0.2)
2) ARP Response 패킷
- Hardware type(HTYPE) : 0x0001 (Ethernet 환경)
- Protocol type(PTYPE) : 0x0800 (IPv4)
- Hardware address length : 0x06 (Ethernet 환경)
- Protocol address length : 0x04 (IPv4)
- Opcode : 0x01 (ARP Request 패킷)
- Source hardware address : 0x005056fc33b2
- Source protocol address : 0xc0a80002 (10진수:192.168.0.2)
- Destination hardware address : 0x000c2902798c
- Destination protocol address : 0xc0a800c8 (10진수:192.168.0.200)
참고문헌
https://ssup2.github.io/theory_analysis/Address_Resolution_Protocol/
https://nirsa.tistory.com/27