개요
호스트 A가 호스트 B와 통신을 하기 위해서는 서로 MAC 주소, 즉 물리적 네트워크 주소를 알아야 합니다. ARP는 호스트 간 IP 주소를 알고 있지만 MAC 주소를 모르는 경우 사용하는 프로토콜 입니다.
반대로, 호스트 간 MAC 주소를 알고 있지만 IP 주소를 모르는 경우 RARP 를 사용합니다.
Address Resolution Packet 생성 및 전달
ARP 에선 상호 간 MAC 주소를 알기 위해 Address Resolution Packet 을 생성합니다.
호스트 A는 호스트 B의 MAC 주소를 알고 싶습니다. 따라서 호스트 A는 ARP를 수행하기 위한 패킷을 생성합니다. packet 안에 들어가는 데이터는 이외에 많으나 중요한 다섯 가지 정보만 소개하겠습니다.
- ar$op : 패킷의 종류
- ar$sha : 호스트 A의 MAC 주소
- ar$spa : 호스트 A의 IP 주소
- ar$tha : 호스트 B의 MAC 주소
- ar$tpa : 호스트 B의 IP 주소
ar$op
MAC 주소를 요청하는 패킷의 경우 1, MAC 주소를 업데이트하여 요청자에게 응답하는 패킷의 경우 2입니다. 위 상황에서는 호스트 A가 호스트 B의 MAC 주소를 요청하는 패킷이므로 값은 1입니다.
ar$tha
아직 우리는 호스트 B의 MAC 주소를 모릅니다. (이를 알기 위해 패킷을 보내는 거니깐요) 브로드캐스트 용 주소 FF:FF:FF:FF:FF 가 저장되어 있습니다. 호스트 A는 해당 패킷을 브로드캐스트하여 호스트 B가 해당 패킷을 잡을 수 있도록 할 예정입니다.
마치 백화점에서 혼자 있는 아이를 찾기 위해 모든 층의 스피커를 통해 "00 군을 찾습니다" 라고 공지하는 것처럼요.
Address Resolution Packet BroadCast
호스트 A는 네트워크 상에 만든 패킷을 브로드캐스트 합니다.
호스트 A가 만든 패킷을 감지한 호스트들은 ARP 규약에 따라 아래 논리를 수행합니다. 만약 아래 논리 조건 중 하나 이상을 만족하지 않는 경우 패킷을 버립니다. 백화점에서 혼자 있는 자기 애가 아니기 때문이죠.
?Do I have the hardware type in ar$hrd?
Yes: (almost definitely)
[optionally check the hardware length ar$hln]
?Do I speak the protocol in ar$pro?
Yes:
[optionally check the protocol length ar$pln]
Merge_flag := false
If the pair <protocol type, sender protocol address> is
already in my translation table, update the sender
hardware address field of the entry with the new
information in the packet and set Merge_flag to true.
?Am I the target protocol address?
Yes:
If Merge_flag is false, add the triplet <protocol type,
sender protocol address, sender hardware address> to
the translation table.
?Is the opcode ares_op$REQUEST? (NOW look at the opcode!!)
Yes:
Swap hardware and protocol fields, putting the local
hardware and protocol addresses in the sender fields.
Set the ar$op field to ares_op$REPLY
Send the packet to the (new) target hardware address on
the same hardware on which the request was received.
호스트 B 응답
그러나 모든 조건을 만족하는 호스트 B는 해당 패킷이 본인에게 필요한 패킷임을 인지했습니다. 백화점에 혼자 있는 애가 자기 애가 맞다는 거죠. 호스트 B는 자신의 MAC 주소를 ar$tha 에 업데이트합니다.
패킷 재전송
호스트 B는 자신의 MAC 주소를 담은 패킷을 다시 호스트 A에게 돌려줍니다. 이로써 호스트 A는 호스트 B의 MAC 주소를 알게 되었습니다. 호스트 A는 호스트 B의 MAC 주소를 자신의 arp 테이블에 업데이트합니다.
이로써 호스트 A는 ARP을 통한 Address Resolution Packet 생성, 호스트 B의 MAC 주소를 알아냈습니다.
직접 확인
windows, macOS 상관없이 아래 명령어를 통해 arp 테이블을 확인할 수 있습니다.
arp -a
참고 자료
'컴퓨터공학 & 정보통신 > 네트워크 & Cisco' 카테고리의 다른 글
[네트워크/Cisco] 시스코 All-zero subnet (subnet zero), All-one subnet 개념 이해하기 (0) | 2024.12.26 |
---|---|
[네트워크] 서브넷 마스크, 네트워크 주소, 호스트 주소 이해하기 (0) | 2024.12.23 |
[네트워크] CIDR (Classless Inter-Domain Routing) 사이더 이해하기 (6) | 2024.11.12 |
[네트워크] IP Class 네트워크 클래스 A,B,C,D,E 에 대한 이해 (1) | 2024.10.31 |
[네트워크] Transport layer 전송 프로토콜 TCP UDP 이해하기 (3) | 2024.10.28 |