snmp를 설명하기 전에 나온 배경부터 간단하게 알아보자. snmp가 나오기 이전에 사용했던 네트워크 관리 프로토콜은 ICMP 주로 사용되었다. ICMP에 대한 간단한 설명은 아래와 같다.
- ICMP : 인터넷 제어 메시지 프로토콜로 네트워크 계층의 프로토콜로써 운영체제와 관계없이 사용할 수 있는 간단한 프로토콜이다. 네트워크로 연결된 각각의 호스트가 잘 작동하는지와 응답시간 등 간단한 정보를 얻을 수 있었으며 이를 이용한 프로그램 중 대표는 PING 이라는 프로그램이다. 그러나 시대가 발전하면서 네트워크는 점점 복잡해지고 방대해지면서 ICMP만으로는 네트워크 관리를 효율적으로 할 수 없게 됬다.
그래서 발전한 SNMP(Simple Network Management Protocol)란 간이 망 관리 프로토콜이라고 하며 IP 네트워크 상의 장치로 부터 정보를 수집 및 관리하고 수정하여 장치의 동작을 변경하는데 사용되는 인터넷 표준 프로토콜이다. snmp는 네트워크 7계층 중에서 응용 계층에 해당하는 포로토콜로 TCP/IP 기반하며 메시지 교환에 의해 통신이 이루어 진다.
동작 원리
- 관리 시스템(Manager)
: 162/udp 포트를 사용하고 agent는 161/udp 포트를 이용한다.
Manager: Agent에 필요한 정보를 요청하는 역할
Agent: Agent가 설치된 시스템의 정보나 네트워크 정보 등을 수집하여 mib 형태로 보관 manager에 전달해주는 역할 수행
- 관리 시스템과 agent간 에 통신하기 위해서 최소 다음 3가지 사항이 일치되어야 합니다.
snmp 버전: manager 와 agent 간 snmp 버전이 일치해야 합니다.
Community String: 상호간에 설정한 Community String이 일치해야 합니다.
PDU(Protocol Data Unit) : 통신하기 위한 메시지 유형
필요 용어 정리
- Manager: agent에게 정보를 요청하거나 수정을 요청하는 시스템(관리자가 필요로 하는 정보를 요청하는 역할의 어플리케이션 혹은 장비)
- agent: 일반적으로 과닐 대상에 해당하는 네트워크 장비들을 의미함며, Manager가 요청한 정보를 수집하여 제공합니다.
- MIB: 관리 되어야 할 특정한 정보,자원을 객체라고 하고 이러한 객체들을 모아놓은 집합체를 MIB라고 한다. 즉 관리자가 조회하거나 설정할 수 있는 객체들의 데이터베이스이다. mib는 객체별로 트리 형식의 구조를 따른다.
- SMI: MIB 를 적용하기 위한 일반적인 구조를 의미하며 ASN.1(Abstract Syntax Notation) 언어를 사용.
- community String : snmp 데몬과 클라이언트가 데이터를 교환하기 전에 인증을 위해 사용하는 일종을 패스워드로, 초기값으로 public 또는 private가 설정되어 있습니다. SNMP 에서 RO(read only)와 rw(read write) 모드를 제공한다. 쓰기 권한이 있을 경우에는 중요 설정을 수정할 수 있는 등 심각한 보안 문제를 유발할 수 있으므로 가급적 사용 자제를 권고합니다
[snmp 를 사용하여 확인 가능한 내용들]
1. 서버들의 시스템정보(cpu, memory, disk)의 사용량 정보 확인
2. 네트워크 장비들의 트래픽 사용량, 에러량, 처리속도, 인터페이스 정보 장치의 통신 이상 유무 체크 확인
3. nms / sms 프로그램을 통해서 망 장애 탐지 / 모니터링 / 통합관리가 가능
snmp 메시지 종류
밑 그림은 snmp의 구조이며 client(관리자) = Manager, Server(각 장치) = Agent라고 정의한다.
- getRequest: 매니저가 하나 이상의 에이전트에게 오브젝트 값을 요청하는 메시지
- getNextRequest: 위에 메시지와 비슷하지만 mib 강에 정의돈 오브젝트 다음 값을 요청을하는 메시지
- setRequest: 매니저 값을 요청하기 위한 것이 아니라 값을 설정하기 위해 에이전트에게 요청하는 메시지
- getResponse: 매니저가 보낸 메시지에 에이전트가 응답하는 메시지
- Trap: 에이전트가 자신에게 일어난 사건들에 대한 정보를 매니저에게 알리는 메시지(0~6까지의 flag 값 존재)
- 0 - cold start: 에이전트 초기화
- 1 - warm start: 에이전트를 설정의 변화 없이 초기화
- 2 - link down: 통신 연결 링크 하나가 끊어짐
- 3 - link up: 통신 연결 링크 하나가 연결됨
- 4 - Authentication Failure: 서로 간의 커뮤니티가 일치하지 않음
- 5 - Egp Neighbor Loss : EGP의 상태가 변함
- 6 - Enterprise Specific: 벤더별 특정한 코드 값의 Trap
v1으로는(get,getnext,set,response,trap)를 사용한다. 여기서 업그레이드 된 v2에서는 위에 메시지 + getbulk, inform이 추가 되었는데 getbulk는 getnext 업그레이드 형태로 기존의 getnext가 다음 값 하나만 가져오는 것에 반해 gethulk는 다음 값들을 연속한 n개를 가져올 수 있다.