인터넷 검색을 하고 매뉴얼 페이지를 살펴보았지만 이 숫자에 대한 구체적인 답변을 찾을 수 없었습니다.
예를 들어,
# ip -d -stat ne show dev eth1 | column -t | sort -V
192.168.200.41 used 1034/4635/1032 probes 6 FAILED
192.168.200.44 lladdr 00:c0:b7:xx:xx:xx used 1037/1032/266 probes 1 STALE
192.168.20.5 lladdr 00:40:9d:xx:xx:xx used 25080/25050/25021 probes 1 STALE
192.168.20.6 lladdr 00:40:9d:xx:xx:xx used 25076/25047/25018 probes 4 STALE
답변1
읽고 나서iproute2 소스 코드, 다섯 번째 필드는 ARP
캐시 항목에 대한 타이머 정보를 제공합니다.
X/./.
ARP
: 마지막 입력 이후 경과된 시간(초)사용된./X/.
ARP
: 마지막 입력 이후 경과된 시간(초)확인됨././X
ARP
: 마지막 입력 이후 경과된 시간(초)고쳐 쓰다
이러한 타이머는 주로 오래된 항목을 관리하고 ARP
새 요청이 이루어져야 하는 시기를 결정하는 데 사용됩니다. ARP
인용하다이 통찰력 있는 답변ARP
연령 제한 에 대해 자세히 알아보세요.
답변2
strace
ip-neighbour가 실제로 무엇을 하는지 확인해 본 적이 있습니다 . strace
명령 출력에서 숫자 출력을 필터링하면 ip
sendmsg 및 recvmsg에 대한 일련의 호출이 있음을 알 수 있습니다. 흥미로운 메시지는 다음과 같습니다.
sendmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base={{len=36, type=RTM_GETNEIGH, flags=NLM_F_REQUEST|NLM_F_DUMP, seq=1539003976, pid=0}, {ndm_family=AF_UNSPEC, ndm_ifindex=0, ndm_state=0, ndm_flags=0, ndm_type=RTN_UNSPEC}, {{nla_len=8, nla_type=NDA_IFINDEX}, if_nametoindex("enp0s8")}}, iov_len=36}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0)
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{{len=76, type=RTM_NEWNEIGH, flags=NLM_F_MULTI|NLM_F_DUMP_FILTERED, seq=1539003976, pid=15530}, {ndm_family=AF_INET, ndm_ifindex=if_nametoindex("enp0s8"), ndm_state=NUD_NOARP, ndm_flags=0, ndm_type=RTN_MULTICAST}, [{{nla_len=8, nla_type=NDA_DST}, 224.0.0.22}, {{nla_len=10, nla_type=NDA_LLADDR}, 1.0.94.0}, {{nla_len=8, nla_type=NDA_PROBES}, 0}, {{nla_len=20, nla_type=NDA_CACHEINFO}, {ndm_confirmed=2192723, ndm_used=2186723, ndm_updated=2186723, ndm_refcnt=0}}]}, {{len=76, type=RTM_NEWNEIGH, flags=NLM_F_MULTI|NLM_F_DUMP_FILTERED, seq=1539003976, pid=15530}, {ndm_family=AF_INET, ndm_ifindex=if_nametoindex("enp0s8"), ndm_state=NUD_NOARP, ndm_flags=0, ndm_type=RTN_MULTICAST}, [{{nla_len=8, nla_type=NDA_DST}, 224.0.0.251}, {{nla_len=10, nla_type=NDA_LLADDR}, 1.0.94.0}, {{nla_len=8, nla_type=NDA_PROBES}, 0}, {{nla_len=20, nla_type=NDA_CACHEINFO}, {ndm_confirmed=2192699, ndm_used=2186699, ndm_updated=2186699, ndm_refcnt=0}}]}, {{len=76, type=RTM_NEWNEIGH, flags=NLM_F_MULTI|NLM_F_DUMP_FILTERED, seq=1539003976, pid=15530}, {ndm_family=AF_INET, ndm_ifindex=if_nametoindex("enp0s8"), ndm_state=NUD_STALE, ndm_flags=0, ndm_type=RTN_UNICAST}, [{{nla_len=8, nla_type=NDA_DST}, 10.11.0.23}, {{nla_len=10, nla_type=NDA_LLADDR}, 8.0.39.3}, {{nla_len=8, nla_type=NDA_PROBES}, 1}, {{nla_len=20, nla_type=NDA_CACHEINFO}, {ndm_confirmed=206484, ndm_used=206707, ndm_updated=202203, ndm_refcnt=0}}]}, {{len=88, type=RTM_NEWNEIGH, flags=NLM_F_MULTI|NLM_F_DUMP_FILTERED, seq=1539003976, pid=15530}, {ndm_family=AF_INET6, ndm_ifindex=if_nametoindex("enp0s8"), ndm_state=NUD_NOARP, ndm_flags=0, ndm_type=RTN_MULTICAST}, [{{nla_len=20, nla_type=NDA_DST}, ff02::1:ff4b:3614}, {{nla_len=10, nla_type=NDA_LLADDR}, "\x33\x33\xff\x4b\x36\x14"}, {{nla_len=8, nla_type=NDA_PROBES}, 0}, {{nla_len=20, nla_type=NDA_CACHEINFO}, {ndm_confirmed=2192670, ndm_used=2186670, ndm_updated=2186670, ndm_refcnt=0}}]}, {{len=88, type=RTM_NEWNEIGH, flags=NLM_F_MULTI|NLM_F_DUMP_FILTERED, seq=1539003976, pid=15530}, {ndm_family=AF_INET6, ndm_ifindex=if_nametoindex("enp0s8"), ndm_state=NUD_NOARP, ndm_flags=0, ndm_type=RTN_MULTICAST}, [{{nla_len=20, nla_type=NDA_DST}, ff02::16}, {{nla_len=10, nla_type=NDA_LLADDR}, "\x33\x33\x00\x00\x00\x16"}, {{nla_len=8, nla_type=NDA_PROBES}, 0}, {{nla_len=20, nla_type=NDA_CACHEINFO}, {ndm_confirmed=2192723, ndm_used=2186723, ndm_updated=2186723, ndm_refcnt=0}}]}, {{len=88, type=RTM_NEWNEIGH, flags=NLM_F_MULTI|NLM_F_DUMP_FILTERED, seq=1539003976, pid=15530}, {ndm_family=AF_INET6, ndm_ifindex=if_nametoindex("enp0s8"), ndm_state=NUD_NOARP, ndm_flags=0, ndm_type=RTN_MULTICAST}, [{{nla_len=20, nla_type=NDA_DST}, ff02::fb}, {{nla_len=10, nla_type=NDA_LLADDR}, "\x33\x33\x00\x00\x00\xfb"}, {{nla_len=8, nla_type=NDA_PROBES}, 0}, {{nla_len=20, nla_type=NDA_CACHEINFO}, {ndm_confirmed=2192536, ndm_used=2186536, ndm_updated=2186536, ndm_refcnt=0}}]}, {{len=88, type=RTM_NEWNEIGH, flags=NLM_F_MULTI|NLM_F_DUMP_FILTERED, seq=1539003976, pid=15530}, {ndm_family=AF_INET6, ndm_ifindex=if_nametoindex("enp0s8"), ndm_state=NUD_NOARP, ndm_flags=0, ndm_type=RTN_MULTICAST}, [{{nla_len=20, nla_type=NDA_DST}, ff02::2}, {{nla_len=10, nla_type=NDA_LLADDR}, "\x33\x33\x00\x00\x00\x02"}, {{nla_len=8, nla_type=NDA_PROBES}, 0}, {{nla_len=20, nla_type=NDA_CACHEINFO}, {ndm_confirmed=2192568, ndm_used=2186568, ndm_updated=2186568, ndm_refcnt=0}}]}], iov_len=580}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0)
ip neigh
strace 출력에서 명령어에 있는 숫자를 찾으려고 하면 ip neigh
ndm_used, ndm_confirmed, ndm_updated 값을 100으로 나눈 값이 표시되는 것을 볼 수 있습니다.
이것은 나를 다음과 같이 이끈다 man 7 rtnetlink
:
Rtnetlink를 사용하면 커널의 라우팅 테이블을 읽고 변경할 수 있습니다(...). 네트워크 라우팅, IP 주소, 링크 매개변수,이웃 설정, 대기열 규칙, 트래픽 클래스 및 패킷 분류자는 모두 NETLINK_ROUTE 소켓을 통해 제어될 수 있습니다. 이는 netlink 메시지를 기반으로 합니다.
그 다음에:
RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH 인접 테이블 항목(예: ARP 항목)에 대한 정보를 추가, 삭제 또는 수신합니다. 메시지에는 ndmsg 구조가 포함되어 있습니다. 구조 ndmsg { 부호 없는 문자 ndm_family; int ndm_ifindex; /* 인터페이스 인덱스 */ __u16 ndm_status; /* 상태*/ __u8 ndm_flags; /* 플래그*/ __u8 ndm_type; }; 구조 nda_cacheinfo { __u32 ndm_confirm; __u32 ndm_used; __u32 ndm_update; __u32 ndm_refcnt; }; ndm_state는 다음 상태의 비트마스크입니다. NUD_INCOMPLETE 현재 구문 분석 중인 캐시 항목입니다. NUD_REACHABLE 작업 캐시 항목을 확인했습니다. NUD_STALE 만료된 캐시 항목 NUD_DELAY 대기 타이머 항목 NUD_PROBE 현재 재탐색 캐시 항목 NUD_FAILED 잘못된 캐시 항목 대상 캐시가 없는 NUD_NOARP 장치 NUD_PERMANENT 정적 항목 유효한 ndm_flags는 다음과 같습니다. NTF_PROXY 프록시 arp 항목 NTF_ROUTER IPv6 라우터 rattr 구조의 rta_type 필드는 다음과 같은 의미를 갖습니다: NDA_UNSPEC 알 수 없는 유형 NDA_DST 이웃 캐시 n/w 레이어 대상 주소 NDA_LLADDR 이웃 캐시 링크 계층 주소 NDA_CACHEINFO 캐시 통계입니다. rta_type 필드가 NDA_CACHEINFO이면 그 뒤에 struct nda_cacheinfo 헤더가 옵니다.
nda_cacheinfo 구조는 다음에 정의되어 있습니다.<linux/neighbour.h>
이 값이 무엇을 나타내는지 궁금하다면 댓글이 <linux/neighbour.h>
별로 도움이 되지 않으며 인터넷에서 해당 값을 찾을 수 없습니다.