ARP와 RARP 프로토콜

 

소개

 

컴퓨터 통신에서 말하는

논리 주소(Logical Address)는 TCP/IP 프로토콜 스위트에서 사용되는 IP 주소를 의미하고

물리 주소(Physical Address)는 NIC(Network Interface Card)에 고유하게 각인된 하드웨어에 구현된 주소를 말한다.

 

 

우리는 통신을 위해 IP나 MAC 주소를 대응해야 하는데,

수동으로 관리자가 대응 관계를 설정하면 정적 매핑, 프로토콜을 통해 자동으로 주소를 찾는 방법을 동적 매핑이라고 한다.

 

 

이와 같은 동적 매핑 프로토콜에는 ARP와 RARP가 있다.

 

 

 

ARP(Address Resolution Protocol)는 IP 주소(논리 주소)로부터 MAC 주소(물리 주소)를 찾아주는 프로토콜.

RARP(Reverse ARP)는 MAC 주소로부터 IP 주소를 알아내는 프로토콜이다. (현대에는 잘 쓰이지 않음)

 

 

 

 

 

 

 

ARP(Address Resolution Protocol) 동작 과정

 

 

System A(요청을 하는 측)가 특정 IP 주소에 해당하는 물리적 주소(MAC 주소)를 알고 싶어서 ARP 요청 패킷을 네트워크 상의 모든 호스트에게 브로드캐스트한다.

 

그럼 해당 IP 주소를 가진 System B가 자신이 대상임을 알게 되고, 자신의 MAC 주소를 ARP 응답 패킷으로 System A에게 유니캐스트(1:1 방식)로 보낸다.

 

간단히 말해서, 특정 IP에 맞는 MAC 주소를 찾기 위해 ARP 요청이 전체에게 퍼지고(IP→MAC 매핑), 그에 대한 응답은 해당 호스트가 단독으로 요청한 곳에만 보내는 과정이다.

 

 

 

 

 

 

이것은 ARP 패킷의 필드 구성을 보여주는 표이다.

ARP는 IP 주소에 대응하는 MAC 주소를 얻기 위해 사용되는데, 이 때 패킷 안에 다음과 같은 정보가 담겨 있다.

 

 

  • Hardware Type / Protocol Type:
    어떤 종류의 하드웨어와 프로토콜을 사용하고 있는지 나타내는 필드다.
    예를 들어 이더넷인 경우 하드웨어 타입은 1로 지정되고, 프로토콜 타입은 IP를 의미하는 0x0800 등을 사용한다.
  • Hardware length / Protocol length:
    하드웨어 주소(MAC 주소)의 길이(바이트 단위)와 프로토콜 주소(IP 주소)의 길이를 나타낸다.
    보통 이더넷에서는 하드웨어 주소 길이는 6바이트, IPv4 주소 길이는 4바이트
  • Operation (Request 또는 Reply):
    ARP 요청인지(1) ARP 응답인지(2)를 구분하는 필드다.
  • Sender hardware address / Sender protocol address:
    ARP 요청을 보내는 쪽(또는 응답을 보내는 쪽)의 MAC 주소와 IP 주소가 여기에 들어 있다.
    즉, “내가 누구이고(IP), 내 MAC이 뭐다”를 알리는 정보
  • Target hardware address / Target protocol address:
    목적지의 MAC 주소와 IP 주소를 나타내는 필드다.
    요청 패킷을 보낼 때는 Target hardware address(목적지 MAC 주소)를 아직 모르기 때문에 이 부분이 비어 있는 상태로 전송한다. 반면, 응답 시에는 여기에 요청자가 궁금해 했던 MAC 주소를 채워서 돌려주게 된다.

 

 

이렇게 ARP 패킷이 어떻게 IP와 MAC 주소 정보를 교환하고, 요청/응답을 구분하는지에 대한 흐름을 알아봤다.

실제로 ARP 패킷을 구성하는 필드는 다음과 같이 이루어져 있다.

 

 

  • HTYPE (16비트): 어떤 하드웨어 타입을 사용하는지 나타내는 필드. 이더넷일 경우 값은 1.
  • PTYPE (16비트): 어떤 프로토콜 타입을 사용하는지 나타냄. IPv4를 쓸 경우 값은 0x0800.
  • HLEN (8비트): 하드웨어(물리) 주소의 길이를 바이트 단위로 표시함. 이더넷에서는 6바이트이므로 값은 6.
  • PLEN (8비트): 프로토콜(논리) 주소의 길이를 바이트로 표시함. IPv4에서는 4바이트이므로 값은 4.
  • OPER (16비트): ARP 요청(1)인지 응답(2)인지 구분해주는 필드.
  • SHA (Sender Hardware Address): 요청 또는 응답을 보내는 쪽의 MAC 주소를 담고 있다.
  • SPA (Sender Protocol Address): 요청 또는 응답을 보내는 쪽의 IP 주소를 담고 있다.
  • THA (Target Hardware Address): 대상 호스트의 MAC 주소를 담는 필드. 요청 시에는 아직 모르는 값이라 비어 있고, 응답에서는 여기에 해당 MAC이 들어있다.
  • TPA (Target Protocol Address): 대상 호스트의 IP 주소를 담는 필드. 요청할 때 이미 알고 있는 IP 주소를 넣어, 그에 맞는 MAC 주소를 찾아내는 과정이 진행됨.

 

 

 

 

 

 

 

ARP 패킷이 이더넷 프레임 내부에 캡슐화되어 전송되는 과정이다.

 

네트워크 전송에서 ARP 요청이나 응답 메시지는 IP 패킷 형태로 전송되지 않고, 데이터 링크 계층인 이더넷 프레임에 직접 실려 전송된다.

 

즉, ARP 패킷은 이더넷 프레임의 '데이터' 영역에 삽입되며, 프레임의 Type 필드가 ARP를 나타내는 값(0x0806)으로 설정돼 있어 수신 측은 이를 보고 이더넷 프레임 안에 담긴 것이 ARP 패킷임을 알 수 있다.

 

 

 

핵심은 목적지 IP 주소에 따라 패킷을 어디로 보내는지, 즉 같은 네트워크 내의 호스트에게 직접 보내는지, 아니면 라우터를 거쳐 다른 네트워크로 보내는지의 판단 과정이다.

 

 

 

 

 

 

Case 1: 송신 호스트와 수신 호스트가 같은 네트워크(LAN) 상에 있을 때

송신자는 목적지 IP를 보고 동일 네트워크임을 판단하면, 해당 호스트의 MAC 주소를 ARP로 알아낸 뒤 직접 패킷을 전송한다. 여기서는 라우터가 필요 없다.

 

 

Case 2: 송신 호스트가 다른 네트워크로 패킷을 보내야 할 때

목적지 IP가 자기 LAN 외부에 있으므로, 송신 호스트는 기본 게이트웨이(라우터)의 IP 주소를 다음 홉으로 사용해 패킷을 전송한다.

즉, 패킷은 먼저 같은 LAN에 있는 라우터로 전달되고, 라우터가 다음 경로를 찾아 나간다.

 

 

 

 

 

Case 3: 라우터가 패킷을 받았는데, 목적지가 또 다른 네트워크에 있을 때

이 경우 라우터는 자신의 라우팅 테이블을 참조해 해당 목적지로 가는 가장 적합한 “다음 라우터(또는 네트워크)”를 찾아 패킷을 넘긴다.

즉, 여러 라우터를 거쳐 최종 목적지 네트워크로 전달되는 중간 과정이다.

 

 

Case 4: 라우터가 패킷을 받았고, 그 목적지가 라우터가 연결된 같은 네트워크 상의 호스트일 때

라우터는 바로 해당 호스트의 MAC 주소를 확인한 뒤, 패킷을 직접 같은 LAN 내의 목적지 호스트로 전달한다.

 

 

 

 

 

 

Proxy ARP

 

 

프록시 ARP를 수행하는 라우터는 특정 호스트들의 대신으로 ARP 요청에 응답해준다.

 

즉, 어떤 호스트가 특정 IP 주소의 물리 주소(MAC)를 몰라 ARP 요청을 보냈을 때, 해당 IP가 직접 연결된 네트워크 상에 있지 않더라도, 프록시 ARP 라우터가 자기 MAC 주소를 대신 보낸다.

 

그런 다음 실제 IP 패킷이 라우터로 들어오면, 라우터는 그 패킷을 원래 대상 호스트가 있는 다른 서브넷으로 전달해준다.

 

 

 

이렇게 라우터가 마치 해당 호스트들이 있는 것처럼 ARP 응답을 대리로 해주어, 호스트들이 별도의 라우팅 설정 없이도 패킷을 목적지까지 전달할 수 있도록 하는 프록시 ARP 동작 모습이다.

 

설명이 조금 애매한데 추가)

더보기

 

  • 호스트의 ARP 요청:
    • 어떤 호스트가 특정 IP 주소에 대한 MAC 주소를 요청합니다.
    • 하지만 이 IP 주소는 해당 호스트의 직접 연결된 네트워크에 존재하지 않을 수 있습니다.
  • Proxy ARP 라우터의 응답:
    • Proxy ARP를 설정한 라우터는 해당 IP 주소를 대신해서 자신의 MAC 주소를 응답합니다.
    • 즉, 라우터가 마치 해당 IP를 소유한 호스트처럼 속여서 자신의 MAC 주소를 반환합니다.
  • 패킷 전송:
    • 패킷이 라우터로 도착하게 됩니다 (ARP에 의해 라우터의 MAC 주소가 목적지로 설정됨).
    • 라우터는 실제 목적지 호스트가 있는 네트워크로 패킷을 전달합니다.
    • 즉, Proxy ARP는 라우터가 중간에 ARP 응답을 처리하고 패킷을 다른 네트워크에 전달하는 역할을 합니다.

 

 

 

 

 

 

IP와 데이터 링크 계층 사이에서 ARP가 동작하는 과정

 

 

각각의 모듈에 대해 알아보자.

 

 

캐시 테이블(Cache Table)

  • IP 주소에 대응하는 MAC 주소를 저장해두는 공간이다.
  • 한 번 매핑(IP→MAC)을 알아내면 일정 시간 동안 캐시에 저장해둔다.
  • 나중에 같은 목적지 IP로 패킷을 보낼 때는, 이미 알아낸 MAC 주소를 바로 사용하기 때문에 ARP 브로드캐스트를 매번 할 필요가 없다.

 

 

출력 모듈(Output Module) 동작 과정

  • IP 계층으로부터 패킷을 받으면, 먼저 캐시 테이블에서 해당 목적지 IP에 대한 MAC 주소 정보가 있는지 확인한다.
  • 이미 MAC 주소가 있는 경우(Resolved): 바로 이더넷(또는 해당 링크 레벨) 프레임에 실어 패킷을 전송한다.
  • MAC 주소 정보가 아직 없는 경우(Not Found): 해당 패킷을 대기열에 잠시 보관한 뒤(Queue), ARP 요청 패킷을 브로드캐스트로 보낸다.
  • MAC 주소를 요청한 상태(Pending): 이미 같은 목적지 IP를 위한 ARP 요청을 보냈지만 아직 응답을 못 받은 상태라면, 추가 패킷은 같은 대기열에 넣고 응답을 기다린다.

 

 

대기열(Queue)

  • ARP 요청 후 아직 MAC 주소를 알아내지 못했을 때, IP 패킷들을 잠시 보관하는 곳이다.
  • 나중에 ARP 응답을 받아서 MAC 주소를 획득하면, 대기열에 있던 해당 목적지로 가야 할 패킷들을 꺼내 즉시 전송할 수 있다.

 

 

입력 모듈(Input Module)

  • 외부에서 들어오는 ARP 요청/응답 패킷을 받아들이고, ARP 응답을 받으면 캐시 테이블을 업데이트한다.
    그 후 대기열에 보관했던 IP 패킷들을 MAC 주소를 포함해 전송하게 된다.

 

 

 

 

입력 모듈은 ARP 패킷(요청 또는 응답)이 도착할 때까지 대기한다.

패킷이 도착하면 캐시 테이블을 확인해 해당 IP 주소에 대한 기록이 있는지 본다.

 

 

  • 기록 있음(Found):
    • 상태가 PENDING이었다면, 지금 도착한 ARP 응답으로 MAC 주소를 알 수 있게 됐다는 의미다.
      이 때, 대기열에 있던 IP 패킷들을 꺼내 MAC 주소와 함께 데이터 링크 계층으로 내려 보내 전송을 재개한다.
    • 상태가 이미 RESOLVED였다면, 단순히 기존 정보를 갱신하는 정도로 처리한다.
  • 기록 없음(Not Found):
    • 새로운 항목을 만들고 테이블에 추가한다.
    • 만약 지금 온 패킷이 ARP 요청이라면, 필요한 경우 ARP 응답을 보낸다.

 

 

 

 

  •  

Cache-control Module은 일정 시간마다 실행되어 캐시 테이블의 각 엔트리를 검사한다.

 

  • 상태가 PENDING이면:
    • 재시도 횟수를 증가시키고, 재시도가 한계치보다 작다면 다시 ARP 요청을 보낸다.
    • 재시도 횟수가 한계를 넘으면, 해당 엔트리를 비우고 대기열도 제거한다(더 이상 해당 목적지에 대한 ARP 해석을 진행하지 않음)
  • 상태가 RESOLVED이면:
    • 타이머를 감소시키다가 유효 기간(time-out)이 지나면 해당 엔트리를 삭제(FREE)하고 대기열도 제거한다.

 

 

 

 

 

 

 

ARP 캐시(ARP 테이블) 중 한가지 예시다.

이 표에는 각각의 ARP 엔트리에 대한 상태와 관련 정보가 기록되어 있다.

 

 

  • State(상태):
    • R(Resolved): 해당 IP 주소에 대해 MAC 주소를 이미 알아낸 상태
    • P(Pending): 아직 MAC 주소를 알아내지 못하고 요청 중인 상태
    • F(Free): 엔트리가 사용되지 않는 비어있는 상태
  • Queue: 아직 MAC 주소를 몰라 대기하고 있는 IP 패킷의 수를 나타내는 칸
  • Attempt: MAC 주소를 알아내기 위해 ARP 요청을 보낸 횟수
  • Time-out: 해당 엔트리가 유효한 상태로 남아 있는 시간(초 단위), 시간이 지나면 엔트리를 제거하거나 재시도
  • Protocol Addr (프로토콜 주소): ARP 해석 대상이 되는 IP 주소
  • Hardware Addr (하드웨어 주소): 해당 IP와 연결된 MAC 주소. Resolved 상태일 경우 여기에 MAC 주소가 기재됨

 

 

 

 

 

 

 

 

 

RARP(Reverse Address Resolution Protocol)

 

 

일반적으로 호스트는 자신의 IP 주소를 알아야 IP 패킷을 만들고 전송할 수 있다.

그러나 일부 디스크가 없는 장비는 처음 부팅할 때 자신의 IP 주소를 모를 수 있다.

RARP는 이 상황을 해결하기 위한 프로토콜로, 호스트가 자신에게는 이미 알고 있는 물리 주소(MAC 주소)를 바탕으로 IP 주소를 동적으로 할당받을 수 있도록 도와준다.

 

 

호스트는 자기 MAC 주소를 포함한 RARP 요청을 네트워크 상에 브로드캐스트로 보낸다.

네트워크에 있는 RARP 서버는 이 요청을 받고, 해당 MAC 주소와 짝지어둔 IP 주소를 찾아서 호스트에게 유니캐스트(1:1) 형태로 응답을 보낸다. 이렇게 호스트는 자신의 IP 주소를 알게 된다.

 

 

 

 

 

 

 

RARP 패킷의 필드 구성을 나타낸 표다. RARP 요청과 응답 시 어떤 필드들이 어떻게 채워지는지를 보여준다.

 

 

Operation 필드 값은 RARP 요청 시 일반적으로 숫자 3으로, RARP 응답 시 일반적으로 숫자 4로 표시한다.

ARP에서 요청이 1, 응답이 2였던 것과 달리 RARP에선 요청 3, 응답 4를 사용한다.

 

 

Sender Hardware Address(발신자 물리 주소)는 RARP 요청을 보내는 장치의 MAC 주소를 나타낸다.

 

Sender Protocol Address(발신자 프로토콜 주소, 보통 IP 주소)는 RARP 요청 시엔 이 값을 모르는 상태여서(이 IP를 얻기 위해 요청을 보내는 것이므로), 이 칸을 비워둔다. 응답 때 서버가 여기에 IP 주소를 채워서 알려준다.

 

RARP 요청 시 Target Hardware Address / Target Protocol Address(목적지 물리/프로토콜 주소) 필드는 아직 채워지지 않는다. 요청을 받은 RARP 서버가 응답을 보내며 여기에 호스트가 사용할 IP 주소(Protocol Address)를 포함해 돌려주게 된다.

 

 

이런 구조를 통해 요청 패킷에서는 자신(발신자)의 MAC 주소는 알고 있지만 IP 주소 칸은 비워두고, RARP 서버가 응답 패킷에서 해당 MAC에 대응하는 IP 주소를 채워 돌려주는 과정을 알 수 있다.

 

 

 

 

 

 

RARP 패킷이 이더넷 프레임(Ethernet Frame)에 실려 전송되는 과정이다.

 

RARP 패킷은 RARP 요청 또는 응답 메시지를 의미한다. IP 주소를 모르는 호스트가 자신의 MAC 주소를 알려주고 IP 주소를 얻거나, 그 요청에 응답하는 패킷이 여기에 해당한다.

 

 

  • 이더넷 프레임 구조:
    • Preamble and SFD(8 bytes): 프레임 시작을 알려주는 비트 패턴
    • Destination address(6 bytes): 목적지 MAC 주소
    • Source address(6 bytes): 출발지 MAC 주소
    • Type(2 bytes): 프레임에 실린 상위 계층 프로토콜을 식별하는 필드
      • RARP의 경우 0x8035가 사용된다. (ARP는 0x0806, IP는 0x0800)
    • Data: 실제 RARP 요청/응답 패킷이 이 부분에 들어간다.
    • CRC(4 bytes): 프레임 오류 검출을 위한 체크섬

 

 

 

RARP 메시지는 이렇게 Ethernet 레벨에서 캡슐화(encapsulation)된다.

즉, RARP 패킷은 이더넷 헤더(목적지·출발지 MAC 주소, 타입 필드)와 CRC로 둘러싸인 형태로 전송되며, 타입 필드가 0x8035이면 수신 측은 내부 데이터가 RARP 패킷임을 알 수 있다.