Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Address Resolution Protocol

주소 결정 프로토콜(Address Resolution Protocol, ARP)은 네트워크 상에서 IP 주소와 MAC 주소를 매핑하기 위해서 사용한다.

ARP는 요청과 응답으로 구성된 프로토콜로 "라우팅되지 않는" 단일 네트워크에서만 작동하는 프로토콜이다. OSI7 계층의 2 계층 프로토콜로 볼 수 있겠는데, IP와 MAC 주소를 캡슐화하기 때문에 L2와 L3 사이에 있는 프로토콜로 묘사하기도 한다. 어쨋거나 ARP는 OSI 프레임워크에서 개발하는 프로토콜은 아니다.

패킷 구조

ARP는 하나의 주소를 확인하기 위한 요청 혹은 응답을 포함하는 간단한 프로토콜이다. ARP 메시지의 크기는 ARP가 작동하는 네트워크의 상하위 계층의 주소체계에 따라서 달라진다. 예컨데, IPv4를 사용하는지 IPv6를 사용하는지에 따라서 ARP의 크기도 달라진다. 아래는 ARP 패킷의 대략적인 구조다. 대략적이라고 한 이유는 필드의 크기가 변할 수 있기 때문이다.

헤더의 각 필드들에 대한 설명이다.
Hardware type 네트워크 프로토콜의 타입이다. 예를 들어 이더넷은 1 이다.
Protocol type Internetwork 프로토콜의 타입. IPv4는 0x0800 이다.
Hardware length 하드웨어 주소(MAC)의 길이. 이더넷은 6
Protocol address length 상위 레이어 프로토콜의 주소길이. IPv4는 4.
Operation 1은 요청, 2는 응답
Source hardware address 요청을 보내는 측의 MAC
Source IP address 요청을 보내는 측의 IP 주소
Target hardware address 응답을 보내는 측의 MAC
Target IP address 응답을 보내는 측의 IP 주소

예제

여기 FooBar라는 두개의 컴퓨터가 있다. 이들 컴퓨터는 이더넷 케이블과 네트워크 스위치를 통해서 LAN(local area network)로 묶여있다. 즉 gateway나 router없이 Foo에서 Bar로 패킷을 보낼 수 있다.
  • Foo의 IP 주소는 192.168.0.55 다.
  • Bar의 IP 주소는 192.168.0.66 이다.
  • Foo의 MAC 주소는 EE:EE:EE:EE:EE:EE 다.
  • boo의 MAC 주소는 BB:BB:BB:BB:BB:BB 다.
  • Foo는 Bar로 패킷을 보내려고 한다.
  • Foo는 Bar의 IP 주소가 192.168.0.66 이라는 걸 알고 있다. 네트워크 관리자가 알려줬겠지
Foo가 Bar로 패킷을 보내려면 IP 주소와 함께 MAC 주소도 알고 있어야 한다. 먼저 Foo는 ARP 캐쉬 테이블에 192.168.0.66의 MAC 주소인 BB:BB:BB:BB:BB:BB 가 저장돼 있는지 찾는다. 만약 MAC 주소를 발견했다면 Foo는 IP 패킷을 전송한다. 만약 ARP 캐쉬테이블에 192.168.0.66의 MAC 주소가 저장돼 있지 않다면, Foo는 ARP 메시지를 브로드 캐스팅 한다. 이때 Target MAC 주소는 FF:FF:FF:FF:FF:FF로 설정해서 보낸다. 이 패킷은 local area network에 있는 모든 컴퓨터에서 전송된다. Bar도 ARP 요청을 받을건데, 자신의 IP 주소 192.168.0.66 과 MAC 주소 BB:BB:BB:BB:BB:BB 을 ARP 응답에 실어서 Foo에게 보낸다. 응답을 받은 Foo는 ARP 테이블에 <192.168.0.66, BB:BB:BB:BB:BB:BB>를 저장한다.

ARP probe

ARP probe는 sender의 IP주소를 0으로 해서 ARP 요청을 전송한다. IPv4 주소의 충돌을 감지하기 위해서 사용한다. 컴퓨터가 IPv4 주소를 이용하려고 할 때(메뉴얼 설정 혹은 DHCP 설정등으로), 자신이 사용할 주소가 이미 사용중인지를 판단하기 위해서 ARP probe 패킷을 발송한다.

ARP announcements

ARP는 announcement 프로토콜로도 사용할 수 있다. 이 기능을 이용하면 호스트의 IP주소나 MAC 주소가 변경될 때, 다른 호스트의 ARP 테이블 정보를 갱신할 수 있다. ARP는 destination hadrdware address를 0으로 설정하고 destination protocol address 필드에 source protocol address 값을 설정해서 브로드캐스팅 한다. ARP announcement를 받은 호스트는 Source Hardware address와 중복되는 값을 찾아서 값을 변환한다.

ARP announcements는 요청에 대한 응답을 필요로 하지 않는다. 대신 요청을 받은 호스트는 ARP 테이블에 있는 캐시 항목을 업데이트 한다.

대부분의 운영체제들이 부팅하는 동안에 ARP announements를 수행한다. 운영체제들이 올라오면 이전의 IP - MAC 값이 변경될 수 있는데, 이 값을 다른 호스트에 알려줌으로써 IP - MAC 불일치로 발생할 수 있는 문제를 해결하는데 도움을 준다.

ARP mediation

Inverse ARP와 Reverse ARP

ARP는 IP를 알고 있는 상태에서, IP에 대한 MAC 주소를 알아내기 위해서 사용한다. Reverse ARP는 반대로 MAC주소에 대한 IP주소를 알아내기 위해서 사용한다.

ARP spoofing and Proxy ARP

Alternatives to ARP

각 컴퓨터는 자신의 ARP 테이블에 L3 주소(보통 IP주소)와 L2 주소(Ethernet MAC 주소)정보를 관리한다. 모든 현대적인 컴퓨터들은 ARP 패킷을 로컬 네트워크에 브로드 캐스팅하는 것으로 테이블을 유지한다. 오래전에 브로드캐스팅이 매우 많은 자원을 소모한다고 생각하던 시절이 이었다. 그래 비용을 줄이기 위해서 설정파일로 테이블을 유지하던 때가 있었다. 1980년 이전의 이야기다. 그런 시절도 있었구나 정도로 넘어가면 될듯.

ARP Stuffing

관련문서