SNMP

혁콩·2023년 10월 23일
0

SNMP

Simple Network Management Protocol의 약자이다. 이름과는 다르게 간단하지 않았던 느낌을 받았다.
해당 프로토콜을 사용하면서 공부했던 내용에 대한 기록을 남겨보고자 한다.

먼저, SNMP를 사용하면 해당 장비에 대한 정보(Device info라고 칭하겠다.) 를 얻을 수 있다.
예를 들어, 네트워크 내부의 특정 서버의 CPU나 메모리 사용량을 알고 싶다면, SNMP를 통해 해당 장비에 물어보면 된다는 것이다.

하지만 원하는 정보를 수신하기 위해서 알아야 하는게 있는데, 바로 mib 값이다.
사실 mib의 값은 아니고, 해당하는 oid 값을 알아야 한다.
mib는 정보에 대한 집합의 느낌이고, oid는 해당 집합의 특정 값을 나타낸다.
이 oid 값은 장비마다 다르니, 찾아보고 질의를 진행해야 한다.

이 SNMP에는 2가지가 존재하는데, GET과 TRAP이다.

GET V.S. TRAP

SNMP GET은 내가 알고싶은 장비에게 물어보는 것이다.
"CPU, 메모리 사용량은 얼마니?" 라고 요청하면 "얼만큼 사용중이야" 라고 대답하는 것이다.

TRAP의 경우는 조금 다르다. TRAP은 사용자가 물어보지 않아도 특정 이벤트가 생기면 "나 이런일이 있었어" 라고 대상에게서 Trap Message가 날아온다.

GET은 161번 포트, TRAP은 162번 포트를 사용한다.

버전?

SNMP에는 버전도 있다.
크게 1, 2, 3으로 나눠져 있는데, 이 버전은 보안성을 위한 업그레이드이다.
1과 2는 사용자 입장에선 큰 차이를 느끼지 못하였다.
1과 2는 커뮤니티라는 문자열을 사용하는데, 대상 장비가 설정한 커뮤니티를 같이 요청해야 장비가 응답을 해준다.
v3의 경우, id와 password를 사용하며, 인증용 Hash 알고리즘과 암/복호화용 대칭키 알고리즘을 사용한다.

Trap도 비슷하게 v3의 경우 인증과 암호화를 위한 알고리즘을 선정하여 진행한다.

여기까지가

SNMP 프로토콜을 이용해 NMS 기능을 만들기 위해 공부했던 내용들이다.
여러개의 장비들을 통합적으로 확인해야 하는 시스템이었고, Go lang을 이용해 작성하였다.
사용한 라이브러리는 다음과 같다.
1. SNMP GET gosnmp
2. SNMP TRAP go-snmplib

두 라이브러리 모두 v3까지 지원하니, Go lang을 이용해 무언가를 제작해보고 싶다면 위 라이브러리를 사용하길 추천한다.

profile
아는 척 하기 좋아하는 콩

0개의 댓글