[네트워크] ARP

2022. 5. 22. 15:46TIL💡/Network

OSI 7계층 중 2,3계층이 주소를 가지고 있고 통신할 때 목적지를 찾아갈 수 있도록 하지만 사실 2계층 MAC 주소와 3계층 IP 주소 간에는 아무 관계가 없다. MAC 주소는 하드웨어 생산업체가 임의적으로 할당한 주소이고 NIC에 종속된 주소이다. 3계층 IP 주소는 우리가 직접할당하거나 DHCP(Dynamic Host Configuration Protocol, 동적 호스트 설정 프로토콜)를 이용해 자동으로 할당받는다.

즉 IP는 고정이 아니다.

 

 

실제로 통신은 IP 주소 기반으로 일어나고 MAC 주소는 상대방의 주소를 자동으로 알아내 통신하게 된다. 이때 상대방의 MAC 주소를 알아내기 위해 사용되는 프로토콜이 ARP(Address Resolution Protocol)이다.

 

ARP란?

데이터 통신을 위해 2계층 물리적 주소인 MAC 주소와 3계층 논리적 IP 주소 두 개가 사용된다.

IP 주소 체계는 물리적 MAC 주소와 전혀 연관성이 없으므로 두 개의 주소를 연계시켜 주기 위한 매커니즘이 필요하다.

이 때 사용되는 프로토콜이 ARP이다.

 

호스트에서 아무 통신이 없다가 처음 통신을 시도하면 패킷을 바로 캡슐화할 수 없다. 통신을 시도할 때 출발지와 목적지 IP 주소는 미리 알고 있어 캡슐화하는 데 문제가 없지만 상대방의 MAC 주소를 알 수 없어 2계층 캡슐화를 수행할 수 없다. 상대방의 MAC 주소를 알아내려면 ARP 브로드캐스트를 이용해 네트워크 전체에 상대방의 MAC 주소를 질의해야 한다.(질의 핵심은 Destination Hardware Address)

 

ARP 브로드캐스트를 받은 목적지는 ARP 프로토콜을 이용해 자신의 MAC 주소를 응답한다. 이 작업이 완료되면 출발지, 목적지 둘 다 상대방에 대한 MAC 주소를 학습하고 이후 패킷이 정상적으로 인캡슐레이션되어 상대방에게 전달될 수 있다. 

 

패킷 네트워크에서는 큰 데이터를 잘라 전송하므로 여러 개의 패킷을 전송해야 한다. 패킷을 보낼 때마다 ARP 브로드캐스트를 수행하면 네트워크 통신의 효율성이 크게 저하되므로 메모리에 이 정보를 저장해두고 재사용한다. 성능 유지를 위해서는 ARP 테이블을 오래 유지하는 것이 좋지만 논리 주소는 언제든지 바뀔 수 있으므로 일정 시간 동안 통신이 없으면 이 테이블은 삭제된다.

 

ARP 동작

서버 A에서 서버 B로 ping을 보내려고 할 때 서버 A에서는 3계층의 IP 주소까지 캡슐화할 수 있지만 목적지 MAC 주소를 모르기 때문에 정상적으로 패킷을 만들 수 없다.

 

 

서버 A는 목적지 서버 B의 MAC 주소를 알아내기 위해 ARP 요청을 네트워크에 브로드캐스트한다. ARP 패킷을 네트워크에 브로드캐스트할 때 2계층 MAC 주소는 출발지를 자신의 MAC으로, 도착지는 브로드캐스트(FF-FF-FF-FF-FF-FF)로 채우고 ARP 프로토콜 필드의 전송자 MAC과 IP 주소에는 자신의 주소로, 대상자 IP 주소는 1.1.1.2를, 대상자 MAC 주소는 00-00-00-00-00-00으로 채워 네트워크에 뿌린다.

 

2계층 목적지 주소가 브로드캐스트이므로 이 ARP 패킷은 같은 네트워크 안에 있는 모든 단말에 보내지고 모든 단말은 ARP 프로토콜 내용을 확인하는데 ARP 프로토콜 필드의 대상자 IP가 자신이 맞는지 확인해 자신이 아니면 ARP 패킷을 버린다.

 

서버 B에서는 ARP 요청의 대상자 IP 주소가 자신의 IP이므로 ARP 요청을 처리하고 그에 대한 응답을 보낸다. 이때는 송신자와 대상자의 위치가 바뀐다. ARP 요청을 청듬 보냈던 서버 A와 달리 서버 B에서는 ARP 요청을 수신하면서 이미 ARP 요청을 보낸 서버 A의 IP 주소와 MAC 주소를 알고 있어 모든 ARP 필드를 채워 응답할 수 있다. ARP 요청에서 받은 서버 A의 정보를 이용해 대상자 MAC, IP 주소를 채우고 자신의 MAC, IP 주소를 송신자 MAC, IP 주소로 채워 응답한다.

 

ARP 요청을 처음 보낼 때는 브로드캐스트인 반면, ARP 응답을 보낼 때는 출발지와 도착지 MAC 주소가 명시되어 있는 유니캐스트이다.

 

서버 A는 서버 B로부터 ARP 응답을 받아 자신의 ARP 캐시 테이블을 갱신한다. 이 ARP 캐시 테이블은 정해진 시간 동안 서버 B와의 통신이 없을 때까지 유지된다. 해당 시간 안에 통신이 다시 이루어지면 그 시간은 다시 초기화된다.

 

ARP 캐시 테이블이 갱신된 후에는 상대방의 MAC 주소를 알고 있으므로 도착지 MAC 주소 필드를 완성해 ping 패킷을 보낼 수 있다.