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 |