ARP란 무엇인가?

null·5일 전

개발지식

목록 보기
7/10

네트워크 면접 질문 #2 - ARP란 무엇인가?

❓ 면접 질문

ARP(Address Resolution Protocol)란 무엇이고, 왜 필요한가요? ARP가 실제 통신에서 어떻게 동작하는지도 설명해주세요.


ARP란?

ARP(Address Resolution Protocol)는

IP 주소를 이용해 해당 장비의 MAC 주소를 알아내는 프로토콜이다.

쉽게 표현하면 다음과 같다.

IP 주소는 알고 있음 → MAC 주소는 모름 → ARP 사용 → MAC 주소 확인

예를 들어

192.168.0.20 → ARP → AA:BB:CC:DD:EE:FF

처럼 IP 주소에 대응되는 MAC 주소를 알아낸다.


그런데 왜 MAC 주소까지 알아야 할까?

여기서 L2와 L3가 연결된다.

이전 글에서

L3 → IP Address
L2 → MAC Address

라고 했다.

내 PC가 같은 LAN에 있는 192.168.0.20으로 데이터를 보내려고 한다고 생각해보자.

내 PC는 목적지 IP를 알고 있다.

하지만 실제 Ethernet 통신에서는 Ethernet Frame의 목적지 MAC 주소가 필요하다.

즉,

목적지 IP 192.168.0.20 확인 → MAC 주소를 모름 → ARP 필요

가 된다.


실제 ARP 동작 과정

다음 두 PC가 같은 네트워크에 있다고 가정한다.

PC A : IP 192.168.0.10 / MAC AA:AA:AA:AA:AA:AA
PC B : IP 192.168.0.20 / MAC BB:BB:BB:BB:BB:BB

PC A가 PC B에게 데이터를 보내려고 한다.

PC A는 목적지 IP 192.168.0.20은 알고 있지만 PC B의 MAC 주소는 모른다.

전체 흐름부터 보면 다음과 같다.

ARP Table 확인 → MAC 정보 없음 → ARP Request → ARP Reply → ARP Table 저장 → 실제 Frame 전송

1. ARP Table 확인

PC A는 먼저 자신의 ARP Table을 확인한다.

192.168.0.20 → MAC 주소가 저장되어 있는가?

이미 MAC 주소를 알고 있다면 ARP 요청을 다시 하지 않고 저장된 정보를 사용한다.

정보가 없다면 ARP Request를 보낸다.


2. ARP Request

PC A가 네트워크에 질문한다.

"192.168.0.20을 사용하는 장비의 MAC 주소가 뭐야?"

이것이 ARP Request이다.

ARP Request는 특정 장비의 MAC 주소를 아직 모르기 때문에 Broadcast로 전송한다.

목적지 MAC → FF:FF:FF:FF:FF:FF

즉 같은 Broadcast Domain에 있는 장비들에게 전달된다.


3. 다른 장비들이 확인

네트워크에 다음 장비들이 있다고 해보자.

PC A / PC B / PC C / PC D

ARP Request가 Broadcast이므로 여러 장비가 요청을 받는다.

하지만 요청 내용은

"192.168.0.20 누구야?"

이므로 자신의 IP가 아닌 PC C와 PC D는 응답하지 않는다.

192.168.0.20을 사용하는 PC B가 응답한다.


4. ARP Reply

PC B는 PC A에게 자신의 MAC 주소를 알려준다.

192.168.0.20 → BB:BB:BB:BB:BB:BB

이것이 ARP Reply이다.

일반적으로 ARP Reply는 요청을 보낸 상대에게 직접 전달된다.


5. ARP Table에 저장

PC A는 알아낸 정보를 ARP Table에 저장한다.

192.168.0.20 → BB:BB:BB:BB:BB:BB

이제 PC A는 PC B에게 데이터를 보낼 때마다 ARP Request를 반복할 필요가 없다.

일정 시간 동안 저장된 정보를 사용한다.

전체 흐름을 다시 보면

PC A → ARP Request(Broadcast) → PC B → ARP Reply → PC A의 ARP Table 저장

이다.


ARP Table이란?

ARP Table 또는 ARP Cache는

IP 주소와 MAC 주소의 대응 관계를 저장해두는 공간

이다.

예를 들어 다음과 같이 저장된다.

192.168.0.1  → AA:AA:AA:AA:AA:AA
192.168.0.20 → BB:BB:BB:BB:BB:BB
192.168.0.30 → CC:CC:CC:CC:CC:CC

Windows에서는

arp -a

명령어로 확인할 수 있다.

Linux에서는 보통

ip neigh

명령어를 사용한다.


왜 ARP 정보를 저장할까?

매번 데이터를 보낼 때마다 ARP를 수행하면 비효율적이기 때문이다.

캐시가 없다면

통신 → ARP Request → ARP Reply → 데이터 전송

을 계속 반복해야 한다.

그래서 한 번 알아낸 정보를 일정 시간 동안 저장한다.

첫 통신 : ARP 수행 → MAC 주소 저장
다음 통신 : ARP Table 확인 → 저장된 MAC 사용

ARP Request는 왜 Broadcast일까?

현재 알고 있는 것은 목적지의 IP 주소뿐이다.

IP = 192.168.0.20
MAC = ?

그런데 Ethernet Frame을 특정 장비에게 전달하려면 MAC 주소가 필요하다.

MAC 주소를 모르기 때문에 처음부터 특정 장비에게 보낼 수 없다.

그래서

"192.168.0.20을 사용하는 장비 누구야?"

라고 같은 네트워크에 Broadcast한다.

이때 사용하는 Broadcast MAC 주소가

FF:FF:FF:FF:FF:FF

이다.


ARP는 언제 발생할까?

통신하려는 장비 또는 다음 홉의 MAC 주소가 필요한데 ARP Table에 정보가 없을 때 발생한다.

통신 시작 → MAC 주소 필요 → ARP Table 확인 → 정보 없음 → ARP Request → ARP Reply → MAC 주소 저장

반대로 ARP Table에 필요한 정보가 이미 있다면 캐시된 MAC 주소를 사용한다.

통신 시작 → ARP Table 확인 → 정보 있음 → 저장된 MAC 사용

같은 Subnet에서 ARP

내 PC가 다음과 같다고 해보자.

내 PC   : 192.168.0.10
상대 PC : 192.168.0.20

두 장비가 같은 Subnet에 있다면 상대 PC에게 직접 Frame을 전달할 수 있다.

따라서

192.168.0.20과 통신 → 같은 Subnet인지 확인 → 목적지 MAC 필요 → ARP → 상대 PC의 MAC 확인 → Frame 전송

이 된다.

즉 같은 Subnet에서는 목적지 장비의 MAC 주소를 ARP로 알아낸다.


다른 Subnet에서는 어떻게 될까?

여기가 중요하다.

내 PC가

192.168.0.10

이고 목적지 서버가

10.0.0.20

이라고 해보자.

두 IP가 서로 다른 Subnet이라면 내 PC는 목적지 서버에게 직접 Frame을 전달할 수 없다.

Router를 거쳐야 한다.

따라서 내 PC는 목적지 서버의 MAC 주소를 ARP로 찾지 않는다.

대신 Default Gateway의 MAC 주소를 알아낸다.

예를 들어

내 PC          : 192.168.0.10
Default Gateway: 192.168.0.1
목적지 서버     : 10.0.0.20

이라면

10.0.0.20과 통신 → 다른 Subnet이라고 판단 → Default Gateway로 전달 결정 → Gateway MAC 필요 → ARP → Gateway MAC 확인 → Frame 전송

이 된다.

중요한 것은 Ethernet Frame과 IP Packet의 목적지가 다를 수 있다는 것이다.

IP Packet 목적지     → 10.0.0.20
Ethernet Frame 목적지 → Default Gateway의 MAC

IP Packet은 최종 목적지인 10.0.0.20을 향하지만, 현재 LAN에서 Frame을 실제로 받아야 하는 장비는 Router(Default Gateway)이기 때문이다.


같은 Subnet과 다른 Subnet 비교

상황ARP로 알아내는 MAC
같은 Subnet목적지 장비의 MAC
다른 SubnetDefault Gateway의 MAC

따라서 이렇게 기억하면 된다.

같은 Subnet → 목적지 MAC 조회 → 목적지에 직접 전달
다른 Subnet → Gateway MAC 조회 → Router에 전달

ARP와 RARP의 차이

ARP와 이름이 비슷한 RARP(Reverse ARP)도 있다.

방향을 비교하면

ARP  : IP  → MAC
RARP : MAC → IP

이다.

즉 개념적으로 반대 방향이다.

다만 RARP는 오래된 방식이며 현재 일반적인 네트워크 환경에서는 DHCP 등이 그 역할을 대신하기 때문에 거의 사용되지 않는다.


ARP와 RIP는 전혀 다른 개념이다

처음 네트워크를 공부하면 ARP, RARP, RIP라는 이름 때문에 헷갈릴 수 있다.

하지만 RIP는 ARP와 목적 자체가 다르다.

ARP  → IP 주소에 해당하는 MAC 주소 확인
RARP → MAC 주소를 이용해 IP 주소 확인
RIP  → Router들이 Routing 정보를 교환

따라서

ARP ↔ RARP

는 서로 관련된 개념이지만

ARP ↔ RIP

는 반대 관계가 아니다.

RIP는 Routing Information Protocol이라는 라우팅 프로토콜이다.

RIP는 이후 Routing Table을 공부할 때 같이 이해하는 것이 좋다.


Gratuitous ARP란?

일반적인 ARP는 다른 장비의 MAC 주소를 알아내기 위해 사용한다.

"192.168.0.20의 MAC 주소가 뭐야?"

반면 Gratuitous ARP는 자신의 IP/MAC 정보를 네트워크에 알리는 방식이다.

"192.168.0.20은 나고, 내 MAC은 BB:BB:BB:BB:BB:BB야."

IP 주소 중복 감지, 다른 장비의 ARP Cache 갱신, 장애 조치(Failover) 등의 상황에서 활용될 수 있다.

백엔드 면접에서는 이런 것이 있다는 정도까지 알아두고, 우선 일반적인 ARP Request/Reply 흐름을 정확히 이해하는 것이 중요하다.


L2 / L3 / ARP의 관계

결국 지금까지 공부한 내용을 하나로 연결하면 다음과 같다.

같은 Subnet

목적지 IP 확인 → 같은 Subnet 판단 → ARP로 목적지 MAC 확인 → Ethernet Frame 생성 → Switch → 목적지 장비

다른 Subnet

목적지 IP 확인 → 다른 Subnet 판단 → Default Gateway 선택 → ARP로 Gateway MAC 확인 → Ethernet Frame 생성 → Switch → Router → 다른 네트워크

이 흐름을 이해하면

왜 L2와 L3를 공부한 다음 ARP를 공부하는지도 이해할 수 있다.

L3에서는 IP를 보고 어디로 보내야 할지 판단하고, 실제 현재 LAN에서 Ethernet Frame을 전달하려면 L2의 MAC 주소가 필요하기 때문이다.


핵심 정리

개념설명
ARPIP 주소를 이용해 MAC 주소를 알아냄
ARP RequestMAC 주소를 알아내기 위한 요청
ARP ReplyMAC 주소를 알려주는 응답
ARP TableIP와 MAC의 대응 관계를 캐싱
ARP Request일반적으로 Broadcast
같은 Subnet목적지 장비의 MAC을 조회
다른 SubnetDefault Gateway의 MAC을 조회
RARPMAC → IP
RIP라우터 간 라우팅 정보를 교환하는 프로토콜

면접 답변

ARP는 IP 주소에 대응되는 MAC 주소를 알아내기 위한 프로토콜입니다. 실제 Ethernet 통신에서는 목적지 MAC 주소가 필요하기 때문에 ARP Table에 정보가 없다면 ARP Request를 Broadcast로 보내고, 해당 IP를 가진 장비가 자신의 MAC 주소를 ARP Reply로 응답합니다.

같은 Subnet의 장비와 통신할 때는 목적지 장비의 MAC 주소를 ARP로 알아내고, 다른 Subnet의 장비와 통신할 때는 원격 서버의 MAC 주소가 아니라 Default Gateway의 MAC 주소를 ARP로 알아낸 뒤 Router에게 Frame을 전달합니다.

0개의 댓글