IP는 아는데 MAC은 모를 때: ARP의 동작 범위
ARP는 IPv4 네트워크에서 같은 링크에 있는 다음 홉의 IP 주소를 링크 계층 주소로 알아내는 프로토콜이다. 이더넷에서는 보통 IP 주소와 MAC 주소 사이의 대응을 구한다. 도메인을 IP로 찾는 DNS와 역할이 다르고, 인터넷 전체의 모든 IP를 MAC 주소로 바꾸는 서비스도 아니다.
ARP 요청은 로컬 링크에 퍼지고 해당 IP의 이웃이 링크 주소를 알려 준다.
브로드캐스트 질문과 이웃의 응답
호스트가 같은 LAN의 192.0.2.20에 보내려는데 MAC을 모른다고 하자. 먼저 ARP 캐시를 확인한다. 정보가 없으면 해당 IP의 주인을 묻는 ARP 요청을 로컬 브로드캐스트로 보낸다. 자신이 그 IP를 사용하는 호스트는 자신의 MAC을 담아 응답하고, 송신자는 그 대응을 캐시에 저장해 이후 프레임을 구성한다.
캐시는 매번 질의를 하지 않게 해 주지만 영원히 맞는 정보는 아니다. 장치 교체, 주소 변경, 네트워크 이동으로 대응이 바뀔 수 있다. 운영체제는 만료와 확인 절차를 통해 이웃 정보의 유효성을 관리한다. 따라서 오래된 캐시 때문에 연결이 안 되는 현상과 실제 라우팅 오류는 구분해야 한다.
원격 서버에는 누구의 MAC을 쓸까
목적지가 다른 네트워크라면 호스트는 먼저 라우팅 테이블로 다음 홉을 고른다. 기본 게이트웨이가 192.0.2.1이라면 ARP로 찾는 대상은 먼 서버가 아니라 이 게이트웨이다. 프레임의 목적지 MAC은 게이트웨이의 값이고, 그 안의 IP 패킷은 원격 서버의 IP를 목적지로 갖는다. 라우터는 다음 링크에서 다시 그 링크에 맞는 프레임을 만든다.
이 구분은 ARP가 로컬 링크에 한정된다는 사실에서 나온다. 일반적인 라우터는 ARP 브로드캐스트를 인터넷 끝까지 중계하지 않는다. 프록시 ARP처럼 특정 상황에서 다른 장비가 대신 답하는 동작은 있지만, 그것이 ARP의 기본 범위를 세계 전체로 넓히는 것은 아니다.
ARP 자체에는 일반적인 암호학적 소유권 인증이 없다. 잘못된 대응을 주입하면 트래픽이 공격자의 장비로 향할 수 있다. 그래서 신뢰할 수 있는 네트워크 운영과 스위치의 검사 기능 등이 중요하다. IPv6는 ARP 대신 ICMPv6 기반의 이웃 발견을 사용한다.
진단할 때는 먼저 최종 목적지와 다음 홉을 적고, 그 다음 홉이 같은 링크에 있는지 확인한다. 이어 ARP 캐시에 어떤 MAC이 등록되어 있는지와 실제 응답을 살펴본다. IP 패킷과 링크 프레임을 두 겹으로 그리면 원격 목적지에 가면서 왜 가까운 라우터의 MAC이 필요한지 자연스럽게 이해할 수 있다.
예시를 단계별로 적으면 먼저 원격 목적지 IP에 라우팅 조회를 수행하고, 그 결과인 다음 홉 192.0.2.1의 링크 주소를 확인한다. 주소가 캐시에 없으면 ARP 요청으로 알아낸 뒤 프레임에 게이트웨이 MAC을 넣는다. 이 요청은 IP 패킷에 실린 일반적인 IP 브로드캐스트가 아니라 별도의 링크 계층 프로토콜 메시지다. 그래서 프레임의 브로드캐스트 MAC과 요청 안의 찾고 싶은 IPv4 주소를 구분해야 한다. 이후 게이트웨이가 원격 경로로 보낼 때는 다른 링크의 다음 홉을 다시 찾아 새로운 프레임을 만든다. 각 링크의 MAC은 바뀔 수 있고 원래 IP 목적지는 유지된다는 사실이 계층의 역할을 잘 보여 준다.