2.4. Cơ sở dữ liệu thông tin quản trị
2.4.1. Cấu trúc thông tin quản trị SMI
Trong mô hình Manager/Agent, việc lƣu trữ các thông tin về đối tƣợng quản trị sao cho có thể truy cập, thay đổi một cách dễ dàng. Mô hình sử dụng lƣu trữ thông tin trong giao thức SNMP tuân theo chuẩn SMI. Cấu trúc thông tin quản trị SMI xác định các kiểu dữ liệu có thể sử dụng đƣợc trong MIB, cách thức biểu diễn, sắp xếp và đặt tên cho các tài nguyên trong MIB.
Đồng thời nó cũng qui định cấu trúc của MIB và cách xác định biến cho MIB.
Đối với mỗi đối tƣợng chịu sự quản trị đều phải có tên, cú pháp mô tả và cách mã hoá. Đối tƣợng đƣợc định danh theo tên (OID) và tên này phải là duy nhất. Cấu trúc SMI sẽ nhận nhiệm vụ tổ chức thông tin, đánh tên thông tin, và mô tả các thông tin của đối tƣợng đó sao cho việc truy cập mức logic diễn ra đƣợc dễ dàng. Trong đó, cú pháp mô tả kiểu dữ liệu dƣới dạng số nguyên (interger), xâu (string), ... còn mã hoá mô tả phƣơng thức dữ liệu sẽ đƣợc mã hoá, truyền đi giữa các thiết bị.
Định nghĩa đối tượng quản trị
Đối tƣợng quản trị gồm ba phần nhƣ sau:
- Tên (Name) hay định danh đối tƣợng (OID): Định rõ một đối tƣợng duy nhất. Tên có thể ở dạng số cách nhau bởi dấu chấm thập phân hoặc dạng chữ có ý nghĩa nào đó về đối tƣợng có thể đọc đƣợc. Ví dụ nhƣ OID cho mgmt (management) là: 1.3.6.1.2 hoặc
iso.org.dod.internet.mgmt
- Kiểu dữ liệu và cú pháp (Type and Syntax): Một kiểu dữ liệu của đối tƣợng quản trị đƣợc định nghĩa bằng việc sử dụng một tập các kiểu của ngôn ngữ ASN.1. ASN.1 là một cách đặc tả dữ liệu để mô tả và truyền thông giữa Manager và Agent. ASN.1 sử dụng các ký hiệu mà không bị phụ thuộc vào môi trƣờng hệ điều hành nào, tức là máy tính chạy hệ điều hành Window NT cũng có thể liên lạc đƣợc với máy chạy trên Linux một cách dễ dàng.
- Mã hoá (Encoding): Việc mã hoá thông tin một đối tƣợng quản trị thành một chuỗi octet sử dụng các quy tắc mã hoá cơ bản BER. BER xây dựng cách mã hóa và giải mã để truyền các đối tƣợng qua các môi trƣờng truyền nhƣ Ethernet.
Cú pháp
Có hai loại cú pháp chuẩn đó là:
- Cú pháp trừu tƣợng (abstract syntax): định nghĩa các đặc tả cho dữ liệu ký hiệu.
- Cú pháp truyền (transfer syntax): định nghĩa việc mã hoá các thành phần trong cú pháp trừu tƣợng.
Trong đó, SMI dùng ASN.1 để định nghĩa cú pháp trừu tƣợng cho thông điệp mà ASN.1 thì định nghĩa các thành phần ngôn ngữ cơ sở và cung cấp các quy tắc cho việc kết nối các thành phần vào thông điệp. BER chính là công cụ cung cấp cú pháp truyền. BER đƣợc kết hợp với cú pháp trừu tƣợng và cung cấp khả năng truyền mức bit (bit-level) giữa các máy trong mạng. Do điều này nên SMI và SNMP dùng ASN.1 (ISO 8824-1) và BER (ISO 8825-1) để định nghĩa hàng loạt các vấn đề cơ sở quản trị mạng Internet.
Các phiên bản của SMI
Hiện tại SMI có hai phiên bản:
- SMIv1 (SMI version 1, RFC 1155): định nghĩa chính xác cách thức các đối tƣợng quản trị đƣợc đặt tên và đặc tả các dữ liệu kết nối với chúng.
- SMIv2 (SMI version 2, RFC 2578): hỗ trợ nâng cấp cho SNMPv2c. SMIv1 định nghĩa một vài loại dữ liệu quan trọng để quản trị các đối tƣợng mạng. Các loại dữ liệu đó đƣợc mô tả nhƣ trong bảng 4.
Kiểu dữ liệu Mô tả
INTEGER Là một kiểu nguyên 32 bit đƣợc dùng để đặc tả các kiểu đếm, nhƣ 1 là trạng thái up (của giao tiếp mạng trên bộ định tuyến), 2 là trạng thái down, 3 là trạng thái kiểm tra. Giá trị 0 không đƣợc dùng cho kiểu đếm.
OCTET STRING
Là một xâu có độ dài 0 hoặc nhiều bộ tám (là các byte) các ký tự.
Counter Một kiểu số 32-bit có giá trị nhỏ nhất là 0 và lớn nhất là 232-1
OBJECT IDENTIFIER
Thể hiện đối tƣợng quản lý trong cây thƣ bậc các đối tƣợng
NULL Hiện tại không dùng trong SNMP
SEQUENCE Định nghĩa danh sách chứa không hoặc nhiều hơn các loại dữ liệu ASN.1
SEQUENCE OF
Định nghĩa một đối tƣợng quản lý đƣợc tạo từ một SEQUENCE
IpAddress Mô tả địa chỉ IPv4 32-bit Network
Address
Tƣơng tự kiểu IpAddress, nhƣng có thể mô tả các loại địa chỉ mạng khác nhau
Gauge Một kiểu số 32-bit với giá trị nhỏ nhất là 0 và lớn nhất là 232-1. Không giống Counter, Gauge có thể tăng và giảm. Thƣờng dùng để thể hiện tốc độ của giao tiếp mạng.
TimeTicks Một kiểu số 32-bit với giá trị nhỏ nhất là 0 và lớn nhất là 232-1. Dùng để đo thời gian.
Opaque Cho phép bất kỳ việc mã hoá ASN.1 nào đều tạo thành một OCTET STRING
Mục đích của tất cả các loại dữ liệu trên là dùng để định nghĩa các đối tƣợng quản trị. Việc định nghĩa các đối tƣợng quản trị này sẽ nằm trong cơ sở thông tin quản trị MIB.
Trong phiên bản SMIv2, cây thứ bậc các đối tƣợng đƣợc mở rộng bởi việc thêm nhánh SNMPv2c. Định danh OID cho đối tƣợng nhánh đó là:
1.3.6.1.6.3.1.1 hay
iso.org.dod.internet.snmpV2.snmpModules.snmpMIB.snmpMIBObjects
Hình 2.13 thể hiện nhánh cây mà SMIv2 cung cấp cho SNMPv2.
Hình 2.13: Nhánh SNMPv2Bảng 4: Kiểu dữ liệu Bảng 4: Kiểu dữ liệu
Ngoài ra một vài loại dữ liệu mới đƣợc thêm vào SMIv2 nhƣ Interger32, Counter32, Gauge32, Unsigned32, Counter64, BITS. Việc định nghĩa một đối tƣợng trong SMIv2 cũng có thay đổi nhỏ so với SMIv1. Đó là một vài trƣờng lựa chọn đƣợc thêm vào cho việc điều khiển truy nhập trên các đối tƣợng, cho phép đặt các tham số vào bảng và mô tả dễ dàng hơn.
Định nghĩa dữ liệu trong SMI
Dữ liệu trong SMI đƣợc định nghĩa bằng ASN.1. Cú pháp mô tả SMI là cú pháp ASN1. ASN1 đƣợc sử dụng không chỉ cho mô tả SMI mà còn cho nhiều tài liệu RFC khác.
Mỗi đối tƣợng cần phải có tên đủ phân biệt nó với các đối tƣợng khác. Tên của đối tƣợng đƣợc biểu diễn dƣới dạng một chuỗi số nguyên (interger) hay một xâu (string).
Trong mô hình ISO/OSI, cú pháp ASN.1 là một chức năng của tầng trình diễn (Presentation Layer). Bởi tầng trình diễn là tầng định nghĩa định dạng của dữ liệu lƣu trữ. Nhƣ vậy cả Manager và Agent đều phải hiểu cú pháp ASN.1 này để có thể trao đổi dữ liệu. ASN.1 đƣợc thiết kế để định nghĩa các dữ liệu dạng cấu trúc, nó thể hiện độc lập với biểu diễn vật lý của dữ liệu. Do đó, nó phải tự định nghĩa các loại dữ liệu cơ bản nhƣ các kiểu xâu, kiểu nguyên, và các loại dữ liệu mới dựa trên việc kết nối các loại dữ liệu cơ bản. Vì ASN.1 thể hiện cú pháp trừu tƣợng nên nó đƣợc coi là một ngôn ngữ khá phức tạp.
ASN.1 định nghĩa dữ liệu nhƣ một mẫu các bit trong bộ nhớ máy tính, các ngôn ngữ lập trình bậc cao sử dụng nhƣ các biến, còn BER sẽ chuyển các mẫu bit đó thành các bit thực sự cho quá trình truyền giữa các máy tính. ASN.1 sử dụng một số thuật ngữ đặc thù để định nghĩa các thủ tục, bao gồm các kiểu, giá trị, macro và module.
Kiểu (Type): là một lớp dữ liệu dùng để định nghĩa cấu trúc dữ liệu, đó là INTEGER, OCTET STRING, OBJECT IDENTIFIER và NULL. SMI cũng sử dụng các kiểu này của ASN.1. Định nghĩa kiểu có các dạng sau:
- Kiểu đơn giản:
<tên kiểu mới> ::= <kiểu đã biết> Ví dụ: RequestID ::= INTEGER
- Kiểu có cấu trúc:
<tên kiểu mới> ::= SEQUENCE { <field 1> <kiểu dữ liệu> <field 2> <kiểu dữ liệu> ……
} Ví dụ:
Message ::= SEQUENCE {
version INTEGER version-1(0) community OCTETSTRING
pdu PDUs
}
Trong ví dụ này, Message là một cấu trúc có ba trƣờng Version, Community và PDU cùng với các kiểu của nó. Phía sau INTEGER có dấu () đại diện cho tập các giá trị hợp lệ, ở đây chỉ có một giá trị 0 đƣợc dùng để chỉ định Version 1.
Giá trị (value): xác định số lƣợng các kiểu, ví dụ một ứng dụng dùng kiểu INTEGER và chỉ cho phép giá trị là các trƣờng 8 bit với khoảng giá trị phải là [0÷255], khi đó ta có thể mô tả là: INTEGER (0..255).
Macro: đƣợc dùng để định nghĩa một đối tƣợng, theo quy định (ISO 8824-1) thì tên macro là các ký tự hoa. Định dạng một macro nhƣ sau:
<name> OBJECT-TYPE SYNTAX <datatype>
ACCESS <either read-only, read-write, write-only, or not-accessible> STATUS <either mandatory, optional, or obsolete>
DESCRIPTION
"Textual description describing this particular managed object." ::= { <Unique OID that defines this object> }
Ví dụ, MIB-II định nghĩa đối tƣợng ifTable nhƣ sau: ifTable OBJECT-TYPE
SYNTAX SEQUENCE OF IfEntry ACCESS not-accessible
STATUS mandatory DESCRIPTION
"A list of interface entries. The number of entries is given by the value of ifNumber."
::= { interfaces 2 }
Đối tƣợng ifTable thể hiện một bảng các giao tiếp mạng trên đối tƣợng đƣợc quản trị. Trong đó:
1) Tên đối tƣợng là ifTable đƣợc định nghĩa bởi macro OBJECT- TYPE
2) SYNTAX là SEQUEN OF IfENTRY: có nghĩa rằng ifTable là một bảng gồm các cột đƣợc định nghĩa trong đối tƣợng IfEntry.
3) ACCESS là not-accessible: nghĩa là không có cách nào truy vấn một Agent để lấy thông tin của đối tƣợng này.
4) STATUS là mondatory: nghĩa là một Agent phải thực thi đối tƣợng này tuân theo các đặc tả của MIB-II.
5) DESCRIPTION là phần mô tả thông tin về đối tƣợng
6) Cuối cùng là toán tử ::= và số OID của đối tƣợng, ở đây sẽ là 1.3.6.1.2.1.2.2, hay iso.org.dod.internet.mgmt.interfaces.2.
Module: là tập hợp các mô tả thành các nhóm thích hợp. Module bắt đầu bằng tên, sau đó là phần thân nằm trong khối từ khoá BEGIN và END. Nội dung phần thân module chứa từ khoá IMPORTS, các kiểu, giá trị và macro. Ví dụ phần đầu module RMON (RFC 1757) thể hiện nhƣ sau:
RMON-MIB DEFINITIONS ::= BEGIN IMPORTS
Counter FROM RFC1155-SMI DisplayString FROM RFC1158-MIB mib-2 FROM RFC1213-MIB OBJECT-TYPE FROM RFC-1212 TRAP-TYPE FROM RFC-1215; -- Remote Network Monitoring MIB
rmon OBJECT IDENTIFIER ::= { mib-2 16 } -- textual conventions
. . . END
Trong đó:
- Từ khoá IMPORTS đƣợc hiểu nhƣ việc mô tả các đƣờng liên kết đến các module mà module này cần.
- Các ký hiệu -- thể hiện các chú thích.
- OBJECT IDENTIFIER thể hiện nhánh RMON đƣợc định nghĩa tại nhánh thứ 16 của cây đối tƣợng MIB-2.
Nhƣ vậy, ASN.1 cho cách định nghĩa các đối tƣợng. Trong vấn đề quản trị mạng sử dụng SNMP thì ASN.1 tỏ ra hết sức thuận tiện vì nó có thể cung cấp cú pháp trừu tƣợng để thể hiện thông tin quản trị ở mức chi tiết và hết sức mạch lạc.
Mã hoá thông điệp bằng BER
BER đƣợc đặc tả trong tài liệu ISO 8825-1, là quy tắc mã hoá cơ bản cho phép mã hoá thông tin để có thể truyền đƣợc trên mạng. Tức là ứng dụng quản lý kết sinh một yêu cầu SNMP, BER sẽ mã hoá yêu cầu để có thể truyền nó trên môi trƣờng mạng, tại máy đích việc giải mã cũng dùng các quy tắc của BER.
Để định nghĩa dữ liệu trình diễn, đầu tiên BER đặc tả các bit đầu và cuối cho mỗi octet đƣợc truyền. Đó là bit ở vị trí đầu octet: LSB, và vị trí cuối octet: MSB. Tiếp đó là cấu trúc dữ liệu mã hoá gồm ba trƣờng: Type, Length và Value. Cấu trúc mã hoá này đƣợc gọi là mã hoá Kiểu (Type), Độ dài (Length),Giá trị (Value).
Trƣờng Type: chứa một định danh cho cấu trúc mã hoá, nó mã hoá các thẻ ASN.1 (cả các lớp và số) sẽ đƣợc chứa trong trƣờng Value. Một trƣờng con trong Type đƣợc gọi là bit P/C thể hiện kiểu dữ liệu là nguyên thuỷ (P/C=0, Primitive ) hay là đƣợc khởi dựng (P/C=1, Contructed). Trên hình 2.14 thể hiện mã hoá trƣờng Type.
Có hai loại trƣờng Type, việc sử dụng loại nào tuỳ thuộc vào số lƣợng các thẻ (tag). Nếu số lƣợng tag nằm trong khoảng [0,30] thì trƣờng Type chỉ chứa một octet, còn nếu số lƣợng tag ≥ 31 thì trƣờng Type sẽ chứa nhiều octet. Octet đầu tiên sẽ chứa ba trƣờng con là Class, bit P/C và số lƣợng thẻ. Trƣờng con Class (gồm hai bit ở vị trí 8 và 7) chứa mã hoá của bốn lớp kiểu dữ liệu và đƣợc mã hoá ở bit 8 và 7 của các octet nhƣ sau:
- Universal (00): dùng để mã hoá các kiểu dữ liệu phổ biến nhƣ INTEGER, OCTET STRING,….
- Application (01): mã hoá các kiểu định nghĩa nhƣ IpAddresss, Counter,….
- Context-specific (10): dùng để mã hoá các lệnh của SNMP nhƣ: GetRequest, GetResponse,….
- Private (11) : mã hoá một kiểu định nghĩa riêng nào đó. Ví dụ, các dữ liệu sẽ đƣợc mã hoá nhƣ trong bảng 5.
Lớp Kiểu Giá trị trường Type
Universal Integer 00000010 = 02H
Universal SEQUENCE 00110000 = 30H
Application IpAddress 01000000 = 40H
Application TimeTicks 01000011 = 43H
Context-Specific GetRequest 10100000 = A0H
Context-Specific GetResponse 10100010 = A2H
Context-Specific Trap 10100100 = A4H
Ở đây, các ứng dụng SNMP chỉ sử dụng ba lớp dữ liệu đầu, và chỉ dùng số các thẻ trong khoảng [0,30]. Còn số lƣợng thẻ sẽ nằm trong trƣờng con thứ ba của octet đầu tiên. Và bit 5 sẽ là MSB của thẻ và bit 1 là LSB.
Trƣờng Length: là trƣờng tiếp theo trƣờng Type, nó chỉ ra số lƣợng octet mà trƣờng Value sẽ chứa. SNMP sử dụng hai kiểu trƣờng Length: kiểu ngắn chỉ ra độ dài trong khoảng [0,127] octet; kiểu dài chứa nhiều hơn 127 octet. Hình 2.15 thể hiện mã hoá trƣờng Length.
Kiểu trƣờng Length dài dùng nhiều octet để thể hiện độ dài tổng. Trong kiểu này, octet đầu tiên sẽ có bit 8 = 1, các bit tiếp theo thể hiện số lƣợng các octet tiếp theo. Số lƣợng này nằm trong khoảng [1,126], còn 127 chƣa đƣợc sử dụng (dùng cho tƣơng lai). Bit 8 của octet thứ hai chứa giá trị MSB của trƣờng Length, và tiếp theo là tất cả các octet nhƣ độ dài đã chỉ ra.
Trƣờng Value chứa không hoặc nhiều octet chứa nội dung dữ liệu. Nội dung dữ liệu ở đây chính là nội dung thông tin đã mã hoá nhƣ các số nguyên, ký tự ASCII, hay OID của đối tƣợng.
Để hình dung rõ hơn, ta sẽ xem xét ví dụ về cách mã hoá của BER. Số nguyên là một kiểu cơ sở sẽ đƣợc mã hoá với trƣờng Value chứa các octet nội dung. Ví dụ với số nguyên 75 (tức Value = “75”) thì các trƣờng: Type = 02H, Length = 01H, Value = 4BH. Thể hiện dạng bit nhƣ hình 2.16.
Sau đây xem xét cách mã hoá thông điệp SNMP của BER. Ví dụ một thông điệp SNMP chƣa mã hóa có các thông tin nhƣ sau:
version = 0 community = public command = get-request requestID = 0 error status = 0 error index = 0 object = (1.3.6.1.2.1.1.3.0) (sysUpTime.0) value = NULL object = (1.3.6.1.2.1.2.1.0) (ifNumber.0) value = NULL
Cách mã hoá thông điệp đƣợc thể hiện nhƣ trong bảng 6.
Nội dung Chuỗi mã hoá
SNMP MESSAGE
SEQUENCE Length = 52 30 34
VERSION (0)
INTEGER Length = 1 Value = 0 02 01 00
COMMUNITY
OCTETSTRING Length = 6 Value = public 04 06 70 75 62 6C 69 63 GET-REQUEST
get-request Length = 39 A0 27
REQUESTID
INTEGER Length = 1 Value = 0 02 01 00
ERROR STATUS
INTEGER Length = 1 Value = 0 02 01 00
ERROR INDEX
INTEGER Length = 1 Value = 0 02 01 00
SEQUENCE (object identifier,value)
SEQUENCE Length = 28 30 1C
SEQUENCE (object identifier, value )
SEQUENCE Length=12 30 0C
OBJECT IDENTIFIER Length = 8 .1.3.6.1.2.1.1.3.0
06 08
2B 06 01 02 01 01 03 00 VALUE
NULL Length = 0 05 00
SEQUENCE (object identifier,value )
SEQUENCE Length=12 30 0C
OBJECT IDENTIFIER Length = 8 .1.3.6.1.2.1.2.1.0
06 08
2B 06 01 02 01 02 01 00 VALUE
NULL Length = 0 05 00
Kết quả chuỗi octet đƣợc tạo ra sau khi mã hóa thông điệp là:
30 34 02 01 00 04 06 70 - 75 62 6C 69 63 A0 27 02 - 01 00 02 01 00 02 01 00 - 30 1C 30 0C 06 08 2B 06 - 01 02 01 01 03 00 05 00 - 30 0C 06 08 2B 06 02 01 - 01 02 01 00 05 00
Sau khi tạo ra dòng bit này, các thông điệp có thể đƣợc truyền trên bất cứ môi trƣờng truyền nào. Khi thông điệp tới máy đích, quá trình biên dịch ngƣợc sẽ cho lại nguyên bản thông điệp ban đầu.