ARP Protocol (Address Resolution Protocol : 주소 결정 프로토콜)
OSI 7 Layer 에서 3계층에 해당하는 프로토콜이며 MAC주소와 IP주소를 binding(연결)하는 용도입니다.
LAN환경에서는 MAC주소를 기반으로 통신하기 때문에 IP주소를 기반으로 MAC주소를 알아오는 ARP는 매우 중요한 역할을 담당합니다.
ARP는 출발지는 자기자신의 MAC주소, 도착지는 broadcast(FF:FF:FF:FF:FF:FF)가 됩니다
실제로 Wireshark 로 패킷을 까본 결과
이렇게 출발지와 목적지의 MAC주소와 IP주소 모두 알 수 있습니다.
제가 알기론 Destination 의 Adreess 는 ff:ff:ff:ff:ff:ff로 broadcast주소가 맞는 걸로 알고있는데,
현재 Wifi를 사용하고 있어서인지 맥북이라 그런건지 라우터로 바로 보내내요...
혹시 왜 브로드캐스트로 안보내지는지 아시는 분있으면 알려주십쇼
여튼 이렇게 ARP protocol은 여러가지 정보를 가지고 있는데, 구체적으로
이런 정보들이 있습니다.
가장 중요한 건 Sender Hardware Address(출발지 MAC주소) ~ Target IP Address(목적지 IP주소)입니다.
위 그림처럼 A컴퓨터가 B컴퓨터와 통신을 하려고 한다.
## A는 B와 C컴퓨터의 ip 주소만을 알고, MAC주소를 모른다. (참고로 같은 ip대역에서는 MAC주소로 통신한다)
1. A는 Broadcast로 "B컴퓨터야 어딨어"라고 외친다. (ARP request 패킷 전송)
2. B와 C모두 A가 외친 소리를 들었지만 C는 자신이 B가 아니기 때문에 무시한다 (B는 A가 보낸 broadcast으로 보낸 ARP request를 폐기)
3. B는 ARP request를 받고 자신의 IP를 A에게 알려준다. (B의 ARP reply)
4. A는 다음번에 B와 통신할 때, B컴퓨터에게 또 물어보지 않기 위해 B의 IP를 기억해 둔다 (ARP table에 B의 ip와 mac주소를 기록)
여기서 ARP table이란 ARP protocol로 얻어낸 다른 기기의 ip주소를 기록해 놓은 곳입니다.
OS의 네트워크 드라이브나 LAN카드의 메모리에 저장되어 있을 것 같다는 게 필자생각
실제로 ARP table을 확인하려면
cmd창이나 터미널을 열어서
이렇게 입력하면 됨
이렇게 앞에는 IP주, 뒤에는 MAC주소가 쓰여있습니다.
(MAC주소는 ??:??:??:??:?? 로 되어있고 16진수 12자리이며 48bit 입니다)
이렇게 ARP table에 기록하면 좋은 점은 다시한번 ARP request를 보내지 않아도 된다는 점입니다.
ARP table을 기록하지 않는 경우를 실생활의 예시로 들어보겠습니다.
우리는 처음보는 친구에게 이름이 무었이냐고 물어봅니다.
그리고 그 친구의 이름을 기억한 다음, 나중에 다시 만났을 때 그 친구에게 이름을 묻지 않아도
친구의 이름을 알 수 있습니다. (물론 저는 기억력이 안좋슴니닫....)
하지만 친구의 이름을 기억하지 못하면 나중에 다시 물어봐야 합니다.
여기서 ARP table은 우리 뇌속에 친구이름 정보 라고 생각하면 됩니다.
근본적으로 ARP table은 컴퓨터 네트워크에서 좀 더 빠르고 편하게 통신하기 위해 만들어 졌습니다.
하지만
이를 악의적으로 이용할 경우, 통신정보들을 모조리 감청할 수 있는 ARP sniffing / spoofing 으로 응용할 수 있습니다.
ARP sniffing 은 간단히 말하면 A친구와 B친구가 대화하고 있는 것을 C친구가 몰래 듣는 것이고,
ARP spoofing은 A친구가 B친구에게 말한 내용을 C친구가 내용을 변조시켜서 B친구에게 전달하는 것입니다.
다음엔 ARP sniffing과 ARP spooofing에 대해 포스팅 하겠습니다.
//ARP sniffing & spoofing