네트워크

ARP(Address Resolution Protocol

뭉크테크 2025. 1. 9. 20:04

ARP

  • ARP는 IP주소로 MAC주소를 알아내려 할 때 활용된다.
  • 보통의 경우 PC를 부팅하면 게이트웨이의 MAC주소를 찾기 위해 ARP Request가 발생하며 이에 대응하는 Reply로 MAC 주소를 알 수 있다.

ARP는 Address Resolution Protocol인데 여기서 주목해야 할 단어가 Address이다. 이 Address가 무엇일까?

이 Address는 2가지가 있는데

  • 일단 첫째로, IP주소가 있고
  • 둘째로 MAC주소가 있다.

복습차원에서 다시 보면 컴퓨터의 주소라는 것은 2가지가 있는데 첫째로 컴퓨터에 인터넷이 연결되려면 IP주소가 필요하다. 그러니까 IP주소는 인터넷이라는 거대한 논리 네트워크에서 이 host를 unique하게 식별할 수 있는 식별자이다. 그런데 이 host에 네트워크 인터페이스가 여러개일수도 있고 1개일수도 있다. 일단 1개라고 가정하면 NIC에 MAC주소가 부여된다. 컴퓨터가 주소애기를 논하면 기본적으로 IP주소, MAC주소 2가지를 논하게 되는데 문제는 IP주소와 MAC주소가 쌍을 이루기 마련이고 일반적 기업에서 이렇게 되어 있다.

 

그런데 의문점이 IP주소는 L3이고 MAC주소는 L2인데, L3통신을 위해서 L2주소까지 알아야할까? 정답은 필요한 구간 내에서 알아야 한다. ARP는 언제 쓸까? IP주소로 MAC주소를 알아내려 할 때 활용된다. 그러면 이런 경우는 언제 가장 대표적일까? 쉽게 말해 내가 남의 컴퓨터 MAC주소를 언제 알아내야 할까? 가장 대표적인게 다음과 같다. Gateway의 MAC주소를 모르면 우리는 인터넷을 할 수 없다. 그래서 Gateway의 MAC주소는 반드시 알아야 한다. 이 과정을 좀 더 자세히 설명해보자.

 

위 그림의 Router가 Gateway라고 하고 IP주소가 192.168.0.1이라고 가정하자. 그리고 1번 PC가 부팅을 해서 전원이 들어왔다고 해보자. 1번 PC가 IP주소도 DHCP에 의해 할당받고 다 설정했고 할당받은 IP주소가 192.168.0.100이라고 해보자. 그런데 1번 PC가 DHCP서버한테 받은 설정을 확인해보니 나의 Gateway가 192.168.0.1이라고 하자. 그러면 문제가 뭐냐면 1번 PC가 네이버에 접속한다고 가정하자. 네이버의 IP주소가 3.3.3.3이라고 할때 여기서 드는 의문점이 있다.

네이버 서버 맥 주소도 모르는데 어떻게 통신하지?

 

이것은 바보같은 질문이 될 수 있다. 네이버하고 통신은 인터넷을 통한 L3통신이다. 이러면 네이버 맥주소는 알 필요가 없다. L3에는 IP가 중요하고 L2구간에서 MAC주소가 중요하다. 아무튼 네이버를 접속하려는 1번 PC가 인터넷을 접속하려할 때 게이트웨이 MAC 주소는 반드시 알아야 한다.

더보기

물론 여기에 내 생각을 피력을 하자면, 네이버라는 서버와 1번 PC와 닿아있는 라우터간의 통신 L3 통신이라고는 하지만, L3에서 통신이 이루어지기 위해선 L2 구간도 생각을 해봐야한다. L3가 아무리 IP로 라우팅을 한다고 한들, 그걸 감싸는 이더넷 헤더가 있고, 이 헤더의 목적지 MAC 주소를 통해 라우터가 자신에게 왔는지 확인해보기 때문이다. 나아가, 인터넷이라 해서 무조건 라우터들만 있는게 아니라 그 사이에 L2 스위치도 있을 수 있다. 그 구간에서의 만큼은 MAC주소로 또 스위칭 과정이 일어나기 때문에 인터넷이 L3통신이니 네이버의 MAC 주소를 알 필요가 없다?

이를 더 정확히 말하면, 1번 PC가 네이버의 MAC 주소를 알필요가 없다는 거지, 게이트웨이 MAC주소는 또 알아야하고, 그리고 인터넷 구간에 있는 라우터들은 서로 링크되어 있는 구간들에 대한 MAC 주소 또한 알아둬야 한다. 그래야 L2 헤더를 수정할 때, 올바른 출발지 MAC과 목적지 MAC을 작성해서 보내기 때문이다. 그리고 L3라 장비라 해서 무조건 IP만 보는 것이 아니라 디캡슐레이션 하는 과정에서 L2 이더넷 헤더의 목적지 MAC 주소도 같이 봄으로써 자신에게 온 프레임이 맞는지 확인해보는 과정도 필요하기 때문이다.

 

부팅이 되면 브로드캐스트와 같이 ARP Request가 네트워크 전체로 뿌려준다. 즉 '192.168.0.1이라는 ip를 가진 host가 있니?'라고 요청을 하는 것이다. 다른 PC들은 응답을 안 할 것이고 Gateway만 이 request에 대해서 reply를 1번 PC한테 보낸다. 이렇게 해서 1번 PC는 Gateway의 MAC 주소를 획득한다.

 

1번 PC가 네이버에 접속할 때 패킷이 만들어져서 나가는데 이 패킷의 출발지 IP주소는 192.168.0.100일 것이고 목적지 주소는 3.3.3.3일 것이다. 그리고 이 패킷이 프레임 payload에 담길 것이다. 그리고 이 프레임의 출발지 주소는 1번 PC MAC주소일것이고 목적지 주소는 네이버의 MAC주소가 아니라 Gateway MAC주소이다. 그럼 Gateway는 packet을 보고 목적지를 판단해서 움직인다. 그렇기 때문에 일단 PC가 켜지면 DHCP서버 주소설정을 받고 ARP Request를 통해 Gateway MAC주소를 broadcasting 한다음. 라우터로부터 unicast Reply를 받아 Gateway MAC 주소를 해당 PC가 등록하는 것이다.

 

 

와이어샤크에서 실제로 떠본 ARP 패킷

그림1
그림2

 

실제로 와이어 샤크를 실행시켜 ARP 패킷만 보도록 필터링해보면서 관련 패킷을 따와 캡쳐를 떠봤다. 그랬더니, 우리집 공유기 즉, 192.168.0.1 가 내 PC (192.168.0.244) 쪽으로 ARP 요청을 보내는 패킷이다. 이는 계속 주기적으로 보내는 것 같다. 

살펴보니, 이더넷 헤더에서의 목적지 MAC 주소는 내 PC MAC 주소로 되어있고, ARP 헤더에서의 목적지 MAC 주소는 00-00-00-00-00-00 으로 되어있었다.  그럼 왜 그렇게 주기적으로 보내고, 우리가 흔히 알고 있는 ARP와 다른가?

 

  • **“이더넷 헤더에서 내 PC MAC”**인 것은, 공유기가 “(특정 MAC) 너, IP 이거 쓰고 있지?”라고 1:1 유니캐스트로 묻기 위해서다.
  • **“ARP 헤더에서 Target MAC=00”**인 것은, ARP 규격상 Request에는 “네가 어떤 MAC인지 ‘난 아직 모른다(0)’”고 적는 것이 표준 포맷이기 때문이다.
  • 이렇게 “유니캐스트 ARP Request + ARP 헤더상 타겟 MAC=0” 조합은, 공유기가 이미 알지만 재확인/갱신/충돌 점검을 할 때 자주 관찰될 수 있는 정상적인 패킷 형태이다.

 

 

그림3

 

위 사진은 이제 우리가 전형적으로 알고 있는  ARP의 패킷이다.

  1. ARP Request는 “누가 IP=X를 쓰고 있니?”를 브로드캐스트로 물어봄.
    • 이더넷 헤더 목적지 MAC = FF:FF:FF:FF:FF:FF
    • ARP 헤더의 Target MAC = 00:00:00:00:00:00 (모름)
  2. ARP Reply는 “내 IP가 X야, 내 MAC은 Y야”를 유니캐스트로 응답.
    • 이더넷 헤더 목적지 MAC = 요청 보낸 호스트의 MAC
    • ARP 헤더의 Target MAC = 요청 보낸 호스트의 MAC
  3. 이 과정을 통해, 같은 LAN 내에서 IP 주소 → MAC 주소가 결정됨(Resolved).
    • IP 패킷을 실제로 전송하기 위해선, 2계층 헤더(MAC 주소) 설정이 필수이므로 ARP가 중요한 역할을 함.
  4. 추가 사항:
    • ARP 캐시: 얻어낸 MAC 주소는 일정 시간(캐시 타이머) 동안 저장.
    • 시간이 지나거나 네트워크 변경 시, 다시 ARP 요청을 날려 업데이트.

핵심 포인트

  • “전형적인 ARP” = IP → MAC 주소를 처음 알기 위해, 브로드캐스트 ARP Request유니캐스트 ARP Reply 흐름.
  • 요청(ARP Request)은 목적지 MAC이 브로드캐스트 = FF:FF:FF:FF:FF:FF.
  • 응답(ARP Reply)은 목적지 MAC이 요청자 호스트 MAC = 유니캐스트.

이것이 우리가 가장 자주 접하게 되는 ARP의 전형적인 시나리오이다.

 

ARP도 캐싱이 된다. PC입장에서 Gateway MAC주소를 알아내면 이것을 캐싱해 메모리에 담고 인터넷을 접속할때 이 캐싱된 메모리를 참조하게 되어있다.

 

 

출처

https://www.inflearn.com/course/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%95%B5%EC%8B%AC%EC%9D%B4%EB%A1%A0-%EA%B8%B0%EC%B4%88/dashboard

 

외워서 끝내는 네트워크 핵심이론 - 기초 강의 | 널널한 개발자 - 인프런

널널한 개발자 | TCP/IP에서 HTTP까지! 네트워크에 대한 기본 이론이 부족한 분들이 '외워서'라도 전공 이론을 이해하고자 희망하는 분들을 위해 준비한 강의입니다. 할 수 있습니다!, 네트워크, 외

www.inflearn.com

https://blog.naver.com/shs6903/220481724804

 

ARP 헤더 (ARP Header)

ARP 헤더 ( ARP Header ) ARP 패킷이란? - 목적지의 IP 주소로 목적지 MAC 주소를 알...

blog.naver.com

https://learningnetwork.cisco.com/s/question/0D53i00000Kt6UECAZ/arp-request-has-destination-mac-000000000000

 

ARP request has destination MAC: 00:00:00:00:00:00

 

learningnetwork.cisco.com

https://www.practicalnetworking.net/series/arp/traditional-arp/

 

Traditional ARP – Address Resolution Protocol – Practical Networking .net

The Address Resolution Protocol maps a known IP address to an unknown MAC address. This article will discuss the ARP Request and ARP Response packets.

www.practicalnetworking.net

https://datatracker.ietf.org/doc/html/rfc5227#section-2

 

RFC 5227: IPv4 Address Conflict Detection

When two hosts on the same link attempt to use the same IPv4 address at the same time (except in rare special cases where this has been arranged by prior coordination), problems ensue for one or both hosts. This document describes (i) a simple precaution t

datatracker.ietf.org