ARP Overview
우선 ARP를 이해하기 전에 Data Link Layer에서 쓰이는 Ethernet II 프레임 구조를 이해할 필요가 있다.

Ethernet II 방식으로 프레임을 전송하려면 목적지 MAC 주소를 필요하다. 그러나, IP 주소만 가지고는 MAC 주소를 알 수 없으므로, ARP를 통해 IP 주소를 해당 호스트의 MAC 주소로 매핑한 뒤 Ethernet II 프레임의 목적이 MAC 주소 필드를 채워서 전송하게 된다.
이때문에 ARP는 필수적.
즉, IP 계층에서 최종 목적지 IP의 주소를 찾고
(1) 라우팅 테이블을 통해 다음 홉(Next Hop)의 IP 주소를 찾기
(2) ARP 캐시에서 해당 IP에 해당하는 MAC 주소를 가져오거나, 없으면 ARP를 통해 새로 알아낸 다음
(3) Ethernet II 프레임의 목적지 MAC(Destination Address) 필드를 채워 전송
다시 정리하면,
최종 목적지 IP(Data) -> (라우팅테이블) -> next hop IP -> ARP 캐쉬 -> next hop MAC(Destination Address)
ARP 구조

Hardware Type (2바이트) | - 어떤 하드웨어 주소 체계를 사용하는지 나타냄 (예: 1은 이더넷) |
Protocol Type (2바이트) | - 어떤 프로토콜 주소를 사용하는지 나타냄 (일반적으로 0x0800은 IPv4) |
Hardware Address Size (1바이트) | - 하드웨어 주소의 길이 (예: 이더넷은 6바이트) |
Protocol Address Size (1바이트) | - 프로토콜 주소의 길이 (예: IPv4는 4바이트) |
OP (2바이트) | - 요청(1)인지 응답(2)인지를 나타내는 Operation 코드 |
Sender HW Address (n바이트) | - 발신자의 MAC 주소 |
Sender Protocol Address (m바이트) | - 발신자의 IP 주소 |
Target HW Address (n바이트) | - 목적지의 MAC 주소 (요청 시 보통 0으로 채움, 응답 시 실제 MAC 주소 기재) |
Target Protocol Address (m바이트) | - 목적지의 IP 주소 (알고 싶은/또는 응답할 대상 IP 주소) |
왜 request에 sender의 프로토콜 주소를 넣었을까?
ARP 요청을 보낸 호스트의 IP 주소를 알려주어야, 응답을 돌려줄 대상이 누군지 상대가 알 수 있습니다. 또한 네트워크 장비(스위치·라우터 등)나 대상 호스트에서도 이 정보를 활용해 발신자의 ARP 정보를 미리 업데이트할 수 있기 때문에 효율적이기도 합니다.
그러면 ARP request<->reply를 상황을 들어서 설명을 하겠다.
상황. 새로운 기기가 네트워크에 연결되었다. ARP 관점에서만 설명하겠다.
ARP 구조 사진과 비교해보면서 wireshark packet을 읽으면 도움된다.
상황 예: 새로운 기기가 네트워크에 연결되었을 때

1. 새로운 기기는 ARP 통신을 위해 라우터 주소(192.168.0.1)를 찾아서 통신해야한다.
2. ARP announce(GARP)를 보내서 네트워크 내 다른 기기들의 ARP 테이블에 자신의 IP와 MAC을 매핑한다.

ARP request(opcode 1)

3. 새 기기는 라우터의 MAC 주소를 알기 위해 ARP request를 Broadcast를 보낸다.

여기서 Target MAC주소를 유의깊게 보면 00:00:00:00:00:00 으로 되어있다. 아직 모르기 때문이다.
Target IP는 찾고자 하는 IP이다.
ARP reply(opcode 2)

192.168.0.1는 라우터로부터 나랑 같은 패킷을 받았을 것이다.

Wireshark로 다른 기기의 패킷을 단순 모니터링하는 경우, 새 기기가 받는 ARP Reply는 캡쳐할 수 없다.
-> 브로드캐스트가 아닌 유니캐스트로 오기 때문이다
이를 보려면 미러링 포트나 스니핑 장비를 이용해야 한다.
ARP 캐쉬 업데이트 규칙

사진에 대한 설명 ->
NONE → 없음: 아직 ARP 엔트리가 전혀 없는 상태라는 의미
INCOMPLETE → 불완전: ARP 요청을 보냈지만 응답을 기다리는 중인 상태
REACHABLE → 도달 가능:ARP 응답을 받아 해당 MAC 정보를 믿을 만한 상태라는 의미
STALE → 유효성 미확인: 유효했지만, 확인한 지 시간이 지나 더 이상 확실치 않은 상태
DELAY → 지연: STALE 상태인 엔트리를 쓰려 할 때, 다시 확인하기 전 잠깐 지연하는 단계
PROBE → 재확인: 유니캐스트 ARP Request 등을 보내 MAC 정보가 여전히 맞는지 확인 중인 상태
FAILED → 실패: 요청에 대한 응답을 받지 못해 통신할 수 없음을 나타내는 상태
- B → A 요청 (Target Proto가 A의 IP인 경우)
- A는 ARP 캐시에 BIP → MACB를 업데이트.
- A가 ARP 응답 AIP → MACA을 MACB로 전송.
- B는 받은 응답으로 AIP → MACA를 ARP 테이블에 저장.
- B → C 요청 (Target Proto가 C의 IP로, A가 대상이 아님)
- A는 요청의 대상(목적 IP)이 자신이 아니므로 무시.
- 단, A의 ARP 캐시에 BIP가 이미 존재한다면 새로 들어온 BIP → MACB로 업데이트 가능(변경된 MAC 자동 반영).
특수한 ARP 상황
1. Gratuitous ARP (GARP)
- MAC 주소가 변경되었을 때 매핑을 갱신하거나, 이중화 서버 장애조치(페일오버) 등으로 IP는 그대로인데 MAC만 바뀔 때 네트워크 전체의 ARP 테이블을 업데이트하는 방법이다.
- 자신이 쓰는 IP를 Sender Proto Address와 Target Proto Address에 동일하게 넣고, 브로드캐스트로 보내 "이 IP를 가진 MAC은 여기다”라고 알린다.
- IP 충돌 감지(DAD, Duplicate Address Detection)에도 사용된다. 만약 누군가 같은 IP로 응답한다면 충돌이 발생
2. Address Conflict Detection (ACD)
- GARP의 스위치나 장치에서 자기 IP 요청을 받을 때 의문과 같은 부작용을 줄이기 위해, OS 차원에서 Probe와 Announcement 과정을 나누어 쓰는 방식이다.
- Probe 단계에서 Source IP = 0.0.0.0, Target IP = 할당받으려는 IP로 ARP Request를 보내, 누군가 응답하면 사용 중이므로 충돌이고, 아무도 응답하지 않으면 다음 단계로 넘어간다.
- Announcement 단계에서 Source IP에 새 IP를 설정해 ARP 요청을 보내, 다른 호스트들의 ARP 캐시에 갱신시키는 과정을 거친다.
3. ARP 캐시 오염(ARP Poisoning/Spoofing)
- 공격자가 위조된 ARP Reply를 전송함으로써 "남의 IP → 자기 MAC"으로 매핑을 바꾸는 공격이다.
- IP 패킷을 가로채거나(MITM), 특정 호스트와의 통신을 방해할 수 있다.
- 일부 라우터는 일정 주기로 ARP 정보를 재확인해 이 문제를 완화한다.
4. Proxy ARP (대리 ARP)
- 자신이 아닌 다른 호스트의 IP에 대해, 일부러 내 MAC을 ARP 응답에 넣어 주는 경우
- 라우터나 중간 장치가 특정 IP에 대한 트래픽을 대신 받아서 처리하거나 중계할 때 사용
5. Directed ARP (유니캐스트 ARP 요청)
- 이미 MAC을 알고 있는 상태에서, 브로드캐스트 대신 유니캐스트로 ARP Request를 전송
- 보통 ARP 엔트리의 유효성을 주기적으로 확인(예: 1200초 후 만료)할 때 쓰임
'Computer Science > Network' 카테고리의 다른 글
[L7] Border Gateway Protocol (BGP) (1) | 2025.04.17 |
---|---|
[L3] Internetworking Protocol(IP) (2) | 2025.04.17 |
[L3] IP Address system (0) | 2025.04.17 |