네트워크를 공부하면서 ARP와 DHCP와 계층을 비교하다가 ARP가 MAC 주소를 "할당"하는 프로토콜이라고 이해했다.
그런데 알고 보니 방향이 완전히 달랐다. ARP는 MAC 주소를 새로 만들어주는 프로토콜이 아니라, 이미 정해져 있는 MAC 주소를 찾아주는 프로토콜이다.
"IP를 MAC으로 바꾼다"는 표현이 헷갈리게 만들었던 것 같다.
이 말이 "IP 주소에 맞는 MAC 주소를 만들어서 배정한다"는 뜻처럼 들렸다. IP 주소를 MAC 주소로 바꿔준다고 하니, 없는 주소를 새로 만들어 붙여주는 느낌으로 받아들인 것이다.
실제로는 반대였다. MAC 주소는 이미 정해져 있고, ARP는 그 주소를 찾아준다.
ARP의 이름은 Address Resolution Protocol이다. 여기서 Resolution은 주소를 해석하거나 알아낸다는 뜻에 가깝다.
이름부터 Allocation이 아니다. 이미 있는 주소를 찾아내는 프로토콜이다.
그래서 ARP는 할당이 아니라 조회다.
먼저 MAC 주소가 뭔지부터 짚어야 한다. MAC 주소는 네트워크 장비의 식별자다. 랜카드나 와이파이 카드 같은 NIC(Network Interface Card)에 붙어 있고 데이터링크 계층에서 쓰인다. 보통 이 값은 제조사가 장비를 만들 때 넣어둔다. 그래서 MAC 주소를 하드웨어 주소라고 부르기도 한다.
택배로 비유하면 IP 주소는 "어느 동네의 어느 집으로 보낼지"에 가깝다. 반면 MAC 주소는 같은 건물이나 같은 동네 안에서 실제로 물건을 건네줄 대상의 위치에 가깝다. 인터넷 전체를 기준으로는 IP 주소가 필요하지만 같은 네트워크 안에서 실제 프레임을 전달하려면 MAC 주소가 필요하다.
IP 주소는 네트워크 계층에서 쓰이고 MAC 주소는 데이터링크 계층에서 쓰인다.
문제는 컴퓨터가 통신할 때 둘 다 필요하다는 점이다.
우리는 보통 "192.168.0.10으로 보낸다" 처럼 IP 주소를 보고 대상을 떠올리지만, 이더넷 프레임이 같은 LAN 안에서 움직일 때는 목적지 MAC 주소가 있어야 한다.
여기서 ARP가 등장한다. ARP는 "이 IP 주소를 가진 장비의 MAC 주소가 뭐지?"라고 묻고 답을 얻는 프로토콜이다. 네트워크 계층의 IP 주소와 데이터링크 계층의 MAC 주소 사이를 이어주는 역할을 한다고 보면 된다.
택배 기사 입장으로 바꿔보면 더 쉽다. 송장에는 큰 주소가 적혀 있다.
어느 지역, 어느 건물로 가야 하는지는 알 수 있다. 그런데 건물 앞에 도착한 뒤에는 실제로 몇 호에 전달해야 하는지 확인해야 한다. ARP는 이 확인 과정에 가깝다.
"이 IP 주소를 쓰는 장비가 누구야?"라고 같은 네트워크 안에 묻고
해당 장비가 "나야, 내 MAC 주소는 이거야"라고 답한다.
실제 동작은 세 단계다.
먼저 ARP Request를 보낸다.
내 컴퓨터가 같은 네트워크 전체에 브로드캐스트로 묻는다.
"이 IP 주소 가진 장비 누구야?"
그다음 해당 IP를 가진 장비가 ARP Reply를 보낸다.
"그 IP는 나고, 내 MAC 주소는 이거야"
라고 유니캐스트로 응답한다.
마지막으로 내 컴퓨터는 응답받은 정보를 ARP 캐시에 저장한다. 매번 같은 질문을 반복하면 비효율적이기 때문이다. 다음에 같은 IP로 통신할 때는 캐시에 저장된 IP-MAC 매핑을 먼저 사용한다.
여기서 하나 더 헷갈릴 수 있는 지점이 있다. 외부 인터넷 서버로 요청을 보낼 때도 ARP가 그 서버의 MAC 주소를 찾는 것은 아니다.
MAC 주소는 같은 네트워크 안에서 프레임을 전달할 때 쓰인다. 외부 서버는 내 LAN 밖에 있으므로 내 컴퓨터가 그 서버의 MAC 주소를 직접 알 필요가 없다.
대신 내 컴퓨터는 기본 게이트웨이, 보통 공유기나 라우터의 MAC 주소를 알아낸다. 택배로 치면 최종 목적지가 멀리 있어도, 일단 우리 동네 물류 담당자에게 넘기는 것과 비슷하다. IP 계층의 최종 목적지는 외부 서버지만, 데이터링크 계층에서 당장 넘겨야 할 대상은 같은 네트워크 안의 라우터다.
이렇게 보면 계층별 역할도 조금 선명해진다.
IP는 최종 목적지를 바라보고 MAC은 현재 링크에서 다음에 넘겨줄 대상을 바라본다. ARP는 그 둘 사이에서 "지금 이 링크에서 어느 MAC 주소로 보내야 하는지"를 알려준다.
이제 arp -a를 보면 "누군가 새로 할당한 목록"이 아니라 "내 컴퓨터가 조회해서 잠깐 저장해둔 매핑"으로 읽힌다. DHCP처럼 임대 테이블이나 갱신 타이머를 관리할 필요가 없는 것도 그래서다. 조회는 관리할 자원이 없으니 관리 체계도 필요 없다.
MAC 주소는 보통 제조사가 NIC에 넣어둔다. ARP는 이 주소를 만들거나 할당하지 않고 IP 주소를 보고 같은 네트워크 안에서 실제 전달에 필요한 MAC 주소를 찾아준다.
ARP가 하는 일은 조회였다. 별거 아닌 단어 하나였지만 이 차이를 잡고 나니 ARP라는 이름, ARP 캐시, DHCP와의 차이도 조금 더 자연스럽게 이어졌다.