본문 바로가기
IT 이론/네트워크&무선통신

Address Resolution Protocol (ARP)

by 지식id 2014. 4. 24.
반응형

네트워크에 사용되는 주소는 두가지가 있다. 전세계적으로 통용되는 논리주소(IP주소)와, 각 네트워크 내에서 고유 식별을 위한 물리주소이다.


IP는 한 디바이스에 고유하게 속해 있는 것이 아니라 동적으로 할당되는 것이기 때문에 IP주소만 가지고 목적지로 찾아갈 수는 없다. 그 IP가 할당된 디바이스가 뭔지 알지 못하면 소용이 없기 때문이다. 실제로 네트워크는 IP를 이용해서 그 IP가 할당된 디바이스의 물리주소를 얻고, 물리주소를 통해서 찾아가는 방식을 취하고 있다. 

택배가 전달되는 과정을 생각 해 보자. 배달원은 이 택배가 "서울시 강남구 강남빌딩 3층 A사무실 홍길동" 앞으로 배달되어야 한다는 것을 알고 있다. 그래서 어찌어찌 사무실로 찾아갔는데 사람이 너무 많다. 이 중에서 누가 홍길동인지 알아야 물건을 전달 할 수 있는 것이다. 이때 택배원은 "홍길동씨가 누구인가요?" 라고 물어 보는 방법으로 홍길동이란 사람의 위치를 파악 해 낼 수 있다. 주소와 이름은 논리주소, 실제 그 사람이라는 물리적 개체가 위치한 곳은 물리주소가 되는 것이다.

이렇게 패킷 또한 논리주소를 통해 라우터를 거치고 거쳐 원하는 호스트가 위치한 네트워크로 들어왔지만 그 네트워크의 수많은 물리 매체 중 어디로 들어가야 할지는 알 수가 없다. 이를 알아내는 과정이 필요한 것이다.


그렇다면 네트워크에선 어떻게 논리주소로 물리주소를 알아 낼 수 있을까? 두가지 방법이 있다.


정적 변환 

각 시스템에서 논리 주소와 물리 주소 매핑 테이블을 저장해두고 테이블을 검색

매핑 정보가 변경 될 수 있기 때문에 주기적으로 갱신을 해 줘야 한다.


동적변환

둘 중 한 쌍을 이용하여 프로토콜을 통해 다른 한 쌍을 알아낸다.

ARP : 논리 주소를 이용해 물리 주소를 알아낸다.

RARP : 물리 주소를 이용해 논리 주소를 알아낸다.


대충 감이 오듯이, 택배원이 "홍길동씨가 누구죠?" 라고 묻는건 동적변환에 해당한다. 정적변환을 굳이 비유하자면, 이름과 얼굴이 적혀있는 서류를 들고가서 홍길동이라는 이름을 가진 사람을 얼굴을 확인 하여 찾아가는 방식이라고 할 수 있다. 듣기만 해도 불편해 보인다. 실제로 정적변환보단 동적변환이 많이 사용된다. 그래서 이 글의 제목도 ARP인것이다.


ARP의 동작과정

패킷이 서브넷에 도착하면 그 네트워크는 하위 호스트들에게 broadcast를 한다. "누가 154.154.55.1이냐?" 그럼 이 메세지를 들은 호스트 중 저 논리주소를 가지고 있는 호스트가 대답 할 것이다. "나다. 내 물리 주소는 A5AF5464F이다." 라고 응답한다.


Proxy ARP?

몇몇 호스트들이 특정한 프록시에 연결되어 있을 경우, 프록시가 대신 대답을 하고 그 프록시로 전달된 데이터를 프록시가 자기한테 속한 호스트에게 전달해 주기도 한다. 택배로 예를 들면 사무실 동료가 "아 제가 홍길동은 아닌데요, 제대 대신 전달해 주겠습니다." 라고 하는 것에 비유할 수 있을 것이다.





ARP Output Module

Receive an IP datagram from IP layer;

Check the cache table;

if(found) {

  if(state == RESOLVED) {

    extract hardware address from the entry;

    send the packet and hardware address;

    return;

  }

  if(state == PENDING) {  // 테이블을 봤으나 '찾는중' 이라고 되어있다.

    enqueue the packet // 미해결 대기열에 넣어둔다

    return;

  }

} else { // 테이블에 없는 놈일 경우

  create a queue; // 처음보는 목적지란 말이므로 새로운 큐가 생성 되어야 한다.

  enqueue the packet;

  create cache entry in table;

  send ARP request;

} return;


ARP Input Module

Receive an ARP packet from Data link layer;

Check the cache table;

if(packet == reply) {

  if(found) {

    if(state == PENDING) {

      update the entry // 찾고 있던걸 찾은 것이다. RESOLVED로 바꾼다.

      while(!isEmpty(queue)) {

        dequeue one packet;

        send the packet and hardware address;

      }

    } else if(state == RESOLVED) update the entry // 해결된게 있더라도 덮어씌운다. 최신 정보를 신뢰한다.

  } else {

    create an entry;

    add the entry to the table;

  }

} else {

  send the ARP reply;

} return;


ARP Cache Control Module

Sleep until the periodic timer matures;

for(each entry in cache table) {

  if(state == FREE) continue;

  if(state == PENDING) {

    attempt++;

    if(attempt > maximum) {

      state = FREE

      destroy the corresponding queue;

    } else send an ARP request;

  continue;

  }

  if(state == RESOLVED) {

    timeout = timeout - elapsed time;

    if(timeout <= 0) state == FREE;

  }

} return;

반응형

'IT 이론 > 네트워크&무선통신' 카테고리의 다른 글

ICMP Structure  (0) 2014.04.25
Internet Control Message Protocol (ICMP)  (0) 2014.04.25
IP Protocol Structure  (0) 2014.04.24
IP header options  (0) 2014.04.23
IPv4 Header  (0) 2014.04.23

댓글