Profile picture

[네트워크] ARP 프로토콜 동작 원리 이해하기

JaehyoJJAng2023년 05월 05일


주소 결정 프로토콜(Address Resolution Protocol,ARP)은 네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응(bind)시키기 위해 사용되는 프로토콜이다. 여기서 물리적 네트워크 주소는 Ethernet 또는 TokenRing의 48 bit 네트워크 카드(NIC) 주소를 뜻함.

출처: 위키백과


ARP는 IP 주소를 MAC 주소와 매칭 시키기 위한 프로토콜이다.
로컬 네트워크(LAN)에서 단말과 단말 간 통신을 하기 위해서는 IP 주소와 함께 MAC 주소를 사용하게 되는데, IP 주소를 MAC Address와 매칭하여 목적지 IP의 단말이 소유한 MAC 주소를 향해 제대로 찾아가기 위해서는 ARP Protocol을 사용해야 한다.

그런데 IP 주소를 왜 MAC 주소로 매칭하여야 할까? 그냥 해당 IP 주소를 가지고 있는 단말기를 찾으면 되는거 아닐까? 그 이유를 알기 위해서는 LAN과 MAC 주소에 대해 이해하고 있어야 한다. 먼저 LAN과 MAC 주소에 대해 알아보고 ARP를 정리해보자.


LAN 이란?

https://blog.naver.com/goduck2/220138802591 해당 블로그에서 LAN의 정의를 아주 명료하게 정의한 문장이 있는데 "LAN은 ARP Request가 미치는 영역"이 문장이다.

ARP Request Packet이 전달되는 영역은 LAN이라고 보는 것이다. 같은 IP 대역을 공유하는 LAN에서 단말간 통신을 하기 위해, 다시 말해 Layer 2에서의 통신에서 사용자는 IP 주소를 목적지로 지정하지만 실제로는 IP 주소가 아닌 MAC 주소를 이용해 목적지를 찾는다. 이에 IP 주소와 MAC 주소를 매칭하기 위해 ARP가 사용된다는 것을 의미한다.

아래 그림을 보면 중앙에 하나의 L2 Swtich를 두고 컴퓨터들을 스위치에 연결하여 LAN을 구성한 것을 볼 수 있다.
image
위의 구성에서 PC0(10.11.0.100)은 PC1(10.11.0.102)와 통신을 하기 위해서 사용자는 목적지를 10.11.0.102로 잡지만 실제 목적지는 PC1의 IP 주소와 함께 MAC 주소를 목적지로 지정하고 이를 활용하여 전달함.


MAC Address 란?

MAC 주소는 무엇일까?

MAC Address

데이터 링크 계층(Layer 2)에서 통신을 위한 네트워크 인터페이스에 할당된 고유 식별자로 Network Interface Card(NIC)를 가진 단말이라면 공장에서 출고될 때 부여되고 평생 사용하는 고유한 주소를 의미함. 즉 LAN에서 목적지와 통신하기 위한 실질적인 주소가 바로 MAC 주소이다.
image


네트워크 장비 혹은 컴퓨터는 모두 MAC 주소를 가지고 있다. 좀 더 자세히 말하자면 네트워크 장비 혹은 컴퓨터가 가지고 있는 Network Interface Card(NIC)마다 MAC 주소를 가지고 있는 셈이다. 그리고 MAC 주소는 위에서 언급한대로 LAN 영역에서 IP 주소를 MAC 주소에 매칭하여 통신한다.

그러면 통신할 때는 IP 주소만 있으면 되는거 아닌가? 굳이 MAC 주소까지 왜 필요한거지? 거꾸로 MAC 주소가 고유하다면 그냥 인터넷에서 IP 주소대신 MAC 주소를 쓰면 되는거 아닌가?


MAC 주소가 필요한 이유

image
<LAN 구성 예시(192.168.121.0/24)>

IP 주소는 끊임없이 변화한다. MAC 주소는 체계가 없는 상황을 가정하고 IP 주소만 있는 상황에서 PC0 사용자가 자신의 IP를 갑자기 10.11.0.102으로 바꾼다면 PC0와 PC1 모두 10.11.0.102 IP를 갖게 될 것이고 원래 IP 10.11.0.102의 단말은 어느 단말인지 알 길이 없게 된다. 하지만 고유한 정보인 MAC 주소는 웬만해서는 절대 바뀌지 않는다. 그렇기에 MAC 주소를 사용하여 전달하는 것이 확실하기에 그런 것이 아닌가라는 생각이 든다.

거꾸로 인터넷 상에서 IP 주소 없이 변화하지 않는 고유한 주소인 MAC 주소를 라우팅 된다면 어떨까? 고유한 MAC 주소를 라우팅 테이블에 일일이 입력하면 라우터가 슈퍼 컴퓨터급 사양이 아닌 이상 금방 다운되고 말거다. 전세계 단말기의 수는 매우 많을테니까 IP 주소는 연속성을 갖기 때문에 IP 주소 다수를 한 줄로 지정해줄 수 있으니 매우 편리한 것이다.


ARP는 무엇일까?

단말간 통신에서 양쪽 단말은 IP를 사용하여 목적지를 지정하지만 실제 데이터 이동을 위해서는 MAC 주소를 함께 사용한다. 이를 위해 필요한 것이 바로 **Address Resolution Protocol(ARP)**이며 IP 주소와 MAC 주소를 일대일 매칭하여 LAN(Layer)에서 목적지를 제대로 찾아갈 수 있도록 해준다. IP 주소와 MAC 주소를 일대일 대응하여 테이블로 정리하고 목적지 IP에 맞는 MAC 주소로 전달한다.

이것을 ARP Table이라고 부른다. IP 주소와 MAC 주소를 일대일 매칭시킨 정보를 테이블로 정리해둔 것을 의미한다.

image
<PC0의 ARP Table>

위 그림을 보면 PC0의 ARP Table에 다른 PC들의 IP 주소와 함께 MAC 주소가 일대일 매칭되어 있는 것이 보이는가? 사용자가 데이터를 보내기 위해 목적지 IP 주소를 지정한다면 PC0은 ARP Table에 있는 MAC 주소를 보고 해당 MAC 주소를 가진 단말기로 전달하는 것이다.

중간에서 데이터를 전달하는 스위치 또한 자신의 Port에 연결된 PC들의 MAC 주소 정보를 가지고 있다. 어느 Port에서 어느 PC의 Mac 주소가 올라오는지 알아야 PC에게서 전달받은 데이터를 전달할 때 목적지 MAC 주소를 올바르게 지정할 수 있기 때문이다.


ARP Table 생성과정

IP 주소와 MAC 주소가 구비되어있다 하더라도 다른 PC의 MAC 주소를 모르면 데이터를 전달할 수 있을까? 당연히 전달할 수 없을 것이다. 그래서 ARP Table을 생성하여 다른 PC들에 대한 주소 정보를 확보하는 것이 필요하다.


아래 그림을 참고하여 LAN 환경에서 각 PC가 부팅되고 아무 통신이 없었다고 가정해보자.
image
<PC0과 PC2의 통신>

위의 그림을 토대로 순차적으로 설명해보겠다. 여기서 짚고 넘어가야 할 점은 PC0,1,2뿐 아니라 모든 단말들은 자신만의 Routing Table이 존재하기 때문에 자신이 보내려는 패킷의 목적지 IP가 자신이 소속된 IP 대역인지 아닌지 확인할 수 있다는 점이다.

  1. PC 0(10.11.0.100)은 PC 2(10.11.0.103)에게 데이터를 전달하려고 한다. 일단 Routing Table을 보니 자신과 PC 2가 같은 LAN(10.11.0.0/24)에 속한다는 것을 알았다. 이제 PC 2의 MAC 주소를 알기 위해서 ARP Request(Who has 10.11.0.103 Tell 10.11.0.100)를 뿌린다.

  2. PC 0는 Broadcast(FF:FF:FF:FF:FF:FF)인 ARP Request를 날리고 PC1,PC2에 전달된다.

그리고 ARP Request의 목표인 PC 2가 이에 응답하여 ARP Response(PC 2의 MAC 주소)를 보낸다.

  1. PC 0(10.11.0.100)은 PC 2가 보낸 ARP Response를 받고 ARP Table에 PC 2의 IP 주소와 MAC 주소를 적는다. 그리고 데이터를 보내려 목적지 IP를 10.11.0.103으로 지정하면 자연스레 ARP Table을 참고하여 PC 2의 MAC 주소를 목표로 데이터를 전달한다.

ARP 캐시 조회 방법

$ arp -a
? (10.11.0.102) at 00:0c:29:d3:c6:82 [ether] on ens192
gateway (10.11.0.1) at 00:0c:29:18:63:a8 [ether] on ens192
? (10.11.0.101) at <incomplete> on ens192
? (10.11.0.103) at 00:0c:29:e4:03:31 [ether] on ens192

특정 IP 주소의 ARP 삭제

$ arp -d 10.11.0.102
$ arp -s 10.11.0.102 00:0c:29:d3:c6:82

Loading script...