- Published on
ARP(Address resolusion Protocol) : 네트워크-8
- Authors
- Name
- Overview
- Name
- ARP
- Name
- ARP cache
- Name
- Proxy ARP
- Name
- Gratuitous ARP
Tags
Previous Article
Next Article
Overview
목적지 호스트 X에 대해 라우팅 경로를 결정하는 경우 두 가지 케이스가 존재하는데요.
if 패킷이 목적지 호스트 X가 속한 네트워크에 도달
then 호스트 X에게 패킷을 전달
else 라우터 인터페이스 Y에게 패킷을 전달
그런데 호스트 X나 라우터 인터페이스 Y에게 데이터를 전달하기 위해선 어떻게 해야할까요?
IP는 네트워크에 논리적 주소를 부여하여 주소를 통해 구조적으로 네트워크를 파악할 수 있게 만들어주고 연결합니다.
그러나 실제 데이터의 전달과 수신은 물리적 네트워크 환경을 통해서 이루어지는데요.
이것을 수행하는 것이 바로 하위의 데이터링크 계층입니다.
데이터링크 계층은 MAC(Media Access Control) 주소를 가집니다.
MAC 주소의 예로는 48 bits Ethernet address, 16 or 48 bits Token Ring, 16 or 48 bits FDDI 등이 있습니다. 이러한 주소는 장치마다 고유하게 부여되기 때문에 hardware address라고도 부릅니다.
이러한 주소체계가 따로 관리되는 이유는 hardware 주소는 장치에 고유하고, IP 주소는 동적이기 때문도 있지만, 데이터링크 계층이 IP 뿐만 아니라 상위 계층의 여러 프로토콜을 위한 인터페이스를 제공하기 때문입니다.
따라서 IP 주소를 보고 목적지 장치를 실제로 식별하기 위해선, IP 주소 - MAC 주소가 어떻게 연결되는지를 알아야만 하는데요.
ARP는 IP 주소를 보고 해당 주소를 가진 장치의 MAC 주소를 얻어 ARP 테이블을 채우는 프로토콜입니다.

물론 MAC 주소를 보고 IP 주소를 얻는 프로토콜도 있고 이름은 RARP(Reverse Address Resolution Protocol)이라 부릅니다.

ARP
ARP는 IP와 마찬가지로 Network Layer에 위치한 프로토콜입니다.
따라서 Data Link 계층의 MAC frame 안에 ARP 패킷이 감싸지는 형태가 됩니다.
아래 그림은 Ethernet frame에 감싸진 ARP 패킷을 보여줍니다.

ARP는 요청(request), 응답(reply) 패킷으로 나뉘고
만약 요청일 경우 frame의 destination 주소는 ff:ff:ff:ff:ff:ff(48 bits)로,
source 주소는 ARP 요청자의 MAC 주소로 설정됩니다.
frame type의 경우 상위 PDU가 무엇인지 명시하는데요.
ARP request/reply, IP datagram 등을 구분합니다.
ARP 패킷의 포맷은 아래와 같은데요.

Hardware Type은 하드웨어의 타입(Ehternet = 1, ..)을 명시하고 Protocol Type은 어떤 프로토콜의 주소(IPv4 = 0x800)를 받을 것인지 명시합니다.
Hadeware len은 하드웨어 주소의 길이로 MAC 주소는 하드웨어에 따라 다양하기 때문에 명시합니다. Ethernet의 경우 6입니다.
마찬가지로 Protocol len도 프로토콜 주소의 길이로 반드시 IPv4 주소(32 bits) 뿐만 아니라 다양한 프로토콜에 대한 인터페이스를 준비해놓은 것을 알 수 있습니다.
ARP operation은 ARP 패킷의 용도를 명시하는데 아래와 같이 지정됩니다.
enum ARPOpertion {
ARP_REQUEST = 1,
ARP_REPLY = 2,
RARP_REQUEST = 3,
RARP_REPLY = 4
};
따라서 아래 그림과 같이 ARP 요청 응답이 이루어지게 되는데요.

요청 응답 과정에서 MAC frame의 src, dst와 ARP 패킷의 src, dst 주소들이 바뀌는 것을 확인할 수 있습니다.
여기서 MAC 주소가 어째서 MAC frame과 ARP 패킷에 중복되어 나타나는지 의문이 드실 수도 있는데요.
MAC frame은 data link layer에서 사용되는 PDU로 보통 하드웨어를 통해 에러체크나 흐름관리 등을 진행하게 됩니다.
network layer에 위치한 ARP에서는 이러한 하위 계층의 디테일을 모르고 확인할 수도 없기 때문에 ARP 패킷에서 데이터로서 MAC 주소를 저장하는 것 입니다.
ARP cache
MAC 주소는 장치마다 고유하게 부여되었기 때문에 특별한 방법이 아니고선 수정할 수 없습니다.
그러나 IP 주소는 보통 동적으로 부여되기 때문에 수정될 수 있는데요.
각 호스트는 모두 자신만의 ARP 테이블을 가지고 있습니다.
IP 주소와 MAC 주소의 맵핑이 영원하지 않기 때문에 ARP 테이블도 지속적으로 업데이트 되어야만 합니다.
ARP request는 요청자의 IP-MAC 주소 쌍을 모든 호스트에게 broadcasting합니다.
따라서 모든 호스트는 이러한 request 요청을 보고 자신의 ARP 테이블을 자동으로 업데이트하게 됩니다.
만약 일정 시간 이상 테이블 엔트리가 업데이트 되지 않을 경우 자동으로 삭제됩니다.
Proxy ARP
만약 ARP 요청이 현재 속한 네트워크를 넘어가버릴 경우 어떻게 될까요?

Proxy ARP는 만약 subnet A에 속한 호스트가 subnet B에 속한 호스트 IP에 대해서 ARP request를 날렸을 경우 이를 처리해주는 테크닉입니다.
이때 라우터를 Proxy Server라고 지칭하며 Proxy Server는 테이블을 통해 각 서브넷의 정보를 알고 있습니다.
따라서 ARP request를 subnet B로 전달하지 않고 대신 자신의 MAC 주소를 ARP reply를 통해 응답해주는데요.
이를 통해 라우터가 하나의 LAN(Local Area Network)를 보장해주는 역할도 해줍니다.
예시를 봐볼까요?
만약 호스트 A가 호스트 D를 향해 패킷을 쏘려고 한다고 가정합시다.
그렇다면 호스트 A는 호스트 D의 IP 주소를 요청하는 ARP 패킷을 날릴 겁니다.
Sender MAC Address | Sender IP Address | Target MAC Address | Target IP Address |
---|---|---|---|
00:00:0c:94:36:aa | 172.16.10.100 | 00:00:00:00:00:00 | 172.16.20.200 |
호스트 D는 subnet B에 속하기 때문에 subnet A의 누구도 응답을 해주지 않습니다(ARP cache를 업데이트할 겁니다!). 패킷은 라우터(Proxy Server)로 도달하는데요.
라우터는 Host D가 subnet B에 속해있음을 알 수 있습니다(라우팅 테이블이 있기 때문에). 따라서 ARP 패킷을 subnet B로 전달하지 않고 자신이 직접 응답하는데요.
이 때 sender의 MAC 주소가 Host D가 아니라 라우터의 MAC 주소로 설정됩니다.
Sender MAC Address | Sender IP Address | Target MAC Address | Target IP Address |
---|---|---|---|
00:00:0c:94:36:ab | 172.16.20.200 | 00:00:0c:94:36:aa | 172.16.10.100 |
따라서 결과적으로 Host A는 ARP 테이블을 업데이트하게 됩니다.
IP Address | MAC Address |
---|---|
172.16.20.200 | 00:00:0c:94:36:ab |
Gratuitous ARP
Gratuitous ARP는 ARP 요청을 받지 않고 ARP Reply를 보내는 것을 말하는데요.
만약 어떤 호스트가 IP-MAC 주소 맵핑이 수정됐을 때 이를 전체 네트워크에 알리기 위함입니다.
따라서 이때 패킷은 broadcast로 날려집니다.
이를 통해 만약 다른 호스트가 중복되는 IP 주소를 설정했을 경우를 파악할 수 있고,
MAC 주소가 수정되었을 때 이를 알릴 수 있습니다.