SNMP 프로토콜
- Simple Network Management Protocol, 단순망관리 프로토콜
1. SNMP 프로토콜
네트워크 관리를 위해, 관리 정보 및 정보 운반을 위한 프로토콜.
쉽게 말해서 장비를 관리하고 모니터 위하기 위해 사용하는 네트워크 프로토콜로 장비의 범위는 통신이 가능하다면, 네트워크 장비(라우터, 스위치, 허브), 정보보호장비, 서버, 프린터, UPS가 포함됨.
SNMP 프로토콜을 이용해서 회사같이 많은 장비들이 있는 곳에서 관리 및 모니터링을 위해 사용된다. 예를 들면, CPU, Mem, Disk사용량
- UDP / IP상에서 동작.
- 사용 포트 : 161, 162
- OSI 7 계층에선 Application계층에 해당하는 프로토콜
- 현재 버전으로 v1, v2, v3이 있다.
- 메시지 문법 체계 : OSI가 표준화한 ASN.1/BER라는 문법 체계를 따름
2. Manager / Aget 구조
SNMP에서 관리하는 시스템은 Manager, 관리 대상은 Agent라고 한다.
1) Manager (NMS, Network Management System/Station) / UDP 162
- 관리하는 시스템(호스트 등)
- 관리하는 시스템 안에 설치
- 필요한 메시지(관리용 메시지)를 Agent에 요청하고 모니터링한다.
2) Agent / UDP 161
- 관리되는 장비들 (허브, 라우터, 스우치, 브리지, 호스트 등)에 설치되어 있는 시스템
- Agent 장비에서 필요한 정보를 수집하여, Manager에게 전달해주는 역할
3. 프레임워크 및 프로토콜
Manager와 Agent간 정보를 주고받을 때 사용하는 방법은 SMI와 MIB를 이용한다.
SMI 및 MIB라는 다른 2개의 정보 구조를 설명하는 프로토콜과 함께 사용
간단히 정리하면,
SMI는 문법과 같고
MIB는 OID 객체를 모아서 만든 데이터베이스라고 생각하면 될 거 같다.
1) SMI : Structure of Managemetn Information 관리정보구조
- SNMP 관리 정보의 표현 구문 문법 등을 규정
- 변수 작명, 변수 유형, 객체 및 값들의 부호화 등의 규칙
- 장비마다 다르게 표현될 수 있는 MIB 객체의 표현 동질성을 유지하는 표준
2) MIB : Management Information Base 관리정보저장소
- 관리 특성을 묘사하는 변수 객체들의 모음. 객체들의 데이터베이스
- 쉽게 말해, Manger와 Agent사이에서 정보 공유를 위해 어떤 정보를 주고받을지 정의되어 있는 데이터베이스라고 생각하면 됨. Manager가 MIB에 있는 정보를 바탕으로 Agent에게 해당 내용에 대해 요청하면(쿼리를 날림), 그에 대한 값(변수)을 Agent가 Manager에게 전달.
3) OID : Object Identifier
- 트리 형태의 계층구조(Tree hierarchy)로 MIB 내 정보 식별 체계. OID가 모여서 MIB가 형성된 것
- MIB가 데이터베이스라면 OID는 그걸 구성하는 요소로 생각하면 됨.
- 점과 숫자로 구성.
예시로, 아래는 UPS MIB로 OID값들이 계층적으로 모여서 구성된 것을 확인할 수 있다.
주고받는 정보를 보면 UPS정보, 배터리 정보, INPUT 정보 등이 있다.
4. SNMP 동작 및 명령어
[동작 방식]
1) Manager가 Agent에게 관리 정보를 요청
- agent가 생산하는 관리 정보(MIB) 데이터를 통하여 관리 역할 수행
2) Manager가 Agent의 상호 데이터 교환
- MIB 내 변수에서 읽기, 쓰기(Get, Set) 명령과 가져오기(GetNext) 명령에 의함
[방식에 따라]
Polling 방식 (Agent가 UDP 161번 포트 사용)
- Get(Request) : Manager ▶Agent로 값을 요청
- Set(Request) : Manager ▶Agent로 값을 변경
- Response : Agent ▶Manager로 Get 명령 요청에 대한 반응으로 값을 준다.
Event Reporting 방식 (Manager가 UDP 162번 사용 )
- Trap/Infromation : Agent ▶Manager로 값을 요청도 안 하지 않아도 이벤트가 발생하면 값을 줌.
- SNMP 명령어
- Get : Manager에서 Agent로 원하는 객체의 특정 정보를 요청
- GetNext Request : Manager가 Agent로 이미 요청한 정보의 다음 정보를 요청한다. (MIB트리 안에 있는 다음 OID값을 검색)
- Get Bulk Request : 큰 MIB 테이블에서 값을 검색할 때 사용 (그냥 많이 검색할 때 사용)
- Set Request : Manager가 Agent로 특정한 값을 설정하기 위해 사용한다. (쓰기 권한이 있어야 한다.)
- Response : Agent가 Manager가 요청한 값이나 신호를 Manager에게 주는 명령어.
- Trap : Agent에서 시작되는 명령으로 이벤트가 발생하게 되면 Manager에게 Agent가 보내는 신호
- Information : Agent에서 시작되는 명령으로 Trap과 유사한데 추가로 메시지 수신 시 관리자의 확인 포함됨.
5. SNMP 통신을 하기 위해 일치해야 할 3가지 사항
1) SNMP 버전 : Manager와 Agent 간 SNMP 버전이 일치해야 한다.
2) Community String : 상호 간에 설정한 Community String이 일치해야 한다
3) PDU(Protocal Data Unit) : 통신하기 위한 메시지 유형
참고) SNMP 프로토콜 Manager 입장에서 확인 명령어(Linux)
snmpget -v [snmp버전] -c [커뮤니티명] [IP] [OID]
snmpwalk -v [snmp버전] -c [커뮤니티명] [host] [OID]
- 전부 출력 : oid 값에 . 을 입력
- OID가 아닌 MID로 적혀있을 때
snmptranslate [OID]
- OID값은 알지만 항목명을 모를 때
snmptranslate -Tid [OID]
- 항목의 상세정보를 알고 싶은 경우
6. SNMP 프로토콜을 활용한 NMS에서 관리 예시
출처 및 참고 :
정보통신기술용어해설, http://www.ktword.co.kr/test/view/view.php?m_temp1=279
ManageEngine OpManager, https://www.manageengine.com/network-monitoring/what-is-snmp.html#snmp-basic-commands
매일 꾸준히, 더 깊이 블로그, [네트워크/Linux] SNMP와 snmpget, snmpwalk 명령어, https://engineer-mole.tistory.com/138