Computer Network

2. ARP : Address Resolution Protocol

Beige00 2024. 12. 30. 17:43

1. Introduction

IP protocol은 다양한 물리적 네트워크 유형 간의 패킷 교환 상호 운용성을 제공하도록 설계되었다. 이를 가능하게 하기 위해 Network layer 소프트웨어에서 사용하는 IP 주소와 하단 계층에서 해석하는 MAC 주소 간 변환이 필요하다. 일반적으로 Network Interface HW는 하나의 고유 HW 주소를 가지고 있다. (Ex : 이더넷, 802.11의 랜카드의 경우 48비트 값)

하드웨어가 교환하는 프레임은 올바른 하드웨어 주소를 사용하여 올바른 NIH로 이동하여야하며 그렇지 않으면 데이터 전송이 불가능하다. 그러나 IPv4 network는 32비트 IPv4라는 자체 주소 체계를 HW 주소와 분리하여 별도로 사용한다. 호스트의 IP 주소를 아는 것 만으로는 하드웨어 주소를 사용하는 네트워크에서 프레임을 전송하기에 충분하지 않다. OS는 데이터를 직접 전송하기 위해 전송 대상의 하드웨어 주소를 알아야하는 것이다.

TCP/IP 에서는 ARP가 IPv4 주소와 HW 주소 간 dynamic mapping을 제공한다. ARP는 IPv4에서만 사용되며 IPv6의 경우 NDP를 사용한다.

중요한 점은 Network layer addr.와 Link layer addr.가 서로 다른 기관에 의해 결정된다는 사실이다. Network HW의 경우 주요 주소는 장치 제조업체가 사전에 정의하고 제작을 하며, 장치 내부의 영구 메모리에 저장되므로 변경이  어렵다. 따라서 특정 HW 기술에서 작동하도록 설계된 Protocol suite은 해당 HW의 고유 주소 유형을 사용해야한다. 반면, Network Interface의 IP 주소는 사용자나 네트워크 관리자가 필요에 따라 동적으로 설정할 수 있다. LAN에서 한 호스트가 다른 호스트로 IP datagram을 포함하는 이더넷 프레임을 보낼 때, 프레임이 도달할 인터페이스를 결정하는 것은 48 비트 이더넷 주소이다.

Address Resolution은 한 주소에서 다른 주소로의 매핑을 찾는 과정이다. TCP/IP Protocol suite에서 IPv4를 사용할 때, 이 과정은 ARP를 실행함으로써 이루어진다. (앞으로 이더넷 주소와 MAC 주소를 동일한 의미로 사용하겠다.)

ARP는 Network layer address에서 해당 HW address의 매핑을 제고한다. 


2. Example

예시를 하나 들어보겠다. 우리가 Chrome을 실행시켜 웹 페이지를 열 때, 로컬 컴퓨터는 우리가 관심 있는 서버에 어떻게 접근할 것인지 결정해야한다.

가장 먼저 고민해야할 점은 접근해야할 서비스가 로컬(같은 IP subnet의 일부 구성원), 원격 연결인지를 따지는 것이다. 만약 같은 그룹이 아닌 Foreign network에 존재하는 서비스라면, 최소 하나의 라우터를 거쳐야한다. ARP는 같은 IP 서브넷 내의 시스템에 도달할 때만 작동된다. 그러므로 ARP의 작동 예시를 들기 위해 로컬 서버에 Chrome이 연결한다고 해보자.

 

1. Direct Delivery and ARP
Direct Delivery는 IP datagram이 송신자와 동일한 IP prefix를 가진 IP 주소로 전송될 때 이루어진다. 즉, 동일한 IP subnet 내의 다른 노드에게 전송을 하는 상황이다.  만약 http://10.0.0.1 과 같이 연결을 시작하면 다음의 과정이 이루어진다.

 

a. 웹 브라우저는 URL 분석 특수 함수를 분석하여 호스트 이름이 포함되어 있는지를 확인한다. 만약 www.google.com 과과 같이 포함이 되어있다면 이를 IP 주소로 바꾸어야겠지만, 이는 나중에 다루겠다. 우선 http://10.0.0.1에는 포함되어있지 않으므로 32비트 IPv4 주소인 10.0.0.1을 사용한다. 

b. 브라우저는 TCP protocol에 10.0.0.1과의 연결을 설정하도록 요청한다.
c. TCP는 원격 호스트에 연결 요청 세그먼트를 보내기 위해 10.0.0.1로 IPv4 데이터그램을 전송하려 시도한다.

d. 10.0.0.1 주소가 송신 호스트와 동일한 네트워크 프리픽스를 사용한다고 가정하므로, 데이터그램은 라우터를 거치지 않고 해당 주소로 직접 전송될 수 있다.

e. IPv4 서브넷에서 이더넷 호환 주소 체계를 사용한다고 가정하면, 송신 호스트는 32비트 IPv4 대상 주소를 48비트 이더넷 스타일 주소로 변환해야한다. 즉, 논리 인터넷 주소를 물리 HW 주소로 변환하는 작업이 필요하다. 이 때 ARP의 역할이 들어간다. ARP는 Broadcast network에서만 정상적으로 작동한다.(즉, 최대 LAN 단위.) 

f. ARP는 ARP request라는 이더넷 프레임을 Link layer 세그먼트에 연결된 모든 호스트로 전송한다. (Link layer broadcast) ARP 요청은 대상 호스트(10.0.0.1)의 IPv4 주소를 포함하며, IPv4 주소 10.0.0.1로 구성된 호스트라면 MAC 주소를 적어서 응답하라는 요청을 포함한다. 

g. ARP를 사용할 때, 동일한 Broadcast 도메인에 있는 모든 시스템은 ARP 요청을 수신한다. 여기에는 IPv4 또는 IPv6 프로토콜을 전혀 실행하지 않는 시스템도 포함될 수 있지만, VLAN이 지원되는 경우 다른 VLAN에 있는 시스템은 논리적으로 독립된 네트워크이므로 포함되지 않는다. 요청에 지정된 IPv4 주소를 사용하는 연결 시스템이 존재한다면, 해당 시스템은 MAC 주소를 포함하여 응답한다. 응답의 경우에는 unicast이다. ARP 요청을 받은 호스트는 이 과정에서 송신자의 IPv4-to-MAC 주소 매핑을 학습하고 이를 나중에 사용하기 위해 메모리에 기록한다.

h. ARP Request/Reply 교환을 통해 얻어진 응답은 원래 요청을 보낸 송신자가 수신한다. 이 후에는 데이터그램의 전송이 가능해진다.

i. 송신자는 이제 해당 데이터그램을 이더넷 프레임으로 캡슐화하고 ARP 교환을 통해 얻은 이더넷 주소를 대상 이더넷 주소로 사용하여 직접 전송한다. 애초에 같은 IP 서브넷에 있다고 가정하였기 때문에 라우터의 개입은 없다.


3. ARP Cache

Dynamic은 ARP에 의해 학습되었음을 의미한다.

ARP를 매 연결마다 불러서 사용하는 것은 매우 비효율적인 일이다.  보통의 연결은 일회성이 아니라 최소 분 단위로 지속되는 경우가 많고, 이에 따라 각 호스트와 라우터에는 ARP cache(Table)을 유지하는 것이 필수적이다. 이 캐시는 address resolution을 사용하는 각 인터페이스에 대해 네트워크 계층 주소에서 하드웨어 주소로의 최근 매핑을 저장한다. (보통 캐시의 기본 만료 시간은 20분으로 설정된다.)


4. ARP Frame Format

 

상단의 그림은 IPv4 주소를 해석하기 위해 이더넷 네트워크에서 사용되는 ARP request와 reply 패킷의 형식이다. (엄밀히 이야기하면 ARP는 IPv4 주소 이외에도 다른 주소와 사용이 가능하지만 사실상 사용되지 않는다.)

첫 14 바이트는 표준 이더넷 헤더를 구성하며, 802.p/q 또는 기타 태그가 없다고 가정한다. MAC Header 이후에는 ARP 프로토콜에 의해 정의된다.

ARP 프레임의 첫 8바이트는 일반적인 형식을 가진다.

Hard Type 필드는 HW 주소의 유형(이더넷의 경우 1), Prot Type은 매핑하려는 프로토콜 주소의 유형이다. (IPv4의 경우 0x0800) Hard Size 필드는 HW 주소의 크기를 바이트 단위로 지정하며 Prot Size 필드는 프로토콜 주소의 크기를 바이트 단위로 정의한다. (Ethernet to IPv4일 경우 6, 4). OP 필드는 ARP request 1, ARP reply 2로 작업 유형 정보가 들어간다.

이 후 4개의 필드는 송신자, 수신자의 HW, Protocol 주소를 담는다.

여기서 ARP Request의 경우 송신자가 수신자의 명확한 HW 주소를 알지 못한다. 따라서 ARP Request의 경우 Target Hardware Address는 0으로 채워져있다.


5. ARP Cache Timeout

ARP 캐시의 각 항목에는 일반적으로 timeout이 설정된다. 보통 20분의 타임아웃을 설정하며 이는 soft state의 사례 중 하나이다. soft state란 특정 timeout 전에 갱신되지 않으면 폐기되는 정보를 의미한다. 많은 인터넷 프로토콜이 soft state를 사용하는 이유는 네트워크 조건이 변경되었을 때 이를 감지하고 자동 재구성을 시작하기 위해서이다. 이 soft state의 비용은 상태가 만료되지 않도록 갱신해야하는 유지비가 들어간다.


6. Proxy ARP

Proxy ARP는 한 시스템(일반적으로 라우터)이 다른 호스트를 대신하여 ARP Request에 Reply하게 하는 기능이다. 이는 ARP 요청을 보낸 송신자 측이 대리 응답한 시스템이 실제 대상 호스트라고 속일 수 있는 기능이다. 이 경우 실제 호스트는 다른 곳에 있을 수도 있고 존재하지 않을 수도 있다.

Proxy ARP는 또한 promiscuous ARP 또는 ARP hack이라고 불린다. 이 경우, 두 물리적 네트워크는 동일한 IP 프리픽스를 사용할 수 있으며 중간의 라우터가 Proxy ARP 에이전트로 구성되어 한 네트워크에서 다른 네트워크의 호스트에 대한 ARP request에 응답하게 된다. (한 그룹의 호스트를 다른 그룹으로부터 숨기는데 이용될 수 있다.)


7. Gratuitous ARP and Address Conflict Detection (ACD)

ARP의 또 다른 기능은 Gratuitous ARP 이다. 이는 호스트가 자신의 주소를 찾기 위해 ARP Request를 보낼 때 발생한다. 주로 인터페이스가 부팅 시점에 up으로 설정될 때 수행된다.

ARP Request 필드를 보면, 송신자 프로토콜 주소와 수신자 프로토콜 주소가 10.0.0.56으로 동일하다. 또한 이더넷 헤더의 소스 주소 필드 0:0:c0:6f:2d:40은 송신자의 하드웨어 주소와 동일하다. Gratuitous ARP는 다음 2가지 목표를 설정한다.

 

1. 다른 호스트가 동일한 IPv4 주소로 이미 구성되어 있는지 확인할 수 있다. Gratuitous ARP를 전송하는 호스트는 Request에 대한 Reply는 기대하지 않는다. 그러나 reply가 온다면 LAN 내에 동일한 IP 주소로 구성된 다른 노드가 있다는 것이다. 이는 오류이며 시스템 관리자와 사용자에게 동일한 broadcast domain에 있는 시스템 중 하나가 잘못 구성되었음을 경고한다.

2. Gratuitous ARP를 전송하는 호스트가 방금 하드웨어 주소를 변경한 경우(ex:LAN 카드 등 Network Interface를 교체하였을 경우), 이 프레임은 브로드캐스트를 수신한 다른 호스트가 캐시에 이전 하드웨어 주소에 대한 항목이 있을 경우 이를 업데이트하도록 한다. 호스트가 이미 자신의 캐시에 있는 IPv4 주소로부터 ARP request를 수신하면 해당 캐시 항목은 요청에서 받은 송신자의 HW 주소로 업데이트된다. Gratuitous ARP는 이 동작을 활용하는 것이다.

 

Gratuitous ARP는 여러 station이 동일한 IPv4 주소를 사용하려하고 있음을 어느정도 알려줄 수 있지만, 이에 대응하는 메커니즘은 제공하지 않는다. 이를 해결하기 위해 IPv4 주소 충돌 감지(ACD)를 정의한다. ACD는 ARP Probe, ARP Announcement를 정의한다.

ARP Probe는 송신자의 IPv4 주소 필드가 0으로 설정된 ARP Request packet이다. 이는 Broadcast domain 내에서 후보 IPv4 주소가 다른 시스템에 의해 사용되고 있는지를 확인하는데 사용된다. 송신자의 Prot 주소 필드를 0으로 설정하면 후보 IPv4 주소가 이미 다른 호스트에서 사용 중일 경우 발생할 수 있는 캐시 오염을 방지한다. 

ARP announcement는 ARP probe와 동일하지만, 송신자 및 대상 프로토콜 주소 필드가 모두 후보 IPv4 주소로 채워져 있다. 이는 송신자가 해당 후보 IPv4 주소를 자신의 주소로 사용하려는 의도를 알리는데 사용된다.

보통은 인터페이스가 활성화되거나 절전 모드에서 해제될 때 또는 새로운 링크가 설정될 때 ARP probe를 전송한다. 최대 3개의 probe packet을 전송하며 각 probe는 1~2초의 균등 분포 랜덤의 간격을 둔다.

Probe를 보내는 동안 요청을 보낸 station은 ARP request 또는 reply를 수신한다. probe에 대한 응답은 다른 station이 이미 후보 IP 주소를 사용하고 있음을 나타낸다. 만약 같은 Broadcast domain 내에서 주소 획득 충돌이 10회 발생하면 혼잡 상태로 간주, Rate-limiting phase에 들어간다. 이 단계에서는 60초에 한 번 씩만 ACD를 수행하게 된다.


8. Attacks Involving ARP

ARP를 대상으로 한 공격 역시 존재한다. 가장 간단한 사례는 Proxy ARP 기능을 이용해 특정 호스트로 가장하여, 해당 호스트에 대한 ARP Request를 가로채는 것이다. 피해 호스트가 네트워크에 없는 경우, 이 공격은 탐지되지 않을 가능성이 높다. 또 다른 ARP 공격은 static entries의 처리를 악용하는 것이다. 특정 IP 주소에 해당하는 MAC 주소를 찾는 과정에서 ARP Request/Reply를 피하기 위해 static entries를 사용할 수 있다. 특히 중요한 호스트의 ARP 캐시에 static entries를 미리 설정하여 해당 IP 주소로 가장하는 호스트를 바로 탐지하는 방식으로 운용이 가능하다. 그러나 대부분의 ARP 구현은 ARP Reply로 제공된 항목이 정적으로 캐싱되어있는 항목을 대체하도록 설계되어있다. 공격자가 ARP request를 보내지 않은 장치에 ARP reply를 그냥 보내도 static entries가 대체되어버리는 공격이 가능해지기에 심각한 보안 취약점이 된다. 이러한 공격은 ARP의 설계적 한계이며 ARP filtering 등의 옵션을 통해 막을 필요가 있다.

'Computer Network' 카테고리의 다른 글

4. System Configuration: DHCP & Autoconfiguration - 1  (0) 2025.01.17
3. The Internet Protocol (IP) - 2  (0) 2025.01.14
3. The Internet Protocol (IP) - 1  (0) 2025.01.08
1. Link Layer - 2  (0) 2024.12.26
1. Link Layer - 1  (0) 2024.11.27