ping이 제대로 안 나가거나 아래 메세지를 출력할때
connect: No buffer space available
아래 값으로 설정(디폴트 값은 128, 512, 1024임)
net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096
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 개수가 늘어난 것을 확인 할 수 있다