已更新 1个月前
당신의 컴퓨터가 192.168.1.50으로 데이터를 보내려 합니다. IP 주소는 알고 있습니다. 그런데 실제로 케이블을 통해 바이트를 전달하는 네트워크 하드웨어는 IP를 이해하지 못합니다—MAC 주소를 사용합니다. 그렇다면 컴퓨터는 그 IP를 가진 물리적 장치가 무엇인지 어떻게 알아낼까요?
소리를 지릅니다.
주소 결정 프로토콜(ARP)은 바로 그 외침의 메커니즘입니다. 로컬 네트워크에서 장치들이 IP 주소를 MAC 주소로 변환하는 방법으로, 애플리케이션이 사용하는 논리적 주소 체계와 이더넷이 요구하는 물리적 주소 체계 사이의 간격을 연결합니다.
ARP가 해결하는 문제
네트워킹은 계층 구조로 작동하며, 각 계층은 서로 다른 언어를 사용합니다.
애플리케이션과 라우팅은 IP 주소를 사용합니다—논리적이고, 계층적이며, 인터넷 전체에서 라우팅 가능한 주소입니다. 그러나 이더넷 프레임에는 MAC 주소가 필요합니다—공장에서 네트워크 하드웨어에 새겨진 48비트 식별자입니다.
컴퓨터가 192.168.1.50으로 향하는 이더넷 프레임을 만들 때, 목적지 MAC 주소 필드를 채워야 합니다. 이 정보가 없으면 프레임을 만들 수 없습니다. 프레임이 없으면 아무것도 전송되지 않습니다.
컴퓨터는 데이터를 어디로 보낼지 알고 있습니다. 네트워크 하드웨어는 누가 연결되어 있는지만 압니다. ARP는 그 간격을 잇는 대화입니다—매번, 언제나.
ARP 작동 방식
ARP는 놀라울 정도로 단순합니다. 그 단순함이 강점이자 약점입니다.
요청: 컴퓨터가 특수 MAC 주소 FF:FF:FF:FF:FF:FF를 사용해 로컬 네트워크의 모든 장치에게 ARP 요청을 브로드캐스트합니다. 메시지는 본질적으로 이렇게 말합니다: "192.168.1.50을 가진 분 계신가요? 192.168.1.100에게 알려주세요."
네트워크 세그먼트의 모든 장치가 이 브로드캐스트를 수신합니다. 모든 장치가 이를 확인합니다. 오직 하나의 장치—실제로 192.168.1.50으로 설정된 장치—만 응답합니다.
응답: 해당 장치가 컴퓨터에게 직접 ARP 응답을 보냅니다: "저는 192.168.1.50이고, 제 MAC 주소는 AA:BB:CC:DD:EE:FF입니다." 이 응답은 원래 요청에 당신의 MAC 주소가 포함되어 있었기 때문에 브로드캐스트가 아닌 유니캐스트로 전송됩니다.
캐시: 컴퓨터는 이 매핑을 ARP 캐시에 저장하여 다시 물어볼 필요가 없도록 합니다. 캐시 항목은 일반적으로 몇 분 후에 만료됩니다—지속적인 브로드캐스트를 피하기에 충분히 길고, 변경 사항에 적응하기에 충분히 짧습니다.
그게 전부입니다. 질문을 브로드캐스트하고, 답을 받고, 결과를 캐시합니다. 인터넷 전체가 이것에 의존합니다.
ARP 캐시 확인하기
지금 바로 이 매핑을 확인할 수 있습니다:
- Windows:
arp -a - Linux:
ip neighbor show또는arp -n - macOS:
arp -a
각 항목에는 IP 주소, 해당 MAC 주소, 그리고 어떻게 학습된 항목인지가 표시됩니다. 지금 이 순간 어떤 물리적 하드웨어가 어떤 논리적 주소를 가지고 있는지, 장치가 파악한 네트워크 정보가 여기에 담겨 있습니다.
ARP는 로컬에서만 동작합니다
중요한 사실이 있습니다: ARP는 단일 네트워크 세그먼트 내에서만 작동합니다. 라우터를 넘지 않습니다.
웹사이트를 방문할 때, 컴퓨터는 웹 서버의 IP 주소에 대해 ARP를 수행하지 않습니다—그 서버는 지구 어디에나 있을 수 있습니다. 대신, 컴퓨터는 목적지가 원격(자신의 서브넷 밖)이라는 것을 인식하고 기본 게이트웨이에 대해 ARP를 수행합니다.
그러면 컴퓨터는 다음과 같은 프레임을 만듭니다:
- 목적지 MAC: 라우터의 MAC 주소
- 목적지 IP: 웹 서버의 IP 주소
라우터는 MAC이 일치하기 때문에 프레임을 수신하고, IP 주소를 확인한 후 적절히 라우팅합니다. 인터넷을 가로지르는 각 홉에서 새로운 MAC 주소로 새로운 프레임이 만들어지지만, IP 주소는 종단 간에 일정하게 유지됩니다.
MAC 주소는 로컬입니다. IP 주소는 전역입니다. ARP는 각 로컬 세그먼트에서 그 간격을 연결합니다.
Gratuitous ARP
때로는 장치가 요청받지 않고도 자신의 IP-MAC 매핑을 스스로 알립니다. 이것을 Gratuitous ARP라고 합니다—장치가 자신의 IP 주소에 대해 ARP 요청을 직접 보내는 방식입니다.
장치가 왜 이렇게 할까요?
IP 충돌 감지: 장치가 네트워크에 연결되거나 IP를 변경할 때 Gratuitous ARP를 보냅니다. 응답이 오면 두 장치가 같은 IP를 주장하고 있다는 뜻으로, 문제가 있는 상황입니다.
변경 후 캐시 업데이트: 장치의 네트워크 카드가 교체되면(새 MAC 주소, 같은 IP), Gratuitous ARP를 통해 캐시 항목이 만료될 때까지 기다리지 않고 즉시 네트워크 전체의 캐시를 업데이트합니다.
장애 조치 시나리오: 백업 서버가 장애가 난 주 서버를 대신할 때, Gratuitous ARP로 "이제 제가 이 IP를 처리합니다"라고 알려서 트래픽이 올바른 곳으로 흐르도록 합니다.
신뢰 문제
ARP에는 근본적인 보안 결함이 있습니다: 모든 것을 신뢰합니다.
컴퓨터가 ARP 응답을 수신하면 캐시를 업데이트합니다. 그 응답이 해당 IP 주소의 정당한 소유자로부터 온 것인지 확인하지 않습니다. 자격증명을 확인하지 않습니다. 그냥 답을 믿습니다.
이것이 ARP 스푸핑(ARP 포이즈닝이라고도 함)의 토대가 됩니다. 공격자가 자신의 MAC 주소로 "저는 192.168.1.1입니다"(당신의 게이트웨이)라고 주장하는 가짜 ARP 응답을 보냅니다. 컴퓨터는 이를 믿고, 캐시를 업데이트하고, 인터넷으로 향하는 트래픽을 공격자에게 보내기 시작합니다.
공격자는 이제 다음을 할 수 있습니다:
- 트래픽 읽기(중간자 공격)
- 전송 중인 트래픽 수정
- 선택적으로 트래픽 차단(서비스 거부)
이 공격이 가능한 이유는 ARP가 더 순수한 시대—로컬 네트워크의 모든 사람을 신뢰할 수 있다고 가정했던 시대—를 위해 설계되었기 때문입니다.
ARP 공격 방어
정적 ARP 항목을 게이트웨이 같은 중요한 장치에 설정하면 해당 매핑이 오염되는 것을 방지합니다. 정적 항목이 있는 주소에 대한 가짜 ARP 응답은 무시됩니다. 이 방법은 효과적이지만 확장성이 없습니다.
**동적 ARP 검사(DAI)**는 ARP 패킷을 신뢰할 수 있는 IP-MAC 바인딩 데이터베이스와 대조하여 검증하는 스위치 기능입니다. DHCP 스누핑과 함께 작동하며, DHCP 할당을 감시하여 신뢰할 수 있는 데이터베이스를 구축합니다. 유효하지 않은 ARP 메시지는 스위치에서 차단되어 캐시 오염을 막습니다.
네트워크 세분화는 피해 반경을 제한합니다. 브로드캐스트 도메인이 작을수록 공격자가 단일 지점에서 오염시킬 수 있는 장치 수가 줄어듭니다.
암호화(TLS, IPsec)는 트래픽이 리디렉션되더라도 데이터를 보호합니다. 공격자는 바이트를 볼 수 있지만 읽거나 의미 있게 수정할 수 없습니다.
프록시 ARP
프록시 ARP를 사용하면 라우터가 다른 네트워크의 장치를 대신하여 ARP 요청에 응답할 수 있습니다.
서브넷 마스크가 잘못 설정된 장치가 원격 장치를 로컬로 생각하는 경우를 상상해 보세요. 그 장치의 IP에 대해 ARP 요청을 보내지만, 일반적으로는 아무도 응답하지 않을 것입니다—그 장치는 이 세그먼트에 없기 때문입니다.
프록시 ARP를 사용하면 라우터가 자신의 MAC 주소로 응답합니다: "그 IP의 트래픽을 저에게 보내세요, 제가 필요한 곳으로 라우팅하겠습니다."
이렇게 하면 설정 오류에 더 유연하게 대처할 수 있지만, 문제를 해결하는 대신 숨깁니다. 현대 네트워크는 올바른 설정을 위해 프록시 ARP를 비활성화하는 것이 일반적입니다.
IPv6의 대체 프로토콜: 이웃 탐색
IPv6는 ARP를 **이웃 탐색 프로토콜(NDP)**로 대체합니다. 같은 개념이지만 더 나은 구현입니다.
NDP는 별도의 프로토콜 대신 ICMPv6 메시지를 사용합니다. **이웃 요청(Neighbor Solicitation)**이 ARP 요청을 대체합니다. **이웃 광고(Neighbor Advertisement)**가 ARP 응답을 대체합니다. 근본적인 질문—"이 네트워크 계층 주소에 해당하는 링크 계층 주소는 무엇인가?"—은 그대로입니다.
개선 사항:
브로드캐스트 대신 멀티캐스트: NDP는 대상 주소를 기반으로 한 멀티캐스트 그룹에 요청을 보내어, 해당 주소를 가질 수 있는 장치만 메시지를 처리하면 됩니다.
보안 옵션: SEND(보안 이웃 탐색)는 암호화 방식으로 메시지를 인증하여 ARP를 괴롭히는 스푸핑 공격을 방지합니다.
IPv6의 개선에도 불구하고, 핵심 개념은 살아남습니다: 장치는 여전히 네트워크 주소를 하드웨어 주소로 변환해야 합니다. 그 문제는 사라지지 않습니다—해결책만 발전할 뿐입니다.
ARP로 문제 해결하기
ARP는 로컬 네트워크 동작을 들여다보는 창입니다:
만료된 캐시 항목은 연결 문제를 일으킬 수 있습니다. 장치의 IP 주소가 다른 하드웨어로 이동했다면, 캐시가 이전 MAC을 가리킬 수 있습니다. 캐시를 지우면(대부분의 시스템에서 arp -d, Linux에서는 ip neighbor flush) 새로운 변환이 강제됩니다.
중복 항목—서로 다른 IP가 같은 MAC에 매핑되는 경우—는 여러 IP를 가진 장치를 나타낼 수도 있고, 스푸핑의 징후일 수도 있습니다.
불완전한 항목은 장치가 ARP 요청을 보냈지만 응답을 받지 못했음을 의미합니다. 대상에 접근할 수 없거나, 전원이 꺼져 있거나, ARP를 차단하고 있는 상황입니다.
예상치 못한 MAC이 알려진 IP에 연결된 경우 조사가 필요합니다. 게이트웨이의 MAC 주소가 갑자기 바뀐다면, 하드웨어가 교체된 것이거나 누군가 스푸핑하고 있는 것입니다.
우아함과 위험
ARP는 1982년에 만들어진 프로토콜로, 지구상 거의 모든 로컬 네트워크에서 여전히 실행됩니다. 설계가 너무 단순해서 몇 단락에 담을 수 있습니다. 구현이 너무 가벼워서 가장 제약이 많은 장치도 참여할 수 있습니다.
그러나 그 단순함은 신뢰에서 비롯됩니다—로컬 네트워크의 모든 사람이 자신이 주장하는 대로라는 신뢰. 적대적인 네트워크와 정교한 공격자가 있는 현대에, 그 신뢰는 취약점이 됩니다.
프로토콜이 살아남은 이유는 작동하기 때문입니다. 취약점이 지속되는 이유는 이를 수정하는 데 암호화 인증(복잡하고 무거운) 또는 신중한 네트워크 설계(DAI, 세분화, 정적 항목)가 필요하기 때문입니다. 대부분의 네트워크는 후자를 선택합니다.
로컬 목적지로 보내는 모든 패킷은 ARP 교환으로 시작됩니다. 원격 목적지로 보내는 모든 패킷은 게이트웨이에 대한 ARP 교환으로 시작됩니다. 프로토콜은 작동할 때는 보이지 않습니다—작동하지 않을 때는 고통스러울 만큼 눈에 띕니다.
ARP에 관한 자주 묻는 질문
웹사이트에 접속할 때 컴퓨터가 왜 게이트웨이에 대해 ARP를 수행하나요?
컴퓨터는 로컬 네트워크의 장치에게만 이더넷 프레임을 보낼 수 있습니다—MAC 주소가 필요하고, ARP는 로컬에서만 작동합니다. 목적지 IP가 다른 네트워크에 있으면, 컴퓨터는 게이트웨이의 MAC 주소로 프레임을 보냅니다. 게이트웨이가 패킷을 다음 홉으로 라우팅합니다. 컴퓨터는 최종 목적지가 아닌 게이트웨이에 대해 ARP를 수행합니다.
ARP 캐시 항목은 얼마나 오래 지속되나요?
운영 체제에 따라 다릅니다. Windows는 일반적으로 비활성 상태에서 15~45초 동안 항목을 유지합니다. Linux의 기본값은 약 60초입니다. 이 짧은 만료 시간 덕분에 장치가 이동하거나 변경될 때 캐시가 빠르게 적응할 수 있지만, 활성 네트워크에서는 ARP 트래픽이 지속적으로 발생합니다.
홈 네트워크에서 ARP 스푸핑을 방지할 수 있나요?
가장 실용적인 방어책은 라우터에 대한 정적 ARP 항목을 추가하는 것입니다. 이렇게 하면 컴퓨터가 게이트웨이 IP에 대해 항상 특정 MAC 주소를 사용하고 스푸핑된 응답을 무시합니다. Windows에서: arp -s [게이트웨이-IP] [게이트웨이-MAC]. 영구적으로 설정하지 않으면 재부팅 시까지만 유지됩니다.
ARP와 RARP의 차이점은 무엇인가요?
ARP는 IP 주소를 MAC 주소로 변환합니다—"IP는 알고 있는데, MAC이 뭐죠?" RARP(역방향 ARP)는 그 반대였습니다—"MAC은 알고 있는데, IP가 뭐가 되어야 하죠?" RARP는 디스크 없는 워크스테이션이 자신의 IP 주소를 알아내기 위한 초기 방법이었지만, BOOTP와 DHCP로 대체되었습니다.
ARP가 라우터를 넘어 작동하지 않는 이유는 무엇인가요?
ARP는 이더넷 브로드캐스트를 사용하며, 브로드캐스트는 라우터를 넘지 않습니다—라우터가 브로드캐스트 도메인의 경계입니다. 이것은 의도적인 설계입니다. ARP 브로드캐스트가 인터넷 전체에 전파된다면 트래픽이 감당할 수 없을 만큼 늘어날 것입니다. 대신, 각 네트워크 세그먼트가 독립적으로 주소 변환을 처리합니다.
此页面对您有帮助吗?