ARP란?

Ehigh·2024년 11월 18일

의미

ARP(Addrss Resolution Protocol / 주소 결정 프로토콜)은, 논리적 주소(IP 주소)를 물리적 주소(MAC 주소)로 바꿔 주는 프로토콜이다.

사실, 데이터 전송 시 최종적으로 필요한 것은 목적지 호스트의 MAC주소이다.
우리가 다른 로컬 네트워크에 있는 컴퓨터에게 데이터를 보낼 때
해당 네트워크까지 가는 과정(네트워크 간 이동)에서 IP주소가 쓰이고,
그 후 목적지 호스트까지 가는 과정(네트워크 내 이동)에서 MAC주소가 쓰인다.

호스트
네트워크상에 연결되어 있는 컴퓨터

데이터가 목적지 컴퓨터가 있는 네트워크에 도착하면(=해당 네트워크의 라우터에 도착하면), 라우터는 목적지 IP주소를 바탕으로 그 네트워크 안에서 해당 IP주소를 가진 컴퓨터의 MAC주소를 찾는다. 이 때 사용되는 것이 ARP이다.

ARP 패킷 구조

  • Hardware Type : 하드웨어 주소 유형. 네트워크 유형을 나타냄. Ethernet 사용 시 1이다.

  • Protocol Type : 매핑 대상인 프로토콜 주소의 유형. IPv4는 0x0800

  • Hardware Address Length : 하드웨어 주소(여기선 MAC주소) 길이. 6 (=byte 기준 값)이다.

  • Protocol Address Length : 프로토콜 주소 길이. IPv4는 4다.

  • Operation Code : ARP의 구체적인 동작을 나타낸다. ARP 과정에서는 1 or 2의 값을 갖는다.

  • 그 이후로, 송/수신자의 Hardware 주소(여기선 MAC주소), Protocol 주소(IP주소)가 이어진다.

ARP 동작 과정

호스트 A에서 호스트 B로 패킷을 보내려 할 때,

  1. 호스트 A는 네트워크 마스크를 사용해서, 호스트 B가 같은 네트워크상에 있는지 확인한다.

같은 네트워크상에 있다면, ARP 캐시 테이블이라는 IP:MAC 정보를 저장하는 캐시를 활용하거나, ARP를 수행해 목적지 호스트를 찾고, 패킷을 전송한다.
다른 네트워크에 있다면, 먼저 호스트 B가 있는 네트워크까지 패킷을 전송한 후, 동일한 과정을 수행한다.

패킷

네트워크에서 데이터를 주고받을 때 사용하는 데이터 조각
사용자들이 전달하는 데이터 외에도, 전송 과정 중 각 계층에서 사용하는 부가정보들(ex. 목적지 IP, MAC주소 등)이 포함된다.

ARP 캐시 테이블

IP주소와 MAC주소의 매핑 관계를 일정 시간동안 저장하고 있는 테이블.
목적지의 MAC주소를 모르는 경우 ARP 요청을 로컬 네트워크 전체에 BroadCast로 보내는데, 이를 매번 수행한다면 데이터 전송 시간이나, 네트워크 대역폭도 잡아먹게 되므로 캐시를 사용한다.

다른 네트워크에 있을 때
2. 현재 네트워크의 라우터(라우터 A라고 하자.)로 패킷을 전송한다. (호스트 A -> 라우터 A)

  1. 라우터는 호스트 B가 있는 네트워크의 라우터(라우터 B라고 하자.)로 패킷을 전송한다. (라우터 A -> 라우터 B)

  2. 라우터 B는 아래에 설명할 과정과 동일하게, ARP 캐시를 사용하거나, ARP과정을 수행하여 호스트 B의 MAC주소를 알아낸 후, 패킷을 전송한다. (라우터 B -> 호스트 B)

같은 네트워크상에 있을 때

  1. 호스트 A는 자신의 ARP 캐시 테이블에 호스트 B의 MAC주소가 있는지 확인한다.

ARP 캐시에 있다면, 거기서 호스트 B의 MAC주소를 알아내어 패킷에 세팅한 후, 전송한다.
없다면, ARP과정을 수행해서 호스트 B의 MAC주소를 알아낸 후, 전송한다.

ARP 캐시에 없을 때, ARP 수행 과정

  1. ARP 요청을 Broadcast로 보낸다. 이 때 각 필드의 값은 다음과 같다.
    • Ethernet Dest Address : ff:ff:ff:ff:ff:ff (Broadcast Address)
    • Src MAC, IP : 호스트 A의 MAC, IP
    • Dest IP : 호스트 B의 IP
    • Dest MAC : 현재 모르므로, 00:00:00:00:00:00 (Broadcast)
  1. 스위치가 해당 패킷을 수신하면, Broadcast임을 확인하고 수신 포트를 제외한 모든 포트로 패킷을 뿌린다.

  2. 해당 패킷을 받은(=같은 로컬 네트워크에 있는) 호스트들은, 송신자의 IP:MAC 정보를 자신의 ARP 캐시 Entry에 추가 or 업데이트한다.(ARP Refinement)

  3. 수신한 호스트들은 패킷의 Dest IP와 자신의 IP가 일치하는지를 체크하고, 불일치하면 버리고, 일치하면 ARP Reply를 유니캐스트로 보낸다. 즉, Src와 Dest의 IP, MAC 주소를 명시하여 보낸다.

  4. 스위치는 자신의 MAC 주소 테이블에서 Dest MAC 주소에 해당하는 포트를 찾아 거기로 패킷을 전송한다. 만약 그 사이에 MAC 테이블이 초기화되어 해당 MAC주소 정보가 없다면, Flooding 후 Dest 호스트의 응답을 통해 MAC 테이블에 해당 MAC 주소 정보를 다시 추가할 것이다.

    스위치의 Flooding

    스위치는 전송해야할 패킷의 MAC주소 정보가 자신의 MAC주소 테이블에 없으면, 모든 포트로 데이터를 전송한다.
    MAC주소 테이블은, 스위치가 연결된 호스트들의 MAC주소 : 포트번호 정보를 저장하고 있는 테이블이다.

  5. ARP Reply를 받은 호스트 A는, ARP 캐시 테이블에 호스트 B의 MAC 주소 정보를 추가한다.

  6. ARP 프로세스는 끝나고, Ethernet 프레임의 Dest Address(=2계층 프로토콜이므로 MAC 주소이다.)에 호스트 B의 MAC 주소를 채워서 패킷을 전송한다.


ARP Request는 hop by hop으로 필요할 때마다 발생한다.
정확히는, hop 구분이 의미가 없을 것이다. LAN 안에서의 통신이라서 A호스트가 B호스트를 찾는 경우든, 네트워크 간 통신이라서 라우터가 B호스트를 찾는 경우든 한번의 통신(hop 간)으로 이뤄질 것이기 때문이다.

즉, 데이터 전송 경로가
host A -> router A -> router B -> host B
와 같고 ARP 캐시 테이블이 없다고 할 때,

  1. host A <-> router A (ARP 수행)
  2. host A -> router B (데이터 전송)
  3. router A -> router B (Routing)
  4. router B <-> host B (ARP 수행)
  5. router B -> host B (데이터 전송)

과 같은 과정이 될 것이다.

참고 링크

0개의 댓글