[네트워크]APR

공부기록·2023년 12월 7일
0
post-thumbnail

🖥️ Address Mapping

  • packet이 전송될 때에는 logical 주소와 physical 주소가 필요하다. 이를 static 또는 dynamic mapping으로 연결시킬 수 있다.
  • 전에 TCP에서 보았듯이 ROUTING TABLE을 보면 다음 IP주소를 일 수 있고, IP주소를 알면 APR TABLE을 이용하여 MAC주소를 알 수 있다. 이는 hop-to-hop에서 이용된다.

🖥️ APR operation

APR Request

  • APR request is broadcast
  • 만약 destination의 IP주소만 알고 MAC주소를 모를 경우 broadcast를 이용하여 모두에게 전송한다.

APR Reply

  • APR reply is UNICAST
  • 해당하는 장치만 자신의 MAC주소를 넘긴다.

🔊 ARP 구조

HardwareProtocol
MACIP
Type10x0800
Len0x080x06
  • Operation Code
    • 1 : APR Request
    • 2 : APR Reply

🔊 APR packet의 캡슐화

  • Type은 상위계층의 프로토콜 정보이다.
    • IP : 0x0800
      • Data에 IP datagram이 존재한다.
    • ATP : 0x0806 (위 그림에서의 타입)
      • Data에 ARP packet이 존재한다.

ARP가 사용되는 4가지 CASE

Mac주소가 필요하다는 것은 Data Link Layer이므로 Frame 형태로 APR Packet을 전송한다.

  • 같은 네트워크에서 host to host
  • 다른 네트워크에서 host to router
  • 다른 네트워크에서 router to router
  • 같은 네트워크에서 router to host



ARP request & reply 과정

  • System A가 System B의 MAC주소를 모르는 상태이다. ARP 간의 전송이기에 Type은 0x0806이고 Destination address는 1로 설정하며 ARP의 Destination Hardware 주소는 전부 0으로 처리하여 Operation Code 1로 하여 ARP Request 형태로 보낸다.
  • System B가 자신의 MAC주소를 ARP에 담아 보낸다.

🔊 ARP Components

🏷️ Output module

Output module 슈도코드

ARP_Output_Module(){
	IP Packet이 도착하면 그 IP주소에 해당하는 데이터가 CACHE TABLE에 있는지 확인한다.
    if(존재하는 경우){
		if(상태가 R인 경우){
        	data-link layer에게 ARP packet(IP PACKET + MAC주소)을 전송한다.
        }
        if(상태가 P인 경우){
        	packet을 queue에 삽입한다.
        }
    }
    if (존재하지 않는 경우){
    	cache entry를 만들고 상태를 PENDING으로 설정하고 attempt를 1 증가시키낟.
        queue를 생성한다.
        queue에 packet을 삽입한다.
        ARP Request를 전송한다.
    }

🏷️ Input module

Input module 슈도코드

ARP_Input_Module(){
	ART Packet이 도착하면 해당 데이터가 존재하는지 cache table을 확인한다.
    if(존재하는 경우){
		if(상태가 P인 경우){
			while(queue가 채워지면){
            	packet을 queue에서 제거한다.
                packet은 pacekt과 MAC주소를 보낸다.
            }
        }
    if(존재하지 않는 경우){
		entry를 생성한다.
        entry를 table에 추가한다.
    {
    if(packet이 request인 경우){
    	ARP reply를 전송한다.
    }
}

🏷️ Cache module

주기적으로 table을 관리하고 오래 사용되지 않은 entry는 제거하고, request 전송 후 reply가 없으면 다시 request를 전송한다.


📑 Cache table

ARP_Cache_Control_Module(){
	timer동작시 시작
    {
    	if(state free){ continue {
        if(state Pending){
			attempt하나 늘리고
            if(시도가 최댓값과 같아지면){
				free로 바꾸고 queue 없앰
            }
            else{
            	ARP Request 보냄
            }
        if(state Resolved){
        	time-out 감소
            if(time-out값이 0보다 작으면){
            	free로 바꾸고 queue 없앰
            }
        }
    }
}	

  • State
    • R : Resolved - MAC주소 존재
    • P : Pending - request를 전송한 상태
    • F : Free - 빈 칸
  • Attemp
    • APR Request를 보낸 횟수
  • Time-out
    • table에서 entry를 삭제, 오래된 데이터가 생기는 것을 방지

0개의 댓글

관련 채용 정보