9) ARP(Address Resolution Protocol) (RFC826)
실제 통신에서 IP주소는 논리주소이기 때문에 이것만 알아서는 통신을 할 수가 없다. 기기의 실제 주소인 MAC주소도 함께 알아야 한다. ARP는 동일한 LAN 내에 연결된 컴퓨터의 IP 주소에 대응되는 MAC 주소를 얻는데 사용된다. 따라서 실질적으로 ARP는 Network Layer의 Protocol을 돕는 Data Link Layer의 Protocol로 볼 수 있다. ARP가 동작하기 위해서는 기본적으로 Data Link가 Broadcast에 대한 수용 능력이 있다는 것을 전제로 한다. (Data Link가 Broadcast에 대한 수용 능력이 있다는 것은 Limited Broadcast 임을 의미하기 때문에, 그 범위가 하나의 Router를 벗어나지 못한다는 것을 의미한다.) 결론적으로 ARP는 논리적인 IP주소를 물리적인 MAC주소로 바꾸어주는 프로토토콜이다.
아래의 그림을 살펴보자. (이 예시는 Indirect Packet Forwarding이 된 상태이다.)
만약 우리가 WAN구간을 거쳐서 구글이라는 LAN 구간에 도착했다고 가정해보자. 우리는 Router를 찾았으니 이제 원하는 Server에 접속해야한다. 어떻게 찾을 수 있을까? LAN 구간에서는 IP 통신을 하는게 아니라 MAC통신을 통해 Server에 접속한다고 한다. 하지만 이때 Router는 Server의 MAC Address를 모르고 있다. 그러면 Router는 MAC 주소를 찾기 위해 Broadcast 방식으로 모두에게 MAC 주소를 Request한다. 이때, 함께 전송된 IP Address와 자신의 IP Address가 일치하는 Server는 자신의 MAC 주소를 첨부해 Reply를 보내게 된다. 이렇게 Destination Server의 IP Address에 해당하는 MAC 주소를 알았기 때문에 Router는 비로소 Forwarding을 할 수 있다.
내부에서 동작되는 원리를 살펴보자.
1.
Host 송신자는 목적지 IP Address를 지정하여 Broadcast를 보낸다.
2.
IP에서는 ARP를 이용하여 ARP Request 메세지를 생성을 요청한다.
3.
ARP Request 메세지는 Data Link Layer으로 전달되고 전달되고 Ethernet Frame으로 Encapsulation(캡슐화)된다.
→ 송신자 MAC Address를 Sender Address, 수신자 MAC Address를 Broadcast Address로 지정한다.
4.
모든 Host와 Router는 프레임을 수신한 후 자신의 ARP프로토콜에게 전달한다.
5.
목적지 IP Address와 일치하는 시스템은 자신의 MAC Address를 포함하고 있는 ARP Reply 메세지를 보낸다. 일치하지 않는 시스템들은 해당 패킷을 폐기린다.
6.
송신측은 지정한 IP Address에 대응하는 MAC Address를 받을 수 있다.
ARP Request은 Broadcast, ARP Reply는 Unicast
ARP Header
ARP Header의 Operation 필드에는 Request, Reply 딱 두개만 존재한다. 요청을 할때는 1, 응답을 할 때에는 2로 지정된다. 요청을 보낼때에는 Target Hardware Address를 모를 경우에 생략 하거나, 0으로 채우거나, 1로 채워도 된다. (현재는 대체적으로 0으로 채워서 보낸다.)
ARP Cache
ARP는 속도를 향상시키기 위해 다양한 방법을 사용하는데 첫번째가 바로 ARP Cache이다. ARP Request를 통해 얻은 MAC Address는 가까운 시간안에 또 사용될 수 있기 때문에 ARP Cache Table에 일정 시간동안 저장하게 된다. 다음 요청을 보낼 때, 우선적으로 Cache Table을 검사하여 만약 저장된 데이터가 있으면 이후 과정을 거치지 않고 원하는 주소를 바로 알 수 있게 된다. 터미널에서 arp -a 명령어를 활용하여 ARP Cache Table을 확인할 수 있다.
Gratuitous ARP (GARP)
Gratuitous ARP 내가 갖고 있는 IP 주소에 대한 MAC 주소를 얻기 위해 ARP 요청을 보내는 행위를 말한다. 이는 Source와 Target의 IP 주소가 같은 형태로 진행되기 떄문에, 다른 이의 MAC 주소를 알고자 하는 의도가 아니다. 따라서 말 그대로 무익한 ARP인 것이다. 그럼에도 Gratuitous ARP가 존재하는 이유는 무엇일까?
1.
Duplicated IP Address Detection
다른 Host의 응답이 있는 경우 해당 IP 주소가 이미 다른 Host에 의해서 사용되고 있음을 알 수 있다.
2.
ARP Caceh Update
동일한 Subnet에서 ARP Cache를 새로 수정하는데 사용된다. 누군가가 GARP에 해당하는 Packet을 보내게 되면, 해당 Packet을 수신하는 모든 Node들은 ARP Caceh를 GARP Packet에 있는 {Sender MAC 주소, Sender IP 주소}로 업데이트 하게 된다.
Proxy ARP
Proxy ARP는 특정 Node가 다른 Node를 대신하여 ARP Request에 응답하는 기법이다. 이 때 대신 응답을 보낸 Node는 자신의 ID를 속여 실제 Destination을 향해 보낸 ARP Packet에 대해서 처리할 의무를 지게 만든다. 이렇게 되면 Proxy ARP를 이용하여 Routing이나 Default Gateway에 대한 설정이 없어도 Subnet의 Node가 원격 Subnet에 도달할 수 있게 된다. 예를 살펴보자.
Subnet A에서 172.16.10.100인 Host A가 Subnet B에 있는 172.16.20.200의 Host D에게 Packet을 보내려는 상황이다. 그림에 나타난 것처럼 Host A는 16자리의 Subnet Mask를 갖고 있는 것을 볼 수 있다. 이 때 172.16.X.X는 클래스 B에 해당하고 클래스 B의 Subnet Mask가 16자리이니, Host A는 자신이 172.16.0.0으로 되어 있는 모든 네트워크와 통신할 수 있는 곳에 직접적으로 연결된 것으로 생각한다. ARP 동작 특성 상Host A가 자신과 직접 연결된 다른 기기와 통신을 하려고 하면 해당 Host의 Destination으로 ARP Request를 보내게 된다고 했으므로, 따라서 Host A가 Host D에게 Packet을 보내려고 하면 Host A는 Host D가 자신이 바로 통신을 보낼 수 있는 곳에 연결되어 있다고 생각하게 되므로 ARP Request를 바로 Host D에게 보내게 된다. 이렇게 바로 Host D로 Packet을 보내게 되었다고는 하지만 실제로는 이를 어떻게 처리하는지 살펴보자.
Host D에 도달하기 위해선 Host A는 Host D의 MAC 주소를 알아야 하기 때문에, Host A는 아래의 형식으로 ARP Request를 Subnet A에 Broadcast 하게 된다.
ARP Request를 Broadcast로 보내기 때문에 Subnet A 내에 있는 모든 노드들이 이 Packet을 받게 되지만 (Router의 e0 Interface를 포함하여), 실제로 Host D에는 이 Packet이 도달하지 않는다. (이유는 Broadcast는 기본적으로 별다른 설정이 없는 한 Router가 Forward를 시키지 않기 때문이다.) 하지만 Router는 Target Address인 172.16.20.200이 다른 Subnet에 있는 것을 알고 있는데다가, 172.16.20.200에 도달할 수 있기 때문에 아래 그림과 같이 Router 자신의 MAC 주소를 실어서 Host A에게 답을 하게 된다.
자세히 보면 Host D의 MAC 주소가 Target MAC으로 되어 있지 않고 Router의 MAC 주소가 Target MAC 주소로 된 것을 볼 수 있다.
이것이 바로 Proxy ARP Reply가 되겠다. 이 때 보내는 Reply는 Request를 보낸 Host A에게 항상 Unicast로 답하게 된다.
Host A가 ARP Reply를 받게 되면, ARP Table을 아래 그림과 같이 업데이트 하게 된다. Host D에 대한 MAC 주소를 Router의 MAC 주소로 바꾸게 된다.
이 때부터 Host A는 Host D로 보내려는 모든 Packet을 Router에게 보내게 된다. (Router는 Host D로 보내는 방법을 알고 있고 Destination IP 주소는 Host D를 향해 있기 때문에 사실 별 문제가 되지 않는다. Router는 Host D로 가는 Packet을 받게 되면 D에게 Forward 해준다.) 또한 Subnet A의 Host들에게 있는 ARP Cache는 Subnet B의 Host들에 대해서 Router의 MAC 주소로 모두 업데이트 된다. 괄호에 써놓은 것처럼 Router는 Subnet B에 해당하는 Host들에게 보내는 방법을 다 알고 있고 IP 주소에 Destination이 명시 되어 있기 때문에 Packet을 Host에게 Forward 할 수 있어 별 문제가 되지 않는다.
Host A의 ARP Cache가 되겠다.
Proxy ARP의 장단점
•
각 네트워크에 Router가 없어도 하나의 Router만 사용하여 네트워크 구성이 가능하다.
•
Host는 네트워크의 실질적인 세부 정보는 알지 못하고, ARP Request를 보내보면서 그저 아무 Destination에 도달할 수 있는 Flat Network라고 가정하게 된다. → 현재 내가 속한 Segment에서 ARP Traffic이 급증하게 된다.
•
Proxy ARP는 ARP Request의 응답으로 다른 MAC 주소를 응답해준다는 점에서 사실 ARP Spoofing 공격과 성질이 비슷하다. 따라서 이 때의 ARP Request에 대해서 Proxy ARP의 요청인지 ARP Spoofing인지 구분하기가 어렵다.