본문 바로가기
컴퓨터공학 & 정보통신/네트워크 & Cisco

[네트워크] ARP (Address Resolution Protocol) 이해하기

by TaeGyeong Lee 2024. 11. 17.

개요 

호스트 A가 호스트 B와 통신을 하기 위해서는 서로 MAC 주소, 즉 물리적 네트워크 주소를 알아야 합니다. ARP는 호스트 간 IP 주소를 알고 있지만 MAC 주소를 모르는 경우 사용하는 프로토콜 입니다. 

반대로, 호스트 간 MAC 주소를 알고 있지만 IP 주소를 모르는 경우 RARP 를 사용합니다.  

 

Address Resolution Packet 생성 및 전달 

ARP 에선 상호 간 MAC 주소를 알기 위해 Address Resolution Packet 을 생성합니다. 

호스트 A는 호스트 B의 MAC 주소를 알고 싶습니다. 따라서 호스트 A는 ARP를 수행하기 위한 패킷을 생성합니다. packet 안에 들어가는 데이터는 이외에 많으나 중요한 다섯 가지 정보만 소개하겠습니다. 

  • ar$op : 패킷의 종류
  • ar$sha : 호스트 A의 MAC 주소
  • ar$spa : 호스트 A의 IP 주소
  • ar$tha : 호스트 B의 MAC 주소 
  • ar$tpa : 호스트 B의 IP 주소 

ar$op

MAC 주소를 요청하는 패킷의 경우 1, MAC 주소를 업데이트하여 요청자에게 응답하는 패킷의 경우 2입니다. 위 상황에서는 호스트 A가 호스트 B의 MAC 주소를 요청하는 패킷이므로 값은 1입니다. 

 

ar$tha 

아직 우리는 호스트 B의 MAC 주소를 모릅니다. (이를 알기 위해 패킷을 보내는 거니깐요) 브로드캐스트 용 주소 FF:FF:FF:FF:FF 가 저장되어 있습니다. 호스트 A는 해당 패킷을 브로드캐스트하여 호스트 B가 해당 패킷을 잡을 수 있도록 할 예정입니다. 

마치 백화점에서 혼자 있는 아이를 찾기 위해 모든 층의 스피커를 통해 "00 군을 찾습니다" 라고 공지하는 것처럼요. 

 

Address Resolution Packet BroadCast 

호스트 A는 네트워크 상에 만든 패킷을 브로드캐스트 합니다. 

호스트 A가 만든 패킷을 감지한 호스트들은 ARP 규약에 따라 아래 논리를 수행합니다. 만약 아래 논리 조건 중 하나 이상을 만족하지 않는 경우 패킷을 버립니다. 백화점에서 혼자 있는 자기 애가 아니기 때문이죠. 

?Do I have the hardware type in ar$hrd?
Yes: (almost definitely)
  [optionally check the hardware length ar$hln]
  ?Do I speak the protocol in ar$pro?
  Yes:
    [optionally check the protocol length ar$pln]
    Merge_flag := false
    If the pair <protocol type, sender protocol address> is
        already in my translation table, update the sender
        hardware address field of the entry with the new
        information in the packet and set Merge_flag to true.
    ?Am I the target protocol address?
    Yes:
      If Merge_flag is false, add the triplet <protocol type,
          sender protocol address, sender hardware address> to
          the translation table.
      ?Is the opcode ares_op$REQUEST?  (NOW look at the opcode!!)
      Yes:
        Swap hardware and protocol fields, putting the local
            hardware and protocol addresses in the sender fields.
        Set the ar$op field to ares_op$REPLY
        Send the packet to the (new) target hardware address on
            the same hardware on which the request was received.

 

호스트 B 응답

그러나 모든 조건을 만족하는 호스트 B는 해당 패킷이 본인에게 필요한 패킷임을 인지했습니다. 백화점에 혼자 있는 애가 자기 애가 맞다는 거죠. 호스트 B는 자신의 MAC 주소를 ar$tha 에 업데이트합니다. 

 

패킷 재전송

호스트 B는 자신의 MAC 주소를 담은 패킷을 다시 호스트 A에게 돌려줍니다. 이로써 호스트 A는 호스트 B의 MAC 주소를 알게 되었습니다. 호스트 A는 호스트 B의 MAC 주소를 자신의 arp 테이블에 업데이트합니다. 

이로써 호스트 A는 ARP을 통한 Address Resolution Packet 생성, 호스트 B의 MAC 주소를 알아냈습니다. 

 

직접 확인 

windows, macOS 상관없이 아래 명령어를 통해 arp 테이블을 확인할 수 있습니다. 

arp -a

 

참고 자료 

 

주소 결정 프로토콜 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 주소 결정 프로토콜(Address Resolution Protocol, ARP)은 네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응(bind)시키기 위해 사용되는 프로토콜이다. 여기서 물리

ko.wikipedia.org

 

RFC 826: An Ethernet Address Resolution Protocol: Or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transm

The purpose of this RFC is to present a method of Converting Protocol Addresses (e.g., IP addresses) to Local Network Addresses (e.g., Ethernet addresses). This is an issue of general concern in the ARPA Internet Community at this time. The method proposed

datatracker.ietf.org