IT/Linux

[Network] ARP Table의 ARP 개수 설정(ARP Cache)

착한아줌마 2017. 7. 21. 15:42
반응형

Linux에서 ARP Table을 확인 할 수 있다

 

# arp -a

 

아래와 같이 ip 주소별 MAC 주소가 어느 인터페이스(eth0)로 등록되었는지를 보여준다

 

이런 명령어로 나오는 정보는

원래 내용이 기록되어 있는 파일이 있다

 

- arp 정보가 기록된 파일: /proc/net/arp

 

실제 파일이다

첫줄에 각 행에 들어간 값의 정체에 대해 알려주고 있다

 

** HW type은 2계층 프로토콜부분으로 0x1은 ethernet으로 보통 ether라고 표현된다

 

** Flags는 해당 arp 정보의 상태로 0x2는 Connected, C라고 일반적으로 표현되고

0x6은 임의로 고정한 MAC주소로, CM이나 PERM으로 표현된다

0x0은 Incomplete로 알 수 없는 상태이다. 이때는 MAC주소가 나오지 않는다

 

 

 

 

 

본론으로 들어가 ARP Table의 ARP 개수를 확인해야하는데

arp -a 명령어는 총 갯수를 표현해주지는 않는다

그래서 위에 쓴 arp 정보가 기록된 파일(/proc/net/arp)를 이용하는데

 

파일 내용의 줄 수로 개수를 판별한다

arp table 개수: 아래 명령어로 나온 값 -1

 

# wc -l /proc/net/arp

 

명령어 결과로 나오는 숫자는 8

그러나 실제 ARP Table의 ARP 개수는 7개이다

-1을 해야하는데 이유는 첫 줄이 분류이름 줄이라서 그렇다

 

 

그런데 이 ARP Table의 ARP 개수가 정해저 있다

Linux kernel 에서의 기본값은 최대 1024개로

ARP Cache 라고 일반적으로 표현하는 것 같다

 

아래 명령어로 확인 할 수 있다.

 

# sysctl -a | grep gc_thresh | grep ipv4

 

 

sysctl prarameter 중 최대한 적게 나오게 명령어를 주었다

저중에서 net.ipv4.neigh.default.gc_thresh로 시작하는 3개의 옵션이

ARP Table의 ARP 개수에 관련된 parameter이다

 

gc_thresh1은 garbage collector가 안들어올 때 최소값(default 128)

gc_thresh2는 garbage collector가 들어올 때 5초이상 지나면 지워버리고 남길 기본값(default 512)

gc_thresh3은 garbage collector가 들어올 때 최대값(default 1024)

※ 참조: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

 

이중 최대값인 gc_thresh3 값의 크기를 변경하여

ARP Table의 등록된 ARP 개수를 늘리거나 줄일 수 있다.

 

변경하는 명령어는 아래와 같다

 

# sysctl -w net.ipv4.neigh.default.gc_thresh3=8192

 

 

변경 후에 계측기나 패킷 제너레이트 툴을 이용하여 MAC주소를 강제고 많이 학습하게 하면

ARP Table의 ARP 개수가 늘어난 것을 확인 할 수 있다

 

 

 

 

'IT > Linux' 카테고리의 다른 글

SSH 접속 느림 현상 원인 및 해결방법  (0) 2018.09.21
[Sendmail] 메일 서버 relay 설정  (0) 2017.10.10
[Network] LACP 트래픽 포트 선정 방식 설정  (0) 2017.09.28
[Linux] ulimit 명령어  (0) 2017.09.26
[Network] bonding 설정  (0) 2017.07.27