ARP Protocol
ARP 프로토콜
- Address Resolution Protocol의 준말이다.
- IP 주소(L3 주소, 논리 주소)를 받아 Link 주소(L2 주소, 물리 주소)를 알아내는 프로토콜이다.
- 호스트나 라우터로 패킷을 전달하기 위해선, 해당 패킷에 논리 주소와 물리 주소가 모두 저장되어 있어야 하며,
논리 주소를 물리 주소로, 물리 주소를 논리 주소로 변환하는 작업도 필요하게 된다.
(이러한 상호 변환에는 Static Mapping과 Dynamic Mapping이 있다.)
- ARP는 Dynamic Mapping을 수행하기 위한 Protocol이다.
* 논리 주소 (Logical Address)
- S/W적으로 구현된 주소로, 전세계의 네트워크에서 한 호스트의 논리 주소는 유일하다.
- 특히, TCP/IP 프로토콜에서의 논리 주소를 IP Address 라 부른다.
* 물리 주소 (Physical Address)
- H/W적으로 구현된 주소로, 물리 주소는 해당 Local Network내에서만 유효한 Local Address이다.
- 대표적인 물리 주소 중 하나로, Ethernet이나 Token Ring에서의 48Bit MAC Address가 있다.
* ICMP
- 오류신호 전송 프로토콜이다. 여기서 C는 Control을 의미한다.
* IGMP
- 멀티캐스팅(Join/Leave) 프로토콜이다. 여기서 G는 Group을 의미한다.
Static Mapping (정적 변환)
- 정적 변환 방법에서는 논리 주소와 물리 주소가 Mapping되어 있는 Table을 이용하여 변환한다.
- 이러한 Table은 Network Device들에 저장되어 있다.
※ Restrictions
- Network Device의 NIC(Network Interface Card)를 교체하여 새 물리 주소가 생기는 경우
- LocalTalk과 같은 LAN에서와 같이 컴퓨터가 부팅될 때 마다 물리 주소가 변경되는 경우
- Mobile 컴퓨터와 같이 네트워크를 이동하면서 물리 주소가 계속 변경되는 경우
- 위와 같은 한계에 대응하여, Table을 주기적으로 Update해야하는데,
이러한 Update는 네트워크에 매우 큰 Overhead로 작용하게 된다.
Dynamic Mapping (동적 변환)
- 한 호스트가 다른 Device의 논리 주소만 알고 있는 경우, 해당 논리 주소를 통해 물리 주소를 알아내는 방식이다.
- ARP는 논리 주소를 물리 주소로 Dynamic Mapping하는 프로토콜이고,
RARP는 물리 주소를 논리 주소로 Dynamic Mapping하는 프로토콜이다.
- 현재 RARP는 DHCP로 대치되어 사용되지 않는 추세이다.
* DHCP (URL)
ARP Usage (ARP가 필요한 경우)
- ARP 프로토콜은 아래와 같은 4가지 경우에서 사용된다.
- ARP는 Receiver의 논리 주소를 알고있다는 가정하에 수행되는데,
Receiver의 논리 주소를 알고 있을 수 밖에 없는 이유는
ARP가 반드시 아래 4가지 경우 중 한 경우에서 수행되기 때문이다.
Case 1. 한 호스트가 같은 Physical Network상의 다른 호스트에게 메시지를 전송하고자 하는 경우
- 이 경우, 두 호스트는 같은 물리 네트워크상에 있기 때문에 Receiver Host의 논리주소는 이미 알고 있는 상태이다.
- 즉, Receiver의 물리 주소만 상황이므로, ARP 프로토콜을 사용해야 한다.
Case 2. 한 호스트가 다른 Physical Network상의 호스트에게 메시지를 전송하고자 하는 경우
- 이 경우, Sender는 자신의 Routing Table(Static Routing Table)을 참조하여
인접한 Router로의 NHA 주소(=인접한 라우터의 논리 주소)를 알아내어
이를 ARP를 통해 물리 주소로 변환한다.
- Sender에게 Routing Table이 없다면, Default Router의 논리 주소를 ARP를 이용하여 물리 주소로 변환한다.
- 즉, Case 2에서는 인접한 Router의 논리 주소가 ARP를 통해 물리 주소로 변환된다.
Case 3. 한 Router가 다른 Router에게로 메시지를 전송하는 경우
- 즉, 메시지가 네트워크 상의 중간경로에 위치한 경우이다.
- 이러한 경우, Sender Router는 Routing Table(Dynamic Routing Table)을 참고하여
Receiver Router로의 NHA(=Receiver Router의 논리 주소)를 알아내고,
이 NHA를 ARP를 이용하여 물리 주소로 변환한다.
Case 4. 한 Router가 자신의 관활내에 있는 호스트에게로 메시지를 송신할 경우
- 즉, 메시지가 다수의 물리 네트워크를 거쳐 Receiver에게로 도착하는 경우이다.
- 이 경우, Receiver의 논리 주소가 ARP를 통해 물리 주소로 변환된다.
ARP Packet (ARP 패킷)
Hardware Type (16Bit)
- ARP가 수행되고 있는 네트워크의 유형을 정의하는 필드이다.
- 예를 들어, Ethernet의 경우, H/W Type 값은 1이다.
- ARP는 어떠한 Physical Network에서도 사용될 수 있다.
Protocol Type (16Bit)
- 프로토콜을 정의하는 필드이다.
- 예를 들어, IPv4의 Protocol Type은 0x0800이다.
- ARP는 어떠한 상위 Layer Protocol과도 호환이 가능하다.
Hardware Length (8Bit)
- 물리 주소의 길이를 바이트 단위로 정의하여 저장하는 필드이다.
- 예를 들어, Dotted-Decimal 주소 체계(6Byte)를 사용하는 Ethernet의 경우, H/W Length값은 6이다.
Protocol Length (8Bit)
- 논리 주소의 길이를 바이트 단위로 정의하여 저장하는 필드이다.
- 예를 들어, IPv4의 Protocol Length는 4이다.
Operation (16Bit)
- ARP Request Packet의 경우, Operation 필드에는 1이 저장되고,
ARP Reply Packet의 경우, Operation 필드에는 2가 저장된다.
Source Hardware Address (Variable Length)
- 송신자의 물리 주소가 저장되는 가변길이 필드이다.
- 예를 들어, Ethernet에서 이 필드는 6Byte가 된다.
Source Protocol Address (Variable Length)
- 송신자의 논리 주소가 저장되는 가변길이 필드이다.
- 예를 들어, IPv4 주소를 사용하는 경우, 이 필드는 4Byte가 된다.
Destination Hardware Adderss (Variable Length)
- 수신자의 물리 주소가 저장되는 필드이지만, ARP는 이 수신자의 물리 주소를 알아내는 프로토콜이므로,
ARP Request Packet의 경우, 이 필드는 모두 0으로 채워진다.
- Source H/W Address와 마찬가지로, Ethernet에서 이 필드는 6Byte가 된다.
Destination Protocol Address (Variable Length)
- 수신자의 논리 주소가 저장되는 가변길이 필드이다.
- 예를 들어, 수신자의 주소가 IPv4 주소인 경우, 이 필드는 4Byte가 된다.
Example. A에 의한 ARP Request와 B에 의한 ARP Reply가 수행될 때, ARP Packet의 내부
ARP Operation (ARP하에서 수행되는 연산)
- ARP Protocol에서는 Sender측에서 Receiver측의 MAC 주소를 알기위해 행하는 ARP Request와
Receiver측에서 Sender측에게 요청한 MAC 주소를 알려주는 ARP Reply를 정의하고 있다.
* MAC Address = Link Address = H/W Address = Physical Address
(4개의 용어 모두 같은 개념이다.)
ARP Request
- Receiver의 IP는 알고 있으나, Link 주소는 모르기 때문에(애초에 Link주소를 구하는 과정이다)
이러한 Question Symbol('?')로 패킷을 채운다.
(사실, Question Symbol은 32Bit Field가 모두 0으로 채워서 표현된다.)
- Link 주소를 모르기 때문에, Broadcast 방식(모든 Host에게 신호를 전송)으로 신호를 전송한다.
- ARP Cahce*를 통해 ARP Request 과정이 생략될 수도 있다.
* ARP Cache
- 기존에 통신했던 Host의 Link 주소를 저장하는 메모리이다.
- ARP 캐쉬에는 값을 저장하는 데에 유효시간이 존재하기 때문에
시간이 만료되면 다시 ARP Request 과정을 행해야 한다.
Example. A가 B와의 통신을 위해 ARP Request를 수행하는 예시
- System A는 System B의 Link Address를 모르기 때문에,
같은 Physical Network 상에 있는 모든 Host가 수신할 수 있도록 ARP Request를 Broadcasting한다.
- 위 그림에서 검은색 실선은 Physical Path이고, 하늘색 실선은 Logical Path이다.
- \(N_i\)는 \(i\)번째 시스템의 네트워크 주소(IP주소)를 의미하고, \(L_i\)는 \(i\)번째 시스템의 링크 주소를 의미한다.
ARP Reply
- ARP Reply는 ARP Request와 달리,
Unicast(목적지 Host에게만 신호를 전송)방식으로 신호를 전송한다.
- Receiver는 Sender의 네트워크 주소와 물리주소 모두를 알고 있기 때문이다.
(굳이 Broadcasting하여 Network에 부담을 줄 필요가 없다.)
Example. B가 A의 ARP Request에 대해 ARP Request를 수행하는 예시
한 Physical Network내부에서 이루어지는 ARP Operation
- Source가 해당 물리 네트워크에 브로드캐스트 타입으로 ARP Request를 모든 노드에게 전송한다.
- Destination은 Source에게 유니캐스트 타입으로 ARP Reply를 전송한다.
- 해당 물리 네트워크에 ARP Request 메세지를 받은 모든 노드는
본인의 ARP Cache에 Source의 주소 정보를 저장한다.
(당장 Source의 주소가 필요하지 않더라도, 추후를 대비하여 저장해놓는 것이다.)
다수의 Physical Network에서 이루어지는 ARP Operation
- Source와 Destination 사이에 다수의 물리 네트워크와 그에 따른 다수의 라우터가 있는 경우이다.
- 이 경우, 목적지까지 차례대로 ARP Request, ARP Reply를 라우터와 주고 받게 된다.
- Source와 Destination 사이에 두 개의 라우터 R1, R2가 존재한다 가정하면,
(Source와 R1과의 ARP 요청/응답),
(R1과 R2와의 ARP 요청/응답),
(R2와 Destination과의 ARP 요청/응답)이 차례대로 수행된다.
- 이 경우에도 마찬가지로, ARP Request 메세지를 수신한 노드들은
Source의 주소 정보를 본인의 ARP Cache에 일정 기간동안 저장한다.
ARP Package (ARP 패키지)
- 위 ARP Package는 Layer 3로부터 IP Datagram을 넘겨받아
Destination Physical Address를 알아내어
Layer 2의 Frame으로 Encapsulation한다.
* ARP Package Component
Cache Table |
Queues |
Output Module |
Input Module |
Cache Control Module |
Cache Table
- 일반적으로, Sender는 하나의 Receiver에게 다수의 IP Datagram을 전송하는데,
이 때 같은 곳을 향하는 다수의 IP Datagram마다 매번 ARP를 수행하는 것은 매우 비효율적이다.
- Cache Table은 이러한 비효율을 개선하는 수단 중 하나이다.
- Host 혹은 Router가 특정 Receiver의 물리 주소를 ARP Reply를 통해 전송받으면,
이 물리 주소는 Cache Table에 저장되고 일정 시간동안 유지된다.
* Cache Table Entry
Cache Table Entry | Description |
State | - State 필드 값은 FREE, PENDING, RESOLVED 셋 중 하나로 지정된다. - FREE값은 해당 Entry의 Time-to-live(수명)이 만료되었으므로 다른 Entry가 입력될 수 있음을 의미한다. - PENDING값은 해당 Entry에 대한 ARP Request가 전송되었으나, ARP Reply를 아직 수신하지 못했음을 의미한다. - RESOLVED값은 해당 Entry가 ARP Reply까지 수신하여 물리 주소까지 알고 있고, Cache 정보가 만료되지 않은 상태임을 의미한다. (즉, 송신을 준비중인 Packet은 Cache Table에서 RESOLVED 상태인 Entry에 대한 정보만 활용할 수 있다.) |
Hardware Type | - ARP Packet에서의 Hardware Type과 같다. |
Protocol Type | - ARP Packet에서의 Protocol Type과 같다. |
Hardware Length | - ARP Packet에서의 Hardware Length과 같다. |
Protocol Length | - ARP Packet에서의 Protocol Length과 같다. |
Interface Number | - 다수의 Interface를 가진 Device에서는 Interface의 번호가 지정되어야 한다. - Device의 Address는 Interface마다 부여된다. (즉, 한 Device의 Address는 다수일 수 있다.) |
Queue Number | - ARP Reply를 기다리는 Packet들이 저장되는 Queue이다. - 보통, 같은 Destination Address를 가진 Packet들은 같은 Queue에 저장된다. |
Attempts | - ARP Request를 전송한 횟수값이다. |
Time-Out | - 해당 Entry의 Time-to-live(Lifespan)를 초단위로 환산한 값이다. |
Hardware Address | - Receiver의 H/W Address(물리 주소)값이다. - 즉, 이 필드는 ARP Reply를 받아야만 채워진다. |
Protocol Address | - Receiver의 논리 주소(IP 주소 등)값이다. |
Queues
- ARP Reply를 기다리는 IP Datagram들이 저장되는 Data Structure다.
- 이 Queue는 Destination마다 하나씩 유지된다.
Output Module
ARP_Output_Module ( )
{
Sleep until an IP packet is received from IP software.
Check cache table for an entry corresponding to the destination of IP packet.
If (entry is found)
{
If (the state is RESOLVED)
{
Extract the value of the hardware address from the entry.
Send the packet and the hardware address to data link layer.
Return
} // end if
If (the state is PENDING)
{
Enqueue the packet to the corresponding queue.
Return
}//end if
}//end if
If (entry is not found)
{
Create a cache entry with state set to PENDING and ATTEMPTS set to 1.
Create a queue.
Enqueue the packet.
Send an ARP request.
Return
}//end if
} //end module
Input Module
ARP_Input_Module ( )
{
Sleep until an ARP packet (request or reply) arrives.
Check the cache table to find the corresponding entry.
If (found)
{
Update the entry.
If (the state is PENDING)
{
While (the queue is not empty)
{
Dequeue one packet.
Send the packet and the hardware address.
}//end while
}//end if
}//end if
If (not found)
{
Create an entry.
Add the entry to the table.
}//end if
If (the packet is a request)
{
Send an ARP reply.
}//end if
Return
}//end module
Cache Control Module
ARP_Cache_Control_Module ( )
{
Sleep until the periodic timer matures.
Repeat for every entry in the cache table
{
If (the state is FREE)
{
Continue.
}//end if
If (the state is PENDING)
{
Increment the value of attempts by 1.
If (attempts greater than maximum)
{
Change the state to FREE.
Destroy the corresponding queue.
}// end if
else
{
Send an ARP request.
}//end else
continue.
}//end if
If (the state is RESOLVED)
{
Decrement the value of time-out.
If (time-out less than or equal 0)
{
Change the state to FREE.
Destroy the corresponding queue.
}//end if
}//end if
}//end repeat
Return.
}//end module
Proxy ARP (프록시 ARP)
- 호스트 집합을 대행해 수행하는 ARP로, Subnetting 효과를 만들기 위해 사용한다.
- Proxy ARP를 수행하는 Router가 이 호스트 집합으로 향하는 메시지를 수신하면,
Router는 ARP Reply Packet에 라우터 자신의 물리 주소를 입력하여 Sender에게 ARP Reply한다.
- 이후에 호스트 집합내에 한 호스트에게로 가는 메시지를 라우터가 수신하면,
라우터는 적절히 메시지를 전달한다.
Example. Proxy ARP
Reference: Data Communications and Networking 5E
(Behrouz A. Forouzan 저, McGraw-Hill, 2015)