네트워크 장비들의 주요 성능과 기능을 모니터링(관제)하고 장애 발생 시 이를 관리자에게 전달하거나 장비에 문제가 생기지 않아도 먼저 관리자에게 특이점을 보고할 수 있는 프로토콜.
간이 망 관리 프로토콜이라 불리우며, IP 네트워크 상의 장치로부터 정보를 수집 및 관리하며, 또한 정보를 수정하여 장치의 동작을 변경하는 데에 사용되는 인터넷 표준 프로토콜이다. SNMP를 지원하는 대표적인 장치에는 라우터, 스위치, 서버, 워크스테이션, 프린터, 모뎀 랙 등이 포함된다.
관리자는 SNMP를 통해 수집한 정보를 바탕으로 네트워크 장비의 현재 기능 상태와 성능 정보, 장애 발생 부분을 확인하고 대처할 수 있습니다. 뿐만 아니라 SNMP를 통해 장비의 정보 (설정, Config)를 수정할 수도 있다.
SNMP는 UDP (Port 161)를 사용하여 장비의 정보를 수집한다.
SNMP는 네트워크 장비만을 관제하는 데에 국한되는 프로토콜이 아니며, SNMP를 지원하는 컴퓨터 혹은 장비라면 SNMP를 이용해 관제할 수 있다.
장비의 정보를 수집하고 저장하는 역할을 하는 프로토콜이기 때문에 이를 활용하기 위해서는 정보를 수집하는 주체와 정보를 제공하는 주체가 있어야 한다. 이를 Manager와 Agent로 표현한다.
Manager(이하 매니저) : 장비의 정보를 수집하는 하드웨어/소프트웨어
Agent(이하 에이전트) : 정보를 제공하는 주체인 네트워크 장비를 의미
현업에서는 Manager는 실제 장비를 수집하는 하드웨어/소프트웨어이므로 NMS(Network Management System)라고 부른다. NMS는 SNMP를 활용하여 네트워크 장비의 정보를 상시 수집하고 장애 발생 시 (SNMP 정보 변경 시) 이를 사용자에 알려주는 소프트웨어이다.
NMS 솔루션을 활용해서 네트워크 내에 사용 중인 네트워크 장비를 모니터링하며 이상 정보 발생 시 알람을 전달받을 수 있다.
Agent의 경우, 네트워크 장비 내에서 가동되는 SNMP Daemon을 의미하지만 보통 네트워크 장비로 통칭한다.
보안을 강화하기 위한 수단을 추가하며 버전이 계속 올라왔다. SNMP 정보 자체의 보안이 아닌 매니저(NMS)와 에이전트(네트워크 장비) 간 인증을 위한 값, Community String(이하 커뮤니티)의 보안 취약성 때문이다.
커뮤니티 값은 NMS 솔루션과 네트워크 장비 간 인증에 사용되는 값이다. NMS 솔루션이 특정 네트워크 장비를 관제하고자 할 경우, 네트워크 장비에 설정된 커뮤니티 값과 동일한 평문(String)을 네트워크 장비에 전달해야 한다. 일종의 비밀번호 같은 것. 커뮤니티 값이 일치하지 않으면 네트워크 장비는 관제를 거부한다. SNMP를 이해함에 있어 커뮤니티 값은 매우 중요하다.
Username(계정)
과 Password(비밀번호, 커뮤니티 값에 해당)
을 제공해야 함. 이 중 비밀번호는 인증 값과 암호 값으로 구성되며 2개 모두를 입력해야 한다.SNMP의 궁극적인 목적은 네트워크 장비의 현 정보를 수집하여 NMS와 같은 관리 솔루션 혹은 관리자에게 전송하는 것이다. 그렇기에 SNMP의 정보를 전달할 메시지가 존재하며 메시지에도 Type(이하 타입)이 존재한다. 타입에는 여러 종류가 있으며 대표적으로 SNMP Get
, SNMP set
, SNMP TRAP
이 있다. Get
은 말 그대로 정보를 가져오는 메시지 타입이며, Set
은 SNMP를 이용해 장비의 정보를 변경(설정)하는 메시지 타입이다.
(NMS)Manager와 (네트워크 장비)Agent가 메시지를 이용해 통신하는 것.
SNMP TRAP
은 사용자(관리솔루션)가 요청한 정보가 아닌 이상 발생 시 장비가 즉시 전송하는 메시지이다. 장비가 먼저 전송한다는 점에서SNMP TRAP
이 발생했다는 것은 중대한 사안이 발생했음을 의미한다.SNMP Get
은 말 그대로 장비 기능/설정을 확인하기 위해 SNMP 정보를 요청하기 위한 메시지이다. 그렇기에 정보 요청을 위한GetRequest
와 응답을 위한GetResponse
로 구분된다.GetRequest
는 한 개의 정보만을 수집하기 위한 메시지로 기본이 되는 메시지이다. 하지만 현업에서는 주로 SNMP 정보를 가져올 때 대량으로 가져오기 때문에GetRequest
메시지 하나만으로는 문제가 있었고, 대량 검색이 가능한 메시지가 필요하게 되었다.
그리하여GetNextRequest
와GetBulkRequest
가 존재하게 된다.
GetNextRequest
는 단독으로 존재하는 정보가 아닌 연속적으로 다수 존재하는 정보를 한 번에 가져오기 위한 메시지이다.
GetBulkRequest
는Bulk
라는 단어처럼 정보 묶음을 통째로 가져오기 위한 메시지이다.
SNMPv1
ver에서는 결함 중, 값을 대량으로 가져오는 메시지가 없다고 했었는데, 그리하여SNMPv2
에서 추가된 것이 바로GetBulkRequest
이다.SNMP Get
이 네트워크 장비의 기능/설정 확인을 위해 SNMP 정보를 요청하는 것이라면SNMP Set
은 네트워크 장비의 설정을 변경하기 위해 정보를 역으로 전달하는 메시지이다. 다시 말해SNMP Set
메시지를 이용해 네트워크 장비의 설정을 제어하는 것. 다만 굳이 SNMP가 아니어도 장비 설정을 바꾸는 방법은 무궁무진하며, 또한 주로 이러한 작업은 네트워크 엔지니어의 몫이기에 잘 사용되지는 않는다.
SNMP TRAP
은 사용자(관리솔루션)가 먼저 정보를 요청하지 않아도 장비의 이상 상황 발생 시 사용자에게 해당 내용을 알리는 메시지 타입이라 하였다.
보통 SNMP를 이용한 네트워크 장비 모니터링은 사용자가 원하는 항목만을 선정하여 해당 항목의 정보를 수집하는 경우가 대부분이다. 시스템의 리소스라는 것은 늘 한정적이기 때문에 SNMP를 이용한 모니터링 또한 매우 중요한 정보와 사용자가 원하는 정보만을 대상으로 모니터링하는 것이 중요할 것이다.
(다른 메시지들은 Request에 해당하는 Response만을 전송하는 반면, Trap은 일방적으로 에이전트에서 매니저로 전송됨.)
따라서 사용자가 장비 모니터링에 있어 놓칠 수 있는 부분을 보완하는 역할을 하며, 그만큼 중요하기에 SNMP 정보 교환에 있어 UDP 161번을 사용하는 SNMP Get/Set과는 달리 UDP 162
번이라는 독자적인 포트 번호를 사용하여 일반적인 정보 교환과 통로를 따로 두고 있다.
지속성 있는 유무형의 객체를, 전 세계적으로 유일하게 식별하기 위한 ID 체계.
지금까지 매니저와 에이전트가 메시지를 통해 SNMP를 주고받는 흐름에 대해 알아보았다. 그럼 이 SNMP 정보는 어떻게 구별되고 관리가 되어질까?
SNMP에서는 네트워크 장비의 기능과 설정을 OID
라는 개념을 통해 구별하고 정리한다.
위의 그림을 보면 네트워크 장비의 CPU [평균 5초 / 1분 / 5분] 사용률을 두고 각각의 OID가 있는 것을 확인할 수 있다. 단순 숫자 나열이 아닌 트리구조의 정보체계 속에 존재한다.
OID가 속한 집합과 그 성격을 확인하기 위해서는 트리구조의 최상단(root)부터 순차적으로 확인하면 된다.
1.3.6.1.4.1.9.9.109.1.1.1.1.5
를 위 트리구조에 빗대어 살펴보면 다음과 같다.
iso(1) - org(3) - dod(6) - internet(1) - private(4) - enterprise(1) - cisco(9) - ciscoMgmt(9) - ciscoProcessMIB(109) - ciscoProcessMIBObjects(1) - cpmCPU(1) - cpmCPUTotalTable(1) - cpmCPUTotalEntry(1) - cpmCPUTotal5min(5)
최상단(맨좌측 숫자)부터 모든 네트워크 장비의 Vendor(이하 벤더)에 공통되는 숫자를 나열하다가 enterprise(1)
이후 벤더별 특성에 맞는 숫자 (cisco(9))를 나열하여 벤더와 벤더 장비의 기능을 숫자로 표현한다. 다시 말해 각각의 숫자에는 모두 의미가 있으며, 그 숫자를 따라내려가면 CPU 평균 5분 사용률에 대한 정보가 나오고 해당 OID로 SNMP GetRequest를 실시하게 되면 네트워크 장비는 해당 OID에 적재된 현재 값을 Response하게 되는 것이다. 물론 enterprise(1)
라는 중간 숫자만 있는 것이 아니고 다양한 숫자가 존재하며 그에 걸맞는 다양한 트리가 존재하지만 이를 모두 알 필요는 없다.
또한 벤더를 가리지 않고 사용되는 OID와 벤더별로 지정하여 사용하는 OID, 2가지의 OID 종류가 존재하는데, 편의상 전자를 Public OID
, 후자를 Private OID
라고 부른다.
어느 벤더이든 반드시 공통적으로 사용해야 하는 OID가 존재한다.
System
, Interface
, IP
, TCP
, UDP
, SNMP 관련정보
등 벤더별 (네트워크 장비 정보) 차이점이 존재하지 않고 꼭 정보를 제공해야 하는 OID이다.
정해진 이름은 없으나 이를 Public OID
로 통칭하여 부르겠다.
OID 번호는 1.3.6.1.2.1.x
로 시작하며 광범위한 정보를 담고 있다. 예를 들어 Public OID 중 System OID를 살펴보면 Uptime
, Name
, Description
, SYSOID
등이 존재한다.
- SYSOID
각 벤더별로 사용하는 번호가 다른, 다시 말해 식별 번호에 해당하며 해당 벤더만이 사용하는 OID이다. Cisco CPU 사용률을 확인하기 위한 OID 값을 자세히 보면enterprise
다음 숫자에cisco(9)
라고 적힌 것을 볼 수 있는데, 이는 벤더를 상징하는 숫자이다. 말그대로 네트워크 장비 벤더를 구분하기 위한 숫자이며, 그 OID가 바로 SYSOID이다. SYSOID는 Public OID에 속해 있으며 SYSOID를 가리키는 OID값은1.3.6.1.2.1.1.2.0
이다. 보통1.3.6.1.4.1.SYSOID
로 표시된다.
벤더별로 자신만이 사용하는 OID로 편의상 Private OID
라고 부른다. 여기에는 해당 벤더가 제공하는 고유한 정보들이 대부분 존재하는데, CPU 사용률부터 메모리 사용량, FAN 상태, 온도, POWER 상태, 기능 상태 등이 포함이 된다. Private OID는 주로 1.3.6.1.4.1.x
로 시작하는 것이 대부분이다.
위에서 보았던 CPU 평균 5분 사용률 OID인 1.3.6.1.4.1.9.9.109.1.1.1.1.5
또한 Private OID에 해당한다.
OID의 집합을 MIB라 한다. MIB는 OID를 다양한 목적별로 모아둔 테이블로서, 벤더마다 다수의 MIB를 보유하고 이를 사용자에게 제공함으로서 NMS 솔루션에 MIB에 적힌 OID를 추가하여 관제할 수 있도록 돕는다. MIB는 보통 벤더마다 다른 값을 갖지만, 벤더 내에서도 모델별로 다른 MIB를 제공하는 경우가 흔하다. 그래서 아무리 같은 벤더라 하더라도 모델이 다르면 MIB가 다르고 MIB가 다르면 OID가 다르니 신규 모델의 장비를 모니터링할 때 OID를 추가로 확보해야 하는 경우도 종종 있다.
현업에서 각 벤더의 장비가 어떤 OID를 제공하는지 눈으로 식별하고자 할 때 사용하는 소프트웨어가 바로 MIB Browser
이다. MIB Browser가 설치된 PC와 모니터링하고자 하는 네트워크 장비가 네트워크 상으로 연결되어 있다면, 위 소프트웨어를 통해서 네트워크 장비가 보유하고 있는 OID와 OID가 품고 있는 값을 확인할 수 있다.