Mã hoá thông điệp bằng BER

Một phần của tài liệu Nghiên cứu phương pháp xây dựng hệ quản lý thông tin trên mạng máy tính Internet Intranet (Trang 55)

BER (Base Encoding Rules) đượ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 (bộ tám các bit) được truyền. Đó là bit ở vị trí đầu octet: LSB (Least Significant Bit), và vị trí cuối octet: MSB (Most Significant Bit). 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 - Độ dài - Giá trị (TLV: Type - Length - 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.12 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ư bảng sau:

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.

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.14.

Sau đây ta 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 trong bảng sau:

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 2B 06 01 02 01 01 03 00 08 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 062B 06 01 02 01 02 01 00 08 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.

Như vậy, trên đây ta đã nghiên cứu kiến trúc, cơ sở, cách thức biểu diễn thông tin thông tin quản lý, cũng như nguyên lý hoạt động của một hệ quản lý mạng dựa trên giao thức SNMP. Đó là các kiến thức cơ sở hết sức quan trọng, yêu cầu ta phải nắm được trước khi bắt ta thiết kế bất kỳ một hệ thống quản lý mạng nào. Chương tiếp theo ta sẽ ứng dụng các kiến thức này để nghiên cứu và thực hiện một tác tử quản lý mạng cụ thể.

CHƯƠNG 3 – XÂY DỰNG HỆ TÁC TỬ QUẢN TRỊ TÍCH HỢP

Một phần của tài liệu Nghiên cứu phương pháp xây dựng hệ quản lý thông tin trên mạng máy tính Internet Intranet (Trang 55)