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이 된 상태이다.)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d59e07b7-26a8-49dd-9077-4a375b21959e/Untitled.png

만약 우리가 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

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c2176b68-6fbb-4409-86c3-71265459d670/Untitled.png

ARP Header의 Operation 필드에는 Request, Reply 딱 두개만 존재한다. 요청을 할때는 1, 응답을 할 때에는 2로 지정된다. 요청을 보낼때에는 Target Hardware Address를 모를 경우에 생략 하거나, 0으로 채우거나, 1로 채워도 된다. (현재는 대체적으로 0으로 채워서 보낸다.)