ARP 캐시 조정

주소 해석 프로토콜(ARP)은 32비트 IPv4 주소를 데이터 링크 프로토콜에 필요한 48비트 호스트 어댑터 주소로 맵핑하는 데 사용됩니다.

시스템에서 투명하게 ARP를 처리합니다. 그러나 시스템은 연관된 32비트 IP 주소와 해당 48비트 호스트 주소를 보유하는 테이블인 ARP 캐시를 유지합니다. 다수의 머신(클라이언트)이 연결된 환경에서는 ARP 캐시의 크기를 변경해야 할 수 있습니다. no 명령과 netstat 명령을 사용해 변경을 수행할 수 있습니다.

no 명령은 네트워크 조정 매개변수를 구성하며 해당 ARP 관련 조정 가능 매개변수는 다음과 같습니다.

  • arpqsize = 12
  • arpt_killc = 20
  • arptab_bsiz = 7
  • arptab_nb = 149

ARP 테이블 크기는 arptab_nb 매개변수에서 정의하는 수의 버킷으로 구성됩니다. 각 버킷은 arptab_bsiz 매개변수에 정의된 항목 수를 보유합니다. 디폴트는 각각 일곱 개의 항목이 있는 149개의 버킷이므로 테이블은 1043(149 x 7)개의 호스트 주소를 보유할 수 있습니다. 이 디폴트 설정은 IP 네트워크에서 최대 1043개의 다른 머신과 동시에 통신하는 시스템에 적용됩니다. 서버가 네트워크에서 1043개가 넘는 머신에 동시에 연결하는 경우에는 ARP 테이블이 너무 작아 ARP 테이블에서 스래시가 발생하고 성능이 저하됩니다. 그러면 운영 체제에서 캐시의 항목을 제거하고 새 주소로 대체해야 합니다. 이를 수행하려면 ARP 프로토콜이 이 정보를 교환하는 동안 TCP 또는 UDP 패킷이 큐에 대기해야 합니다. arpqsize 매개변수는 ARP 요청에서 ARP 응답이 수신될 때까지 ARP 계층에서 큐에 대기시킬 수 있는 대기 패킷의 수를 결정합니다. ARP 큐가 과수행되면 송신 TCP 또는 UDP 패킷이 삭제됩니다.

다음과 같은 이유로 ARP 캐시 스래싱이 성능에 좋지 않은 영향을 미칠 수 있습니다.

  1. 현재 송신 패킷이 네트워크에서 ARP 프로토콜 검색을 대기해야 합니다.
  2. ARP 캐시에서 다른 ARP 항목을 제거해야 합니다. 모든 주소가 필요한 경우 삭제된 호스트 주소에 패킷이 전송되면 다른 주소가 필요합니다.
  3. ARP 출력 큐가 과수행되어 패킷이 삭제될 수 있습니다.

arpqsize 매개변수, arptab_bsiz 매개변수, arptab_nb 매개변수는 모두 재부트 매개변수입니다. 이는 이들 매개변수가 부트 시 또는 TCP/IP 로드 시 빌드된 테이블을 변경하므로 해당 매개변수의 값을 변경하는 경우 시스템을 재부트해야 함을 의미합니다.

arpt_killc 매개변수는 ARP 항목이 삭제되기 전의 시간(분)입니다. arpt_killc 매개변수의 디폴트 값은 20분입니다. arpt_killc 매개변수에 정의된 시간(분)마다 테이블에서 ARP 항목이 삭제되어 호스트 시스템이 48비트 주소를 변경하는 경우 이를 처리할 수 있습니다. 48비트 주소 변경은 네트워크 어댑터가 대체되는 경우에 발생합니다. 그러면 캐시에 있는 효력이 상실된 항목이 삭제되어 이전 주소가 제거될 때까지 해당 호스트와 통신할 수 없습니다. 이 시간을 늘리면 시스템의 ARP 검색이 감소하지만 효력이 상실된 호스트 주소를 더 오래 보유할 수 있습니다. arpt_killc 매개변수는 동적 매개변수이므로 시스템을 재부트하지 않고 변경할 수 있습니다.

netstat -p arp 명령은 ARP 통계를 표시합니다. 해당 통계는 전송된 총 ARP 요청 수와 새 항목에 필요한 공간을 확보하기 위해 항목 삭제 시 테이블에서 제거된 패킷 수를 표시합니다. 이 제거된 개수가 많은 경우 ARP 테이블 크기를 늘려야 합니다. 다음은 netstat -p arp 명령의 예입니다.
# netstat -p arp

arp:  
     6 packets sent
     0 packets purged
arp -a 명령을 사용해 ARP 테이블을 표시할 수 있습니다. 명령 출력은 ARP 테이블에 있는 주소와 이들 주소를 해쉬하는 방법, 주소가 해쉬된 버킷을 표시합니다.
 ? (10.3.6.1) at 0:6:29:dc:28:71 [ethernet] stored 
                                                   
bucket:    0     contains:    0 entries            
bucket:    1     contains:    0 entries            
bucket:    2     contains:    0 entries            
bucket:    3     contains:    0 entries            
bucket:    4     contains:    0 entries            
bucket:    5     contains:    0 entries            
bucket:    6     contains:    0 entries            
bucket:    7     contains:    0 entries            
bucket:    8     contains:    0 entries            
bucket:    9     contains:    0 entries            
bucket:   10     contains:    0 entries            
bucket:   11     contains:    0 entries            
bucket:   12     contains:    0 entries            
bucket:   13     contains:    0 entries            
bucket:   14     contains:    1 entries            
bucket:   15     contains:    0 entries            


...lines omitted...

There are 1 entries in the arp table.