CS

[NETWORK] ARP란?

hanrabong 2023. 5. 13. 18:34

 

 네트워크를 공부할 때, OSI 7계층이라는 것을 배웁니다. 송신쪽에서 7계층에서 1계층으로 데이터가 캡슐화되어 전달을 하면 수신쪽에서 역캡슐화를 하면서 데이터를 주고받습니다. 그럼 어떻게 요청하는 쪽(클라이언트라고 하겠습니다)에서 수신하는 쪽(서버)의 위치를 알 수 있을까요?? 2계층의 물리적 주소인 MAC 주소와 3계층의 논리적 주소인 IP주소로 원하는 목적지로 데이터를 전달할 수 있는데요. IP는 우리가 어떤 네트워크에 접속되어 있는지에 따라서 바뀌게 됩니다.(예를 들어 집, 도서관, 핫스팟 등등) 반면, MAC 주소는 하드웨어를 만드는 업체가 임의로 정한 주소이고 일반적으로 ROM에 고정되어 나오기에 변경이 불가능합니다. (사실 변경을 원하면 할 수 있긴 합니다.. 몇몇 운영체제에서는 변경이 불가능하게 막아놓았습니다.)

 

이렇게 MAC 주소를 알아야 원하는 목적지로 요청을 보낼 수 있는데, 어떻게 MAC 주소를 알 수 있을까요?? 바로 ARP 를 이용하여 알 수 있습니다.

 

 

ARP


 ARP는 Address Resolution Protocol의 약자로 한국어로 직역하면 주소 확인 프로토콜 입니다. 논리적 주소인 IP를 이용해서 MAC 주소를  찾습니다. 한 마디로, IP 주소를 MAC 주소와 연관 시켜주기 위한 프로토콜이라고 생각하셔도 됩니다.

 여기서 어떻게 IP를 가지고 MAC 주소를 얻어올 수 있지라고 의문이 생길 수도 있습니다. 쉽게 생각하면 MAC 주소를 이용해서 우리가 통신을 하려고 하기에 통신 대상은 네트워크 어딘가 IP를 갖고 있습니다. 이러한 IP를 클라이언트 쪽에서 미리 알고 있을 수도 있고 모르게 된다면 도메인(예: https://naver.com )으로라도 알고 있을 것입니다. 당연히 알고 있어야 요청을 보낼 수도 있으니까요. 도메인으로부터 ip는 DNS를 이용하여 찾아낼 수 있습니다. 

 

 

ARP  필드는 다음과 같습니다. (실제로 차지하는 byte 크기는 다를 수 있습니다)

여기서 Recipient MAC Address 필드의 경우 00-00-00-00-00-00으로 채워서 네트워크에 뿌리게 됩니다.

 

ARP field

 

 ARP 작동 원리를 간단하게 설명하겠습니다. 먼저, 클라이언트가 ARP broadcast를 이용해서 로컬 네트워크 전체에 상대방의 MAC 주소를 물어봅니다. 목적지 IP에 해당하는 서버가 자신의 MAC 주소를 클라이언트에게 unicast로 전달을 합니다. 서버가 클라이언트에게 다시 보낼 때는 대상자와 전송자 IP 및 MAC 주소 위치는 변경되어야 합니다. 서버가 클라이언트에게 unicast로 전달을 하는 이유는 ARP 필드를 받았을 때, 출발지 MAC주소가 이미 담겨있기에 broadcast 없이 바로 응답을 할 수 있습니다. 클라이언트가 해당 MAC 주소를 받았으면 ARP table에 저장을 해놓습니다. 

 ARP table에 저장을 하는 이유는 매번 요청을 보낼때마다 ARP broadcast를 하면 통신에 효율성이 떨어지기에 ARP table이라는 cache를 이용해서 저장을 해놓습니다. 그럼 여기서 또 의문이 생길 수 있습니다. IP라는 것은 네트워크에 따라서 달라지는데 그럼 MAC 주소와 ip주소 매핑 정보가 바뀔 수도 있지 않을까하고 생각할 수 있습니다. 일정 시간(arp timeout) 동안 통신이 없으면 해당 테이블이 사라지게 됩니다.

 

 

윈도우 에서 ARP 테이블을 직접 확인해 볼 수 있습니다. cmd 창에 다음과 같이 명령어를 치면 됩니다.

arp -a

 

window ARP 테이블

 

 

그럼 이제 ARP가 어떻게 동작하는지 예시를 통해서 알아보겠습니다.

 

 

ARP 동작 예시


1) 같은 LAN 에서 요청 (A가 B에게 요청)

A가 B에게 요청을 보내려고 하는데 MAC 주소를 몰라서 ARP broadcast를 요청한다.

 

요청을 받은 B는 대상자 IP를 보고 자신한테 요청을 보내는 것을 알고 MAC 주소를 담아서 응답(unicast)를 한다.

 

응답을 받은 A는 ARP 캐시 테이블에 저장한다.

 

2) 다른 LAN에서 요청(A가 C에게)

 

밑의 그림은 완벽한 그림은 아니고 간단하게 그린 그림입니다. 원래는 L2 switch도 있어야합니다. 

 

 A가 C에게 요청을 보내려고 합니다. 이 때 C의 ip는 알고 있는데 MAC 주소는 따로 알지 못합니다. 위의 1번 경우와는 다르게 이 때 A는 자신의 라우팅 테이블을 통해서 C는 다른 LAN임을 알고 라우터의 MAC주소를 사용합니다. 라우터의 MAC 주소가 없으면 ARP broadcast를 요청합니다. 

 

라우터의 MAC 주소를 받고 난 후, 서버 A는 요청을 보내게 됩니다. 이 때 2계층에서 사용하는 MAC 주소는 라우터의 MAC 주소입니다. 해당 라우터에 C의 ip에 해당하는 MAC 주소가 없으면 라우터 R과 서버 C가 있는 LAN에서 다시 ARP broadcast를 진행해서 mac 주소를 알아옵니다.

 

 

서버 C의 mac 주소를 알게된 후에 라우터는 패킷을 재구성하여 출발지 MAC 주소와 목적지 MAC 주소를 변경한 후 패킷을 전달합니다.

 

위의 예시를 보면 ARP broadcast는 같은 LAN에서만 이루어지는 것을 알 수 있습니다. 그래서 LAN을 ARP 패킷이 도달하는 범위의 네트워크로 정의하곤 합니다.

 

 

 

※ 궁금한 사항이나 잘못된 점 댓글 부탁드립니다.

 

 

참고자료

https://www.guru99.com/address-resolution-protocol.html

 

Address Resolution Protocol: What is ARP Header in Networking

This tutorial covers address resolution protocol (ARP) basics, how arp works, ARP related important terms, ARP Types, ARP header, advantages, and more

www.guru99.com

http://walkwidnetwork.blogspot.com/2013/04/address-resolution-protocol.html

 

Address Resolution Protocol

Address Resolution Protocol (ARP) is a telecommunications protocol used for resolution of network layer addresses into link layer addresses...

walkwidnetwork.blogspot.com

https://catsbi.oopy.io/eec728e7-0a31-4c96-9d33-20421bd5e6b3

 

네트워크 통신하기

목차

catsbi.oopy.io

 

'CS' 카테고리의 다른 글

[Database] SQL vs NoSQL  (0) 2021.12.07
[Database] Indexing이란?  (0) 2021.12.07
[Linux] Linux File Hierarchy Structure  (0) 2021.09.08