ARP를 들어가기 전에 하나의 메시지를 송신자[Sender]가 수신자[Receiever]에게 전달하는 과정을 먼저 생각해보자. Sender의 Application 계층에서 생성된 해당 메시지는 Presentation, Session, Transport 계층을 거치면서 데이터를 암호화하고 압축하는 과정과 소켓과 포트번호를 부착하는 과정 거친다. 그리고 Network 계층의 라우팅을 통해 정한 경로를 따라서 Receiever가 있는 네트워크 영역까지 도착한다. (지금은 뭔소린지 이해가 안돼도 그렇구나하고 넘겨도 된다.) IP 주소를 보고 겨우겨우 Receiever가 있는 네트워크까지 도착했는데 알고보니 해당 네트워크(예를 들어 공유기)에는 연결된 기기 수가 많아서 IP로만 찾아갈 수 없게되었다. 이때, 메시지는 어떻게 Receiever를 찾을 수 있는걸까?
답은 'MAC'주소다. MAC 주소는 전자기기라면 모두가 가지고 있는 전세계 고유한 번호로 48bits로 구성된다. Sender는 메시지를 전송할 때 데이터링크를 거치는데 이때 프레이밍 과정에서 프레임 헤더가 새로 붙는다. 여기 이 프레임 헤더에 바로 Receiever의 IP주소와 MAC 주소가 함께 적힌다. !!! 따라서 IP 영역까지 찾아간 후 그 때부턴 MAC 주소를 기반으로 기기를 찾는 것이다.
그리고 바로 이 IP 주소를 MAC 주소로 변경해주는 역할을 하는 것이 ARP이다. 해당 프로토콜은 ARP 테이블을 유지하며 각 기기들의 IP 주소와 MAC 주소를 함께 저장해 놓는다.
그러면 APR는 어떻게 동작되는 걸까? 노드 A와 B가 존재할 때, 이 둘은 지금까지 데이터를 주고 받아본 적이 한번도 없다. 이때 A는 B의 IP 주소를 알지만 B의 맥주소는 알지 못하는 상황이다(즉, A의 ARP 테이블에는 B의 IP에 해당하는 MAC 주소가 존재하지 않는다.) 그러나 A는 B에게 메시지를 전송하고 싶다. 이때 과정은 어떨까?
1. A와 B가 같은 로컬 네트워크에 존재할 때
같은 네트워크에 존재하는 두 노드가 통신할 때는 라우터를 거칠 필요가 없다. 해당 네트워크 안에서 B가 어디에 있는지만 찾으면 된다. 따라서 A는 'B를 찾고 있다' 라는 ARP 쿼리 패킷을 브로드 캐스트한다. 이때 해당 네트워크에 존재하는 모든 네트워크는 해당 ARP 쿼리를 받지만, 목적지를 확인한 후 '나는 B가 아닌데'라고 하며 해당 쿼리 패킷을 버린다. 그러나 B는 해당 쿼리를 확인한 후 '어? 나를 찾네?' 라는 것을 깨닫고 '내 MAC 주소는 이거야~' 라며 A에게 유니캐스트를 한다. A는 B에 해당하는 IP, MAC 주소를 자신의 ARP 테이블에 저장한다. 이후에 A가 B에게 메시지를 보낼 때는 더 이상 위의 과정 필요없이 바로 B의 MAC 주소를 적어넣으면 된다.
2. A와 B가 서로 다른 네트워크에 존재할 때
이때는 라우터를 거쳐서 통신이 이루어져야 한다. A는 메시지에 B의 IP 주소를 넣을 수 있지만 MAC 주소는 모르기 때문에 넣을 수 없다. 이때 A는 MAC주소에 B가 아닌 B로 가는 길에 존재하는 라우터의 MAC 주소를 적는다. 아래와 같다. A가 보내고자 하는 메시지의 목적지 MAC 주소는 B의 MAC 주소가 아니라 라우터 R의 MAC 주소인 것을 주목해서 보자.
라우터 R은 해당 메시지를 받으면 목적지 IP를 조사한 후에 해당 IP는 노드 B를 향한다는 것을 알아챈다. (이때 라우터 R은 B의 네트워크 영역와 연결된 라우터이기 때문에 B의 IP와 MAC 주소를 이미 알고있다.) 따라서 R은, 패킷에 적혀있던 자신의 MAC 주소를 지운 후, B의 MAC 주소를 적어 넣는다. 여기서 끝나는 것이 아니라! MAC의 송신지(MAC src)를 A가 아닌 라우터 R로 바꾼다. 다음과 같이 말이다.
따라서 패킷은 MAC 주소의 목적지인 B에게 정상 전달된다.
다른 네트워크일 때는 라우터가 적극 관여한다는 것을 잊지말자.
'전공 > 네트워크' 카테고리의 다른 글
네트워크 계층 - 포워딩 (0) | 2020.10.27 |
---|---|
네트워크 계층- 개요 (0) | 2020.10.27 |
데이터 링크- 대표 프로토콜(HDLC, 이더넷, X.25) (0) | 2020.10.18 |
데이터 링크- Multiple Access Protocols(MAC) #3. Taking Turns (0) | 2020.10.16 |
데이터 링크- Multiple Access Protocols(MAC) #2. Random Access (0) | 2020.10.16 |