본문 바로가기

네트워크, 보안

네트워크 기초 - ARP (Address Resolution Protocol)

1. ARP

주소 결정 프로토콜이라고 부르기도 합니다. 

ARP의 정의는 네트워크 상에서 IP주소를 물리적 주소로 대응(bind) 시키기 위해 사용되는 프로토콜입니다. 

 

저희는 통신을 위해 사용하는 주소의 종류에 대해 배웠었습니다. IP Address와 MAC Address가 그것이었죠.

위 사진과 같은 간단한 네트워크에서 PC가 Laptop과 통신하는것을 상상해보겠습니다. PC사용자는 IP 목적지를 192.168.1.1로 설정할 수 있지만 이런 L2 네트워크에서 내부적으로 MAC주소를 사용하여 목적지를 찾게됩니다. 이때, MAC 주소를 알아내기 위해 사용되는것이 ARP가 되겠습니다.

 

 

ARP Header

복잡해보이지만 그냥 Source, Destination 주소만 대충 확인하셔도 됩니다.

  • Hardware type(HTYPE) : 네트워크 유형을 뜻하지만 일반적으로 사용되는 Ethernet 환경은 0x0001 으로 세팅됨.
  • Protocol type(PTYPE) : 프로토콜을 정의합니다. IPv4의 경우 0x0800 으로 셋팅되며, IPv6는 거의 사용되지 않음.
  • Hardware Address Length : 하드웨어 주소(MAC Address) 길이를 정의하며 Ethernet 환경의 경우 6byte로 세팅됨.
  • Protocol Address Length : 프로토콜의 길이를 정의하며 IPv4는 4 byte로 세팅. IPv6는 거의 사용되지 않기 때문에 보통 IPv4인 4byte 세팅이 고정적임.
  • Opcode : ARP 패킷이 요청(Request) 또는 응답(Reply)에 따라 값이 바뀌게 되고 요청의 경우 1, 응답의 경우 2가 세팅됨.
  • Source Hardware Address : 출발지 MAC 주소
  • Source Protocol Address : 출발지 IP 주소
  • Destination Hardware Address : 목적지 MAC 주소
  • Destination Protocol Address : 목적지 IP 주소

 

 

2. ARP 동작과정

-동일 네트워크

다음과 같은 네트워크에서 PC-A가 Laptop-A와 통신하는걸 상상해보겠습니다.

우선 PC-A는 Laptop-A의 IP를 알고 있지만, MAC 주소는 모릅니다. 그러면 192.168.1.0/24 네트워크에 이렇게 외칩니다.

 

1. 저는 192.168.1.1/24 입니다. 192.168.1.0/24 님들, 혹시 이중에 192.168.1.4/24 계십니까?

Source MAC (PC-A) Source IP (PC-A) Destination MAC Destination IP (Laptop-A)
00-0B-BE-A2-E4-64 192.168.1.1 FF-FF-FF-FF-FF-FF 192.168.1.4

2. Switch-A는 PC-A의 ARP Request 패킷을 받고 PC-A의 MAC 주소를 테이블에 기록합니다.만약 스위치의 ARP 테이블에 192.168.1.4의 MAC 주소가 없다면, 이 패킷을 네트워크 전체에 브로드캐스팅합니다.

3. PC-B와 PC-C는 자신이 192.168.1.4/24가 아니므로 이 ARP Request 를 폐기처리합니다.

4. Laptop-A는 자신이 192.168.1.4/24이므로 ARP 테이블에 PC-A의 MAC 주소를 기록하고, 자신의 MAC 주소를 알려주는 ARP Reply 패킷을 전달합니다.

Source MAC (Laptop-A) Source IP (Laptop-A) Destination MAC (PC-A) Destination IP (PC-A)
00-0B-BE-A2-E4-68 192.168.1.4 00-0B-BE-A2-E4-64 192.168.1.1

5. Switch-A는 다시 Laptop-A의 MAC 주소를 ARP테이블에 기록하게되고, 이 정보를 PC-A로 전달합니다.

6. 이제 Laptop-A의 MAC 주소를 알게 되었으니 통신이 가능합니다.

arp -a 로 테이블 확인가능

PC-A에서 확인한 ARP 테이블입니다.

ping 테스트를 진행하자 arp 테이블이 갱신되어 192.168.1.4의 물리적 주소를 기록한 것을 확인할 수 있습니다.

 

 

-다른 네트워크

만약 다른 네트워크에 있는 PC끼리 통신한다면 ARP는 어떻게 동작할까요?

PC0 (192.168.0.2)이 PC2 (192.168.1.2)와 통신하는걸 상상해보겠습니다. 일단 대역이 다른 네트워크이므로 브로드캐스팅이 안됩니다.

 

1. PC0은 192.168.1.2를 찾는 ARP Request 를 생성합니다. 하지만 MAC 주소는 모릅니다.

 

2. 같은 대역이 아니기 때문에 이 패킷은 Default Gateway로 전달됩니다. 여기서는 Router0에 해당합니다.

Source MAC (PC0) Source IP (PC0) Destination MAC Destination IP (PC2)
00-60-47-8C-8C-16 192.168.0.2 FF-FF-FF-FF-FF-FF 192.168.1.2

3. Router0는 PC0의 MAC 주소를 기록하고, 패킷의 목적지가 자신의 네트워크 대역이 아니기 때문에 Router1로 패킷을 라우팅합니다.

 

4. Router1은 이 패킷을 확인하고 192.168.1.0/24에 192.168.1.2를 찾는 ARP Requset를 브로드캐스팅합니다.

Source MAC (Router1) Source IP (Router1) Destination MAC Destination IP (PC2)
00-02-16-81-BE-01 192.168.1.1 FF-FF-FF-FF-FF-FF 192.168.1.2

5. PC2는 자신이 192.168.1.2/24이므로 이 패킷에 응답합니다. 하지만 Router1이 ARP를 요청한 것으로 인식하므로 목적지는 Router1로 ARP Reply를 보냅니다.

Source MAC (PC2) Source IP (PC2) Destination MAC (Router1) Destination IP (Router1)
00-0B-BE-86-05-E4 192.168.1.2 00-02-16-81-BE-01 192.168.1.1

6. Router1은 PC2의 MAC 주소를 기록합니다. 이제 PC0과 PC2는 Router0, Router1 에 기록된 MAC 테이블을 기반으로 통신이 가능합니다.

 

같은 네트워크에서 ARP는 서로의 MAC 주소를 기록하지만, 다른 네트워크에서는 라우터를 통해 통신한다는것을 중점적으로 기억하시면 될 것 같습니다.

 

 

3. 여담

ARP 에 대해 배우면 몇몇 의문점을 가지시는 분들이 있습니다. 

 

1. 그냥 IP 주소로 통일하면 되지, MAC 주소가 왜 필요하지?

2. 그냥 MAC 주소로 통신을 하면 되지, IP 주소가 왜 필요하지?

 

1번의 해답은 IP 주소가 고정적이지 않기 때문입니다. IP주소는 사용자가 바꿀 수 있으며 동적인 특성을 가집니다. 이런 유연성때문에 표준으로 채택되었습니다. 그러니 유동적이지 않은. 대상을 식별할 수 있는 고정적인 주소가 필요하게 됩니다. 

 

그렇다면 고정적인 주소만 이용해서 통신을 하면 되지 않을까요? 실제로 SPX/IPX와 같은 예전의 프로토콜들은 네트워크ID와 물리적주소만을 이용해서 통신하였지만, 유연성이 부족했습니다. IP 주소는 먼 거리의 통신에서 데이터가 길을 찾아가기 쉽게 하기위한 것이므로 MAC 주소만 가지고 통신하기에는 데이터가 길을 찾기 너무 어려웠겠죠.

 

이러한 통신규약, 표준에 대한 것을 파고들면 끝이 없으므로 어느정도 감만 잡으시고 넘어가셔야 정신건강에 이롭습니다.

 

이번 포스팅인 ARP는 굉장히 중요한 내용입니다. 명령 프롬프트에서 arp -a로 직접 테이블을 확인할 수 있을 뿐만 아니라 트러블 슈팅에서도 일정부분을 차지하는 내용이기에 확실히 동작과정을 이해하셔야 합니다. 

 

와이어샤크를 통해서 ARP 패킷을 확인하실수도 있으니 직접 ARP 패킷을 캡쳐해보시는것도 좋을 것 같습니다.