ARP는 Address Resolution Protocol의 약자로, MAC 주소를 얻어오기 위한 프로토콜이며, IP의 DNS와 유사하다.
링크 계층은 IP주소를 물리적 네트워크 주소 MAC 주소로 캡슐화해주어야 하므로 매핑이 필요하며, 이를 위해 사용한다.
ARP테이블은 IP주소, MAC주소, TTL을 저장하는 테이블로 노드가 개입하지 않고 생성되는 plug-and-play를 지원한다.
여기서 TTL은 Time To Live의 약자로 언제까지 이 정보를 테이블에 저장할지 나타내는 것으로 IP와 MAC 주소의 관계를 갱신해주기 위해 존재한다.
ARP를 통해 MAC주소를 알아내는 과정을 살펴보자.
Argon은 라우터 137을 찾기 위해 ARP Request를 전역에 뿌리는 broadcast를 하면, 일치하지 않는 라우터는 무시하고 정보와 일치하는 라우터 137이 본인의 MAC주소를 담아서 Unicast, 즉 Argon에게만 1대 1로 응답하며, 이를 ARP Reply라고 한다.
같은 LAN, 서브넷에서 전송할 때 어떻게 동작하는지 살펴보자.
아래 그림에서 A가 B에게 전송하려고 하는데, ARP Table에 B의 MAC주소가 없어 전송을 하지 못하는 경우 A는 B의 MAC주소를 어떤 과정을 거쳐 알 수 있을까?
1. ARP Query Packet을 broadcast한다.
2. 이 broadcast를 모든 노드가 수신한다.
3. 일치하지 않는다면 무시하고, 일치하는 B는 B의 MAC주소를 unicast를 통해 응답한다.
4. A는 ARP 테이블에 B의 IP주소와 MAC주소, TTL을 저장하고 B로 정보를 전송한다.
그렇다면, 전송하고자 하는 노드가 다른 랜에 존재하면 어떻게 될까?
A에서 B로 전송을 할 때, R 라우터를 거치며, B의 MAC 주소를 모를 때 전송하는 방법을 알아보자.
1. A는 Source IP주소와 MAC주소가 A이고, 목적지 IP주소는 B, MAC주소는 B의 주소를 모르므로 라우터 R의 MAC주소를 담은 IP 데이터그램을 생성한다.
2. A에서 R로 전송을 했을 때, R은 MAC주소만 수정해준다.
중간 과정이므로, Source에서 A의 MAC주소를 R의 MAC로 설정하고, destination에서 R의 MAC주소로 설정.
3. R에서 B로 ARP Query를 수신하면 도착지의 IP주소를 유지하고 MAC주소를 수정하며 IP주소에 일치하는 MAC주소를 찾아낸다.