Address Resolution Protocol (ARP)

손하은·2024년 5월 13일

컴퓨터네트워크

목록 보기
1/2

1. Address Mapping

패킷 전달 시 logical address(IP), physical address(MAC) 둘 다 필요
=> static or dynamic mappnig

2. Position of ARP in TCP/IP protocol suite


network layer의 protocol 구성
IP protocol : 제일 중요한 protocol
ARP protocol : 크게 봤을 때 table 관리, 개념적으로 input으로 IP 주소가 들어왔을 때 output으로 MAC 주소를 내보냄

3. ARP operation


같은 network 상에서 A->B, ARP table이 비어있는 상황
1. A가 switch에 연결되어있는 모두에게 request 전송 (request) => broadcast
2. B가 A에게만 MAC 주소 전달 (reply) => unicast

4. ARP packet


Hardware Type : 하드웨어 주소의 유형, 이더넷 통신 시 1
Protocol Type : 매핑 대상인 프로토콜 주소의 유형, IPv4의 경우 0x0800
Hardware Address Length : 하드웨어의 길이, Byte 단위, 이더넷상 0x06
Protocol Address Length : 프로토콜 주소 길이, Byte 단위, IPv4의 경우 0x04
Operation Code : ARP의 구체적인 동작을 나타냄

-> 3, 4는 생략

  • Encapsulation of ARP packet

    Preamble and SFD: 패킷의 시작지점을 패턴으로 알려줌
    Type: IP datagram인지 ARP packet인지 구분하기 위해 값 다르게 설정
    -> 0x0806 : ARP packet, 0x0800 : IP datagram

5. Example of ARP request and reply

A -> B, A와 B는 컴퓨터이거나 router
A는 B의 IP주소는 알고 있고 MAC주소를 알고 싶은 상황

  • From A to B (request)

    Destination address가 0xFFFFFFFFFFFF(모두 1)인 경우
    : MAC의 broadcast 주소, switch가 받아서 연결되어있는 모든 컴퓨터에 다 보냄
    Source address : A의 MAC 주소
    Type : 0x0806 => ARP packet
    Data : ARP packet -> 받는 쪽 MAC 주소는 모르니까 다 0으로 보냄
    request 도착 시 B는 A의 IP, MAC 주소를 cache table에 저장
    => A의 주소를 모를 시 A에게서 오는 데이터에 대한 응답을 보낼 때 매번 request를 보내야 하는 상황 발생

  • From B to A (reply)

    Destination address : A가 보낸 Request의 ARP packet(Data)에 적힌 A의 MAC 주소를 삽입 => A에게만 전달, unicast
    reply 도착 시 A는 자기한테 온 것인지 확인 -> ARP인지 확인 -> ARP이면 reply인지 확인 -> B의 MAC 주소를 cache table에 저장

6. ARP components

1. Output Module

: IP packet을 받아서 ARP packet (request)를 내보냄

  • IP packet을 받으면 cache table를 찾아봄
  • 해당 IP가 table에 있으면 state 확인
    • if state=R
      => 이미 해결된 상태, IP-MAC pair가 table에 존재
      -> packet과 MAC주소를 datalink layer으로 전송
    • if state=P
      => 내 앞의 애가 이미 request를 보냈고 그에 대한 reply를 기다리는 상황
      -> queue에 packet 삽입
  • 해당 IP가 table에 없으면
    => A가 B에게 처음 보낸 상황
    - table에 state=P, attempts=1, IP 주소 기록하고 queue 생성 후 queue에 해당 packet 삽입, request 전송

2. Input Module

: ARP packet이 들어왔을 때 해당 패킷에 적혀있는 상대방의 주소를 보고 일함

  • 상대방 IP 주소가 table에 있을 때
    • if state=R
      -> table에 적힌 정보와 비교하여 바뀐 정보가 있으면 update,
      없으면 time-out만 리셋
    • if state=P
      => 막 reply 도착한 상황
      -> state를 R로 변경하고 table에 정보 저장 후, queue안의 packet들을 다 끄집어내서 MAC 주소와 함께 datalink로 전송
  • 상대방 IP 주소가 table에 없을 때
    => A가 B에게 처음 보낸 상황, B 입장에서는 A의 정보가 없음
    -> table에 A에 대한 정보 기록
  • 만약 해당 ARP packet이 request였으면
    -> reply 생성해서 전송

3. Cache-control Module

: 특정시간 (교재에서는 60s)마다 깨어나서 line by line으로 수행

  • if state=F
    -> 아무것도 안 함
  • if state=P
    -> attepmts 1 증가 후 maximum을 넘어서는지 확인
    - 넘어서면 state를 FREE로 변경 후 queue에서 제거
    - 안 넘어서면 request 한번 더 보냄
  • if state=R
    - if 현재 시점과 생성시간의 차이 > 60
    time-out 시간에서 -60s
    - if 현재 시점과 생성시간의 차이 < 60
    time-out 시간에서 차이만큼만 뺌
    => 뺀 결과값이 0보다 작거나 같으면 지움 (state=F, queue 삭제)

0개의 댓글