[CS] 컴퓨터 네트워크 ARP

재오·2023년 5월 31일
4

CS

목록 보기
25/35
post-thumbnail

개념적으로 IP주소를 주면 ARPMAC주소를 아웃풋으로 내보낸다. Hop-to-Hop을 하기 위해서는 ARP가 필요하다.

ARP 동작원리


그림(a)는 멀티캐스트가 아니라 브로드캐스트 상황이다. A가 B한테 보내는 상황이다. B의 MAC주소를 모를 때 Request를 보낸다. 회색 말풍선에 들어있는 IP주소를 가지고 있는 곳에서만 MAC주소가 무엇인지 응답을 해준다. 이 응답은 보낸 쪽인 A한테만 간다.

ARP 구조


맨 위의 칸에는 MAC의 유형을 나타내며 보통 1로 고정이다. 그리고 프로토콜 타입은 IPv4인 경우에 0x0800으로 설정이 된다.
두번째 칸에는 맥주소의 길이로 보통0x06, 프로토콜 주소의 길이로 보통 0x04 그리고 Operation Code는 위 그림의 오른쪽 파란색 표에서 4개중 하나가 선택된다. 여기서 RARPARP와 반대로 인풋이 MAC주소이고 아웃풋이 IP주소이다.
아래 네칸은 차례대로 보내는 곳의 IP와 MAC주소, 받는 곳의 IP와 MAC주소가 들어간다.

ARP packet


Preamble and SFD에는 싱크를 제대로 읽기 위해서 도와주는 패턴이 들어있다. DestinationSource는 MAC주소가 들어간다. Data에는 일반적으로 IP datagram이나 ARP가 들어가는데, 이를 구분해줄 수 있는게 앞의 Type이다. 이 데이터의 맥시멈이 MTU이다. ARP 구조에서 봤던 헤더 표가 저 데이터 영역에 들어간다고 생각하면 된다.

처음에 다 1로 되어있는 상태로 보내는 것이 MAC주소용 브로드캐스트 주소이다. 세번째 칸에는 보내는 곳의 MAC주소가 들어간다. 그리고 헤더에서 세번째 칸은 찾고자 하는 MAC주소를 모르기 때문에 다 0으로 된 것을 보낸 것이다. 상대방이 보낼 때에는 이제 MAC주소를 알기 때문에 내 MAC주소와 보내는 곳의 주소를 담아서 보내준다.

ARP Components

Output Module

IP packet을 받은 경우에 우선 cache table을 찾아본다.
만약에 Entry가 없는 경우에는 Entry를 만들고 P상태가 된다. 그리고 Attempt=1을 추가한다. 큐를 생성하여 큐에 넣은 후 ARP request를 보낸다.
만약에 Entry가 있는 경우에는 P상태인 경우에는 큐에 넣어두고 R상태인 경우에는 MAC주소를 가져와 전송한다.

Input Module

ARP packet을 받을 경우에 cache table을 찾아본다.
만약에 Entry가 없는 경우에는 Entry를 만들고 테이블에 추가한다.
만약에 Entry가 있는 경우에는 Entry를 업데이트 해줄건데 P상태인 경우에는 큐에 있던 모든 패킷을 전송하고 R상태인 경우에는 타임아웃을 초기화한다.
ARP Request를 받은 경우에 ARP reply를 보낸다.

Cache Control Module

주기적으로 cache table을 관리 해준다. 오래되면 지워버린다. 우리 예제에서는 60초를 기준으로 만약 R상태이면 60초를 기다린다. 그리고 타이머 값이 0보다 같거나 작으면 지워버린다.
만약 P상태라면 몇번을 시도했는지 본다. 우리 수도코드에서는 5로 해놨는데 5가 되었다면 지워버린다.

Pseudo Code

  • Output Module
  • Input Module
  • Cache Control Module

Example








profile
블로그 이전했습니다

0개의 댓글