본문 바로가기

IT 관련/Technical Info

ARP / RARP / Proxy ARP / Gratuitous ARP

출처 블로그 > 하늘 담은 집
원본 http://blog.naver.com/tjrnsoehd21/50009618963
ARP(Address Resolution Protocol)
  여기서 말하는 ARP 프로토콜에 관한 내용은 일반적인 내용보다는 우리가 실제로 하고 있는 네트웍 통신과정에서 어떻게 쓰이고 있는가에 대해 상세히 알아보도록 하겠다. 우선 ARP는 Address Resolution Protocol로 주소 결정 프로토콜이다. 이 프로토콜은 우리가 IP만 알고 있을 때 그 IP에 해당하는 MAC 주소를 결정하는 프로토콜이라 할 수 있다.
일반적인 Ethernet 통신과정에서 패킷의 형태는 아래와 같다.
preamble : 패킷의 시작을 알리는 머리말이라 할 수 있다.
DA : 수신자의 MAC 어드레스가 들어간다.
SA : 송신자의 MAC 어드레스
Ethernet Type : DATA에 포함된 프로토콜의 형태를 나타냄.

DATA : 송蟁수신자의 IP가 이부분에 들어가게 된다.
그럼 예를 들어 같은 네트웍에 있는 호스트 2대가 통신을 한다고 하자.
A에서 B로 패킷을 보낼 때 A는 우선 201.204.34.24의 MAC 주소를 알기 위해 A컴에 있는 ARP Cache를 확인한다. ARP Cache에 IP/MAC 주소의 매핑값이 있으면 위 패킷 구조에서 DA에 B의 MAC 주소를 넣고 SA에 자신의 MAC 주소를 넣은 다음 전송하게 된다.
만일 ARP Cache 에 B의 MAC 주소가 없으면 A는 "201.204.34.24라는 IP를 가진 자가 누구냐"라는 ARP Request를 브로드케스트 하게 된다. 이때 A는 자신의 IP와 MAC 주소를 포함하여 ARP Request를 보내게 된다.
로컬 네트웍의 모든 컴은 A의 ARP Request를 받고 A가 찾는 IP를 자신의 것과 비교를 하여 자신의 것과 다르면 ARP Request를 무시하고 만일 자신의 것과 같다면 응답을 하게 된다.
B는 A가 찾는 IP가 자신임을 확인하고 우선 자신의 ARP Cache에 A의 IP/MAC 주소를 갱신하고 A에게 자신의 IP/MAC 주소를 보내게 된다.
위와 같이 동작하는 ARP 패킷의 구조를 살펴보면 아래와 같다.
하드웨어 종류(16bit): 하드웨어 네트워크의 종류를 나타낸다.
프로토콜 종류(16): 상위계층 프로토콜 종류를 나타낸다.
HLen(8): 하드웨어 주소의 길이를 나타낸다.(Ethernet 경우 MAC 주소가 6바이트이므로 6으로 설정이 된다.)
PLen(8): 프로토콜 주소의 길이를 나타낸다.(IP 네트웍일 경우 4바이트가 IP 주소이므로 4로 설정이 된다.)
작동(16): ARP Request 일 경우 1로, ARP Response일 경우 2로 설정이 된다.
송신자 HA(48): 송신자 하드웨어 어드레스 즉 MAC 주소가 들어가게 된다.
송신자 IP(32): 송신자 IP 주소가 들어가게 된다.
수신자 HA(48): 수신자의 MAC 주소가 들어가게 된다.
수신자 IP(32): 수신자의 IP 주소가 들어가게 된다.
그럼 앞의 상황에서 패킷의 내용이 어떻게 변하며 전송이 되는지 자세히 알아보자.
1. 처음 B의 IP/MAC 주소 매핑 정보가 ARP Cache 에 있을 때 A는 아래와 같이 패킷을 보내게 된다
Ethernet Type 가 0800 인 것인 DATA 부분에 IP 데이터그램이 들어간다는 것이다.
2. A가 ARP Cache에서 B의 MAC 주소를 얻지 못하고 ARP Request를 보낼 때 패킷의 구조는 아래와 같다.
ARP 패킷은 위 그림과 같이 IP 데이터그램 부분에 들어가 IP로 캡슐화되지 않으므로 라우터를 넘어 가지 않는다.
Ether Type이 0806 으로 되어 있는데 이것은 ARP를 나타내는 값이며, ARP 패킷 구조 내에서 하드웨어 종류 값의 0001은 Ethernet를 나타내고, 프로토콜 종류의 값에 IP를 나타내는 0800으로 되어 있는데 이건 ARP가 IP에 해당하는 MAC주소를 요구하고 있다는 것이다.
그리고 수신자의 MAC 주소에 FFFFFFFFFF로 되어있는데 이건 수신자의 MAC 주소를 모르기 때문에 이렇게 해서 보내는 것으로 모두 0이나 모두 1로 채우나 보통 1로 채워 보내게 된다. 또한 작동에 0001로 된 것은 ARP Request를 나타내는 것이다.
3. B의 입장에서 A의 ARP Request에 대한 ARP Response를 할 때 패킷의 구조는 다음과 같다.
여기선 대부분 2.에서 언급한 것과 비슷하나 다른 것이 있다면 작동이 ARP Response를 나타내는 0002,송신자 HA와 IP에 B의 MAC 주소와 IP가, 그리고 수신자 HA와 IP에 A의 MAC 주소와 IP가 들어 있다는 것이다.
원격 호스트인 경우 어떻게 통신을 하는지 한번 알아 보자.
A에서 B로 패킷을 전송한다고 하자.
1. A는 우선 B의 IP와 서브넷 마스크를 AND 비교를 해서 B의 IP가 A의 네트웍에 있는지 확인할 것이다. 확인 결과 B가 원격 호스트임을 알게 되고 A는 패킷을 기본 게이트웨이로 보내기 위해 ARP 캐시에서 기본 게이트웨이의 IP 주소/ MAC 주소의 매핑을 확인하게 된다. 그후 기본 게이트웨이의 MAC 주소를 알게 되면 게이트웨이로 패킷을 전송하게 된다.
2. 만일 지정된 기본 게이트웨이의 매핑 값이 ARP 캐시에 없을 경우(ARP 캐시는 15분 정도 통신을 하지 않게 되면 해당 호스트의 IP/MAC 주소 매핑 값을 지운다.) 기본 게이트웨이 주소에 대한 ARP 요청을 브로드케스트 하게 된다.

3. 기본 게이트웨이인 R1에서 A의 ARP 요청을 받아 ARP 응답을 통해 e0의 IP address와 MAC address를 A에게 알려 주게 된다. 그후 A는 기본 게이트웨이로 패킷을 전송하게 된다.
4. A로부터 패킷을 받은 라우터는 우선 A에서와 같이 이 패킷의 목적지 주소가 로컬인지 원격인지를 확인하게 되고 만일 로컬 컴퓨터이면 ARP Cache를 찾아보고 Cache에 없을 경우 브로드케스팅을 하여 MAC 주소를 얻게 된다.
5. 만일 4번에서 라우터가 목적지 주소가 로컬이 아닌 원격임을 확인하게 되면 라우팅테이블을 확인한 후 해당하는 라우터(R2)에 다시 ARP 요청을 보내 해당 라우터의 MAC 주소(R2의 e0)를 파악한 다음 패킷을 해당 라우터로 전송하게 된다.
6. 마지막에 패킷을 전달받은 라우터는 ARP Cache를 확인한후 브로드 케스팅하는 과정으로 B의 MAC 주소를 알아내어 B에게 패킷을 전달하게 되는 것이다.
 
 
RARP(Reverse Address Resolution Protocol)
RARP 프로토콜은 ARP와 반대로 MAC address을 IP로 매핑시키는 역할을 한다. 하지만 대부분의 모든 호스트들이 통신을 하기 위해 ARP를 사용하는 것과는 달리 RARP는 특별한 경우에만 사용이 된다.
그 특별한 경우란 디스크없는 컴퓨터가 처음 전원이 들어 왔을 때 RARP 서버로부터 IP를 부여받을 때이다.
디스크 없는 컴퓨터는 중요한 데이터를 중앙 서버에 두며, 각 클라이언트가 디스크가 없이 서버의 데이터를 받아 사용하도록 하는 것으로 각 클라이언트에 사용자가 마음데로 프로그램을 설치 할 수 없도록 하고 전체 하드웨어 비용을 줄이는 이점이 있다.
그럼 RARP가 사용되는 경우와 RARP가 어떻게 동작을 하는지 자세히 알아 보자.
RARP는 위에서 말한 바와 같이 디스크가 없는 단말기와 같은 컴퓨터가 처음 전원이 들어오면서 통신을 하기위해 RARP 서버로부터 IP를 얻기 위해 사용이 된다. 이 IP를 얻기위한 과정을 보면
1. 디스크가 없는 컴퓨터(이후 A라 한다)에 전원을 켜면 이 컴퓨터는 우선 자신의 IP를 알기 위해 RARP 서버를 찾게 되는데 RARP의 주소를 모르기 때문에 RARP Request를 브로드 케스트하게 된다.
2. RARP 서버가 네트웍의 RARP Request 정보를 받아 들인다. RARP Request 정보는 네트웍의 모든 컴퓨터가 받아 들일 수 있지만 RARP 서버만 이에 응답을 하고 RARP 서버가 두 대 이상이 있을 경우 두 대 모두 RARP Request 에 응답을 하게된다.(하지만 일반적으로 한 대는 기본 RARP 서버로 한 대는 보조 RARP 서버로 둔다.)
3. RARP Request를 한 A는 RARP 서버로 부터오는 RARP Response를 받아 들이나 RARP Response 가 두 개 이상일 때는 첫 번째 Response만 받아들이고 나머지는 무시한다.
이렇게 함으로써 A는 IP를 얻게 되는 것이다.
위와 같이 동작을 하는 RARP 패킷 구조를 보면 ARP와 똑같다는 것을 알 수 있다.
여기서 다른 점이 있다면 RARP Request나 RARP Response시 내부에 채워지는 값이라 할 수 있는데 ARP와 중복이 되는 부분이 많으므로 간단하게 살펴보도록 하자.

● RARP Request 시 (요청)

- 보라색부분은 Ethernet 패킷의 데이터링크 계층 부분이며 연두색부분은 RARP 패킷부분이다.
- 송신자의 IP 주소와 대상 호스트의 IP 주소에는 임의의 값이 들어 갈 수 있으나 일반적으로 모두 0인 값이 채워지게 된다.

- 대상 MAC주소엔 RARP의 MAC 주소를 모르기 때문에 그냥 RARP Client의 MAC 주소를 넣어 보내게 된다.

● RARP Response 시 (응답)
 
proxy ARP
 ▷Subnet을 인식하지 못하는 호스트와 subnet을 인식하는 다른 호스트가 공존할 수 있도록 하기위해 broadcast   전송 네트워크에 사용된다.
 ▷proxy ARP는 router가 한쪽 편에 있는 host request에 대해 다른 편의 host를 대신하여 응답.
 ▷ARP를 요청한 host의 destination의 host와 같은 segment에 없으면 일단 router가 자신의 MAC address를 대신 전송한다.
 gratuitous ARP
어떤 host가 자기 자신의 IP address에 대해 ARP request를 송신. 여기에 대한 답이 오면 자기 자신과 같은 IP address를 누군가 쓰고 있는 것이므로 IP address의 중복사용을 막는다.