티스토리 뷰

study/Network

ARP

알 수 없는 사용자 2008. 4. 9. 00:00
ARP 는 Address Resolution Protocol 이라고 합니다.
ARP는 라우터 뿐만 아니라 호스트에서도 사용됩니다. 인터넷에서 모든 노드(라우터,호스트)들은 각각 인터넷주소(IP주소)를 가지고 있습니다. 그래서 인터넷 여기저기로 패킷이 오갈 수 있는 것이지요. 그런데, 노드는 이 인터넷 주소 말고, 지역적으로 사용할 수 있는 Link Layer Address(L2)를 가지고 있습니다. 보통, 이것은 Physical adddess, MAC주소, Ethernet 주소와 동일하게 됩니다. 기본적으로 패킷전달은 이 L2주소로 지역내에서 전달됩니다. 같은 네트워크 내에서 호스트와 호스트, 호스트와 라우터 간에는 L2주소를 가지고 패킷이 전달됩니다.

그럼.. 다시 처음으로 돌아와서 패킷을 전송하는 절차의 예에 대해 설명하겠습니다.
0. 호스트 A에서 호스트 B로 IP 패킷을 보내려 합니다.
1. 현재 호스트A는 호스트B의 IP주소는 알고 있습니다, 그러나 L2주소(이더넷주소)는 모르고 있습니다.
2. 호스트 A는 호스트B의 L2주소를 알기 위해서 ARP Request 패킷을 뿌립니다. 뿌려진 ARP Request는 같은 네트워크 내의 모든 노드에게 전달됩니다.
3. 호스트 C는 ARP Request 를 받았지만, 자기 IP주소를 이야기하고 있지 않으므로 그냥 무시합니다.
4. 호스트 B는 ARP Request를 받아보니, "호스트A라는 놈이 자기(호스트B)의 IP주소를 가지고 L2주소(MAC주소,Ethernet주소)를 알고 싶어하는 구나"라는 것을 인지하고, 호스트A에게 자기의 L2 주소를 ARP Response를 주어 응답해줍니다.
5. 호스트 A는 호스트 B로부터 온 ARP Response 를 받고, "오호, 호스트B의 L2주소가 xx:xx:xx:xx:xx:xx 로구나"하고 알게 됩니다.
6. 이제 호스트 A는 호스트 B로 L2주소를 써서 직접 IP패킷을 전송합니다.
7. 몇 초뒤 호스트 A는 호스트 B에게 IP패킷을 보내려 합니다. 호스트 A에게는 ARP캐쉬가 있어서 최근에 사용한 ARP Table을 가지고 있습니다. 그래서 앞의 1~5단계를 생략하고 바로 호스트 B의 L2주소를 이용하여 IP패킷을 직접 전송합니다.
8. 호스트 A의 ARP Cache (ARP Table)은 한참 사용하지 않으면 없어집니다.

일반적으로 TCP/IP패킷은 다음과 같이 생겼습니다.
[MAC 헤더] + [IP 헤더] + [TCP헤더] + [TCP 데이터그램]

PC에서 arp -a 명령을 내리면 ARP cache가 출력되는 것입니다. Dynamic 이라고 한 것은 자동으로 ARP패킷을 전송해서 얻은 것으로, 한참 사용하지 않을 경우 없어집니다. arp -s 명령을 써서 강제로 해당 IP의 L2주소를 세팅할 수 있는데 이때는 static 으로 표시되고, 직접 지우기 전에는 안 없어집니다. arp -d 를 하면 ARP cache를 모두 지울수 있습니다.