본문 바로가기

IT/Protocol

SNMP 프로토콜

SNMP
(The Simple Network Management Protocol)
SNMP는 일종의 클라이언트/서버 모델인 매니저(manager)/에이전트(agent)구
조이다. 각각의 에이전트들은 네트워크 장비나 호스트를 나타내는데 이들은 자
신의 네트워크에 대한 정보를 가지며 보통 snmpd라는 데몬을 수행한다. 그래서
매니저가 자신의 네트워크 정보에 대한 질의를 해오면 이에 대답하는 구조를 가
진다. TCP/IP의 네트워크 구성요소는 다음의 세 가지이다.

(1) Management Information Base(MIB)
- 에이전트가 어떤 정보를 가져야 하는지 정의
(2) Structure of Management Information(SMI)
- MIB의 변수값을 참조할 때 사용되는 계층구조
(3) Simple Network Management Protocol(SNMP)
- 매니저와 에이전트사이의 통신 프로토콜

SNMP 네임공간
SNMP 데이터 공간은 적어도 이론적으로는 광범위하게 확장 가능하다. 많은 부
분이 확장을 위해 남겨져 있다. 이러한 네임공간의 기본 형식은 SMI(Structure
of Management Information)이라 불리며 RFC1155에 기술되어 있다.
SMI는 파일시스템과 유사하게 계층적 구조를 가진다. 다른 점은 분리자로 도트
(.)를 사용하며 각 노드는 이름보다는 번호로 지정된다는 점이다. 하지만 관례적
으로 각 노드에는 텍스트 이름이 또한 주어진다. 이는 IP주소와 도메인명의 공
존이유처럼 사용자의 편의를 위한 것이다. 각 노드로의 경로는 OID(Object
IDentifier)라 불린다. 다음의 트리를 보자.

root
+----------------------+--------------------------+
ccitt(0) iso(1) joint-iso-ccitt(2)
|
org(3)
|
dod(6)
|
internet(1)
+-----------+----------+----------+--------+----------+
directory(1) mgmt(2) experimental(3) private(4) security(5) snmpv2(6) | | mib-2(1) enterprises(1)
+------------+--------+-----+------+------+------+------+-----+----+
system(1) interface(2) at(3) ip(4) icmp(5) tcp(6) udp(7) egp(8) ...(9) snmp(10)

가장 하위 노드들(system, interface 등)은 각각 네트워크 관리 정보를 가지는
변수들을 가진다. 각 변수들을 알아보기에 앞서 이러한 변수들의 데이터 타입에
대해 알아보도록 하자. 다음의 표는 객체(Object-변수)가 가질 수 있는 데이터
의 종류이다.


데이터 타입 설명
INTEGER 인터페이스의 MTU, IP forwarding flag, 여러 최대/최
소값 등을 나타낸다.
OCTET STRING 8비트 값을가지며 바이트(0~255 사이의 정수값)값의 나
열로써 BER인코딩 등에 사용된다.
DisplayString 8비트값을 가지는 것은 OCTER STRING과 같으나 각
바이트는 NVT ASCII의 문자이다. 이런 문자의 나열
로 MIB-II의 경우는 255개보다 적어야 한다.
OBJECT IDENTIFIER SMI에서의 각 객체(변수)를 나타내는 경로명 NULL값
을 가지지 않음을 나타낸다.
IpAddress 길이가 4인 OCTET STRING, 즉 IP주소를 나타낸다.
PhysAddress 길이가 6인 OCTET STRING으로 이서네트 주소를 나
타내는데 사용된다.
Counter 음수가 아닌 정수로 그 값이 0~4,294,967,295 사이를 순
차적으로 가지며 끝에 서는 다시 0으로 돌아오는 카운
터 용도이다.
Gauge Counter와 마찬가지이지만 그 값은 증가도 될 수 있고
감소도 될 수 있다. 값이 최대값에 이르면 리셋될 때까
지 대기한다.
TimeTicks 시간을 세는 카운터로서 보통 에이전트가 작동된 후의
시간을 100분의 1초로 나타내는데 사용한다.
SEQUENCE C 언어의 구조체와 유사하다. 즉 위의 데이터의 모음을
나타낸다.
SEQUENCE OF 일종의 배열로 기본 데이터형의 모음이다.

SMI의 노드인 OID는 위의 값 중 하나를 가지며 원하는 OID의 지정은 앞서 얘
기한 것처럼 ‘ . ’로 연결한 정수값을 이용한다. 위의 트리에서 예를 들면 at
의 경우 OID는 1.3.6.1.2.1.3이 되는 것이다.

Management Information Base(MIB)
네임공간의 실제 내용은 SNMP 프로토콜을 통해 접근할 수 있는 데이터를 나타
내는 MIB라 불리는 조각에 의해 모여져 있다. 기본적인 SNMP MIB는
RFC1066에 자세히 나와있다. 그리고 이에 대한 확장인 MIB-II에 대한 것은
RFC1213에 기술되어 있다. 요즘 대부분 시스템들은 MIB-II를 지원하는 추세이
다. 다음 표는 그 중 대표적인 몇 가지를 예로 든 것이다.

OID 데이터 타입 내용
system.sysDescr text 시스템 정보-회사, 모델, OS종류 등
system.sysLocation text 시스템의 물리적 위치
system.sysContact text 시스템 구입자에 대한 연락 정보
system.sysName text 시스템의 이름, 보통 완전한 DNS명
interfaces.ifNumber int 존재하는 네트워크 인터페이스의 개수
interfaces.ifTable table 각 인터페이스에 대한 정보비트 테이블
ip.ipForwarding int 시스템이 게이트웨이면 1, 아니면 2
ip.ipAddrTable table IP 주소 데이터의 테이블(masks등)
ip.ipRouteTable table 시스템의 라우팅 테이블
icmp.icmpInRedirects int 수신된 ICMP redirects의 수
icmp.icmpInEchos int 수신된 ping의 개수
tcp.tcpConnTable table 현재 TCP 연결 테이블
udp.udpTable table 서버가 기다리는 UDP 소켓 테이블


위의 표에서 쓰인 데이터 타입은 독자들의 이해를 돕기 위해 간단히 나타낸 것
이나 엄밀히 말하면 앞서 얘기한 MIB 데이터 타입 중의 하나이다.
‘sys...’인 OID는 system 그룹의 OID 중의 하나이며 ‘interface..’인 OID는
if 그룹, ‘ip..’는 ip 그룹, ‘icmp..’는 icmp 그룹에 속한다. 이러한 MIB의 변
수들은 실제 참조할 때 인스턴스의 의미로 OID 끝에 ‘.0’을 붙인다. 예를 들
면 ‘system. sysDescr.0’과 같은 형태이다. 또한 각 변수들은 읽기/쓰기가 가
능한 것이 있는 반면 쓰기는 하지 못하는 변수도 있다.

SNMP 프로토콜 동작
SNMP는 다음의 5가지 종류의 메시지로서 매니저(클라이언트)와 에이전트(서
버) 사이의 통신이 이루어진다.

(1) 하나 이상의 변수값을 가져온다 : get-request 메시지
(2) 하나 이상의 변수 지정 후 다음 변수의 값을 가져온다
: get-next 메시지(테이블에서)
(3) 하나 이상의 변수 값을 지정한다 : set-request 메시지
(4) 하나 이상의 변수 값을 반환한다 : get-response 메시지, 에이전트가 매니저
로 앞의 3가지 메시지에 대한 결과로 전달하는 메시지
(5) 에이전트에 무슨 일이 발생하는 경우 매니저로 알려준다
: trap 메시지

trap 메시지의 경우는 전부 6가지가 있다. 다음 표를 확인해 보기 바란다.

trap 종류 이름 설 명
0 coldStart 에이전트가 자체적으로 초기화중이다.
1 warmStart 에이전트가 자체적으로 재초기화중이다.
2 linkDown 인터페이스가 다운되었음
3 linkUp 인터페이스가 구동하였음
4 authenticationFailure 매니저에게 받은 커뮤너티가 유효하지 않음
5 egpNeighborLoss EGP peer가 다운되었음
6 enterpriseSpecific 특정 시스템에 종속된 내용으로 specific code 필드
참조

이러한 클라이언트와 서버사이의 통신에는 사용자 인증, 혹은 패스워드와 같은
것이 존재해 서비스의 허용을 지정하는데 이 문자열을 커뮤너티(community)라
고 한다.
SNMP는 위와 같이 단순 질의/응답 프로토콜이므로 UDP 프로토콜을 통해 패
킷이 전송된다. 그러므로 매니저는 에이전트의 응답이 없는 경우 재전송이 필요
하게 된다.
SNMP는 2개의 포트를 사용한다. (1)-(4)의 메시지의 경우는 에이전트의 161번
포트로 접속하며 (5)같은 메시지는 매니저의 162번 포트로 접속된다. 그러므로
하나의 시스템이 매니저와 에이전트를 겸하는데 전혀 무리가 없다.
SNMP 패킷의 길이는 정해져 있지 않다. 그 이유는 ASN.1과 BER이라 불리는
것에 의해 인코딩되기 때문이다.

[출처] SNMP|작성자 갑부