2.1. Tổng quan về SNMP:
2.1.1.Lịch sử phát triển của SNMP:
Quá trình phát triển của SNMP gắn liền với việc phát triển của bộ giao thức TCP/IP và mạng Internet. Năm 1969, bộ quốc phòng Mỹ phát triển một mạng chuyển mạch gói ARPANET dựa trên bộ giao thức được đưa ra là TCP/IP đánh dấu bước phát triển đầu tiên của mạng Internet. Thời điểm ban đầu, mạng ARPANET được xây dựng với mục đích là nghiên cứu các kỹ thuật liên quan đến việc chia sẻ tài nguyên mạng để ứng dụng vào mạng dữ liệu giúp ích cho các yêu cầu hàng ngày của họ. Nhưng sau đó, với những thành tựu đạt được trong khoa học công nghệ và tính ưu việt của bộ giao thức TCP/IP
thì mạng ARPANET đã nhanh chóng phát triển thành một tập hợp của các mạng cục bộ và mạng diện rộng-mạng Internet. Giữa những năm 1980, TCP/IP đã được công nhận là một tiêu chuẩn cho kiến trúc truyền thông. Đặc điểm của mạng Internet là một môi trường mạng khổng lồ, phân tán và đa nhà cung cấp. Do đó, quản trị mạng trở thành một công việc hết sức khó khăn và phức tạp. Giải pháp được đưa ra là cần phải có một bộ giao thức tiêu chuẩn đáp ứng cho công việc quản trị. Đầu năm 1988, ban quản lí kiến trúc Internet đã thông qua việc phát triển SNMP và một phiên bản đầu tiên đã ra đời vào cùng năm đó. Với đặc điểm đơn giản và hiệu quả trong hoạt động, SNMP nhanh chóng được ứng dụng rộng rãi và đạt được thành công trong mạng Internet. Đến năm 1993, SNMP trở thành chuẩn cho quản trị liên mạng.
2.1.2.Các khái niệm và kiến trúc của SNMP:
Mô hình kiến trúc của SNMP là một tập hợp của các trạm quản trị mạng và các agent được cài đặt trên từng node mạng được quản trị. Giao thức SNMP được sử dụng để trao đổi thông tin giữa các thành phần trên nhằm cung cấp một cơ chế quản trị mạng đơn giản và hiệu quả. Mô hình được sử dụng để quản trị mạng TCP/IP bao gồm các thành phần chính như sau:
Hình 27-Mô hình quản trị mạng SNMP
NMS – Network Management System(Trạm quản trị): trên đó có chạy ứng dụng quản trị, cung cấp cơ chế cho phép giám sát, quản lí và điều khiển một mạng từ một hay một vài máy trạm. NMS cũng phải có một giao diện để người quản trị trực tiếp phân tích dữ liệu, sửa chữa các sự cố…Cơ sở dữ liệu thông tin được NMS thu thập từ các MIB của tất cả các thành phần được quản trị trong mạng.
Management Agent(Agent quản trị): hay còn được gọi là tác tử quản trị, đó là một thành phần được cài đặt trên mỗi node mạng được quản trị đảm trách công việc đáp ứng các yêu cầu thông tin và thực hiện các lệnh đến từ NMS.
MIB-Management Information Base(Cơ sở thông tin quản trị): là một tập hợp các đối tượng biểu diễn các loại thông tin khác nhau về một thiết bị được quản trị. NMS thu thập thông tin về kết nối mạng, các sự kiện và hoạt động bằng cách lấy thông tin từ các MIB thông qua Agent. Các đối tượng MIB cũng có thể bị sửa đổi giá trị một vài biến của nó bởi NMS.
Network Management Protocol(Giao thức quản trị mạng): dùng để liên kết các NMS với các Agent với ba kiểu chức năng chính sau:
Get: cho phép NMS thu thập thông tin MIB tại các Agent
Set: cho phép NMS thiết lập giá trị của các đối tượng MIB tại các Agent
Trap: được dùng riêng bởi Agent nhằm thông báo các sự kiện quan trọng tới NMS
Hình 28-Kiến trúc của SNMPv1
Ngay từ ban đầu,việc thiết kế SNMP nhằm xây dựng một giao thức quản trị mạng đơn giản. Do đó, SNMP đã được thiết kế như một giao thức của lớp ứng dụng và được cài đặt trên một giao thức giao vận đơn giản UDP-User Datagram Protocol. UDP là một dịch vụ thuộc dạng không hướng nối kết(connectionless) nên rất dễ dàng cho việc xây dựng và cài đặt, thích hợp với các dạng trao đổi thông điệp quản trị mạng “request/response”. Cơ chế hoạt động của SNMP cũng rất đơn giản, giao thức này chỉ có năm dạng thông điệp cơ bản. Từ một NMS, ba dạng thông điệp được đưa ra thay mặt cho một ứng dụng quản trị: GetRequest, GetNextRequest, SetRequest. Agent nhận các thông báo này và đáp trả NMS thông qua thông điệp GetResponse. Khi có một sự kiện tác động đến MIB thuộc nguồn tài nguyên được quản trị bởi một Agent thì Agent đó sẽ gửi một thông báo Trap tương ứng với sự kiện đó tới NMS.
2.1.3.1.Ký hiệu cú pháp trừu tượng-ASN.1:
Abstract Syntax Notation One-ASN.1 là một ngôn ngữ hình thức rất quan trọng được sử dụng cho nhiều mục đích khác nhau trong đó có cả chức năng định nghĩa cơ sở thông tin quản trị MIB. Bản chất của ASN.1 là ngôn ngữ cho phép khai báo dữ liệu nguyên thủy, định nghĩa các đối tượng nguyên thuỷ sau đó cho phép chúng kết hợp lại với nhau để tạo thành đối tượng phức tạp hơn. MIB là tập hợp của các đối tượng được tổ chức theo cấu trúc cây, mỗi một node mạng đều duy trì một MIB phản ánh trạng thái của các tài nguyên được quản trị tại node đó. Các ứng dụng quản trị mạng có thể giám sát, điều khiển các node đó bằng cách đọc các giá trị, thay đổi giá trị của các đối tượng trong MIB tương ứng. Tuy nhiên, mỗi hệ thống đều có các thành phần do các nhà cung cấp khác nhau nên cần phải có một tiêu chuẩn để chuyển đổi, mã hóa thông tin cho việc truyền tải trên mạng. ASN.1 cung cấp cơ chế để định nghĩa các đối tượng chuẩn và quy tắc mã hóa. Các luật mã hóa cơ bản BER(Basic Encoding Rule) định nghĩa cách để mã hóa các đối tượng trong MIB như là một chuỗi octet dựa trên cơ sở sử dụng cấu trúc TLV(Type-Length-Value).
2.1.3.2.Cấu trúc thông tin quản trị-SMI:
SMI (Structure of Management Information ) định nghĩa một cơ cấu tổ chức chung cho các MIB. SMI nhận dạng các kiểu dữ liệu trong MIB, trình bày cách miêu tả và đặt tên cho các tài nguyên trong MIB nhằm duy trì tính đơn giản và khả năng mở rộng của nó. Do đó, dữ liệu của MIB rất đơn giản: vô hướng và mảng hai chiều của các vô hướng. SMI không cung cấp cách tạo hoặc truy xuất các cấu trúc dữ liệu phức tạp. Nhà cung cấp sẽ tạo ra các loại dữ liệu được chứa trong MIB của họ. SMI là một phương pháp tiêu chuẩn để biểu diễn thông tin quản trị, các công việc của nó bao gồm:
Cung cấp các kỹ thuật tiêu chuẩn để định nghĩa các cấu trúc MIB đặc biệt
Cung cấp các kỹ thuật tiêu chuẩn để định nghĩa các đối tượng đơn lẻ, bao gồm giá trị và cú pháp của mỗi đối tượng
Cung cấp kỹ thuật tiêu chuẩn để mã hóa các giá trị đối tượng
Cấu trúc của MIB được tổ chức và sắp xếp theo cấu trúc cây, gốc của cây là đối tượng chuẩn dựa vào ASN.1, các đối tượng quản trị thực nằm ở lá của cây biểu thị cho tài nguyên, sự hoạt động hoặc các thông tin liên quan được quản lý. Mỗi đối tượng đó được biểu diễn bằng ngôn ngữ ASN.1 bao gồm tên, cú pháp và mã hóa. Tên phục vụ cho việc nhận dạng duy nhất đối tượng, có kiểu ASN.1 là OBJECT IDENTIFYER- OID, giá trị của nó bao gồm một dãy các số nguyên được đọc từ trái sang phải nhằm chỉ ra vị trí của đối tượng trong cấu trúc MIB. Cú pháp định nghĩa kiểu dữ liệu là một số nguyên hay là một chuỗi các byte. Mã hóa mô tả bằng cách nào thông tin liên quan tới các đối tượng MIB được chuyển hóa trong quá trình truyền trông trên mạng.
SMI chỉ ra 4 kiểu dữ liệu cơ sở được sử dụng để định nghĩa các đối tượng MIB nằm trong lớp UNIVERSAL của ASN.1:
Interger: số nguyên 4 byte có dấu, có thể tự chọn khoảng giới hạn Octetstring: một chuỗi các byte
Object Identifyer: chuỗi các số nguyên đặt tên cho đối tượng Null: được sử dụng trong các trường hợp sau:
Giữ chỗ cho các trường giá trị trong các thông điệp GetRequest, GetNextRequest
Trong lớp APPLICATION của ASN.1 chỉ ra các kiểu dữ liệu liên quan đến một ứng dụng cụ thể, đó là các kiểu dữ liệu mở rộng của các kiểu dữ liệu cơ sở. Mỗi ứng dụng, bao gồm cả SNMP, phải định nghĩa các kiểu dữ liệu APPLICATION của riêng mình. Các kiểu dữ liệu sau phải được định nghĩa:
Ipaddress: là địa chỉ 4byte octetstring(32bit), lưu địa chỉ mạng theo giao thức Ipv4
Counter: là số nguyên không âm và chỉ được tăng chứ không giảm, giá trị lớn nhất là 232-1. Khi counter đạt giá trị lớn nhất nó quay vòng trở về 0. Counter có thể được dùng để đếm số byte nhận được trên một giao diện…
Gauge: là một số nguyên không âm có thể tăng hoặc giảm nhưng không vượt quá giá trị 232 -1, khi đạt giá trị lớn nhất nó sẽ dừng lại và đợi khởi tạo lại. Gauge có thể được dùng để đo các số lượng kết nối TCP hiện thời…
Timesticks: là số nguyên không âm đếm số phần trăm của giây từ một thời điểm cụ thể nào đó. Khi mà một đối tượng được định nghĩa trong MIB sử dụng dạng này, định nghĩa của dạng đối tượng nhận dạng thời điểm mà nó tham chiếu
Opaque: kiểu này hỗ trợ khả năng chuyển dữ liệu tùy ý, không xác định. Dữ liệu được mã hóa thành octetstring để chuyển.
2.1.3.3.Cơ sở thông tin quản trị-MIB:
MIB là một cơ sở dữ liệu gồm một tập hợp các đối tượng MIB lưu các thông tin về thuộc tính cấu hình, trạng thái, các thống kê… của các thiết bị được quản trị. Chúng là một tập hợp các thông tin có thứ bậc, được xây dựng theo cấu trúc cây. Phiên bản MIB chính thức được đưa ra vào năm 1988 trong mô tả RFC 1066 được gọi là MIB-I. Phiên bản cập nhật MIB-II được đưa ra năm 1991 trong RFC 1213 có thêm nhiều cải tiến, đặc biệt là có nhiều biến hữu ích không có trong MIB-I nhằm đáp ứng cho những yêu cầu quản trị mạng mới. Các đối tượng trong MIB được xây dựng theo cấu trúc cây hay còn gọi là cây tên, mỗi node trên cây có một dãy số định danh gọi là OBJECT IDENTIFIER-OID nhằm xác định duy nhất một đối tượng. Có hai nhánh MIB chính cần phải quan tâm đến là:
MIB tiêu chuẩn: có 11 nhóm thuộc tính, lưu giữ các thông tin về hệ thống, các giao diện mạng, cấu hình và quản trị cho các thiết bị được quản trị…
MIB mở rộng: mỗi nhà sản xuất được đăng ký riêng cho mình một nhánh con thuộc nhánh private/enterprise lưu giữ các định danh của sản phẩm, các định nghĩa MIB cho các sản phẩm đó. Việc đăng kí này được quản lí bởi ban kiến trúc Internet IAB.
Hình 29-Cấu trúc cây thông tin quản lí
2.2. SNMPv1:
2.2.1.Định dạng thông điệp SNMPv1:
Trong SNMP, thông tin trao đổi giữa NMS và Agent theo dạng các thông báo SNMP, mỗi thông báo gồm có hai phần là hearder và PDU. Phần header có chứa các trường sau:
Version: số hiệu phiên bản của SNMP(có giá trị 0 với SNMPv1)
Community name: tên truyền thông được dùng để điều khiển quyền truy nhập tới mỗi Agent, tên này được khóa mã và thông báo được coi là được xác nhận khi người gửi biết khóa mã.
Phần PDU sẽ có cấu trúc tùy thuộc vào một trong 5 kiểu PDU của SNMP.Các kiểu PDU đó là:
Hình 30-Cấu trúc của get và set PDU
GetRequest PDU: được sử dụng bởi ứng dụng quản trị chạy trên NMS. Cấu trúc bao gồm các trường sau:
PDU type: thể hiện là một GetRequest PDU
Request ID: sử dụng để xác định duy nhất một cặp request/response, cho phép SNMP loại bỏ các PDU kép được sinh ra do dịch vụ giao vận không tin cậy UDP
Error status: thiết lập là 0, khi request không được đáp ứng thì trường này sẽ được sử dụng trong câu trả lời để báo mã lỗi
Error index: thiết lập là 0, cũng được sử dụng trong câu trả lời để chỉ ra thứ tự của biến gây lỗi
Variable-bindings(Các liên kết biến): là trường dữ liệu của SNMP, bao gồm một danh sách gồm các đối tượng có giá trị được yêu cầu Agent nhận được một GetRequest PDU sẽ đáp ứng bằng một GetResponse PDU chứa cùng một giá trị trong trường request ID. Toán tử GetRequest có một đặc tính là hoặc lấy được tất cả các giá trị mà nó yêu cầu hoặc sẽ không lấy giá trị nào cả nếu có bất kì một biến nào không được đáp ứng giá trị. Một số trường hợp sau có thể xảy ra:
Không có lỗi gì xảy ra, khi đó trong GetResponse PDU trả về sẽ có trường error-status có giá trị là noError(giá trị là 0)
Agent có thể đáp ứng tất cả giá trị các biến trong danh sách nhưng kích thước của GetResponse PDU trả lại có thể vượt quá giới hạn cục bộ. Khi đó, trường error-status là tooBig(giá trị là 1) và trường error- index chỉ ra thứ tự của biến gây lỗi
Một đối tượng được đặt tên trong danh sách biến có thể không phù hợp với bất kì nhận dạng đối tượng trong MIB tương ứng. Khi đó trường error-status có giá trị là noSuchName(giá trị là 2) và trường error-index chỉ ra thứ tự của biến gây lỗi
Agent có thể không có khả năng đáp ứng giá trị cho ít nhất một trong các biến vì một lí do nào đó. Trong trường hợp này, trường error- status là genErr(giá trị là 5) và trường error-index chỉ ra thứ tự của biến gây lỗi
GetNextRequest PDU: có cấu trúc gần giống hoàn toàn với GetRequest PDU. Có một số điểm khác nhau như sau:
PDU type: thể hiện là một GetNextRequest PDU
Toán tử GetNextRequest cho phép một NMS có thể khảo sát cấu trúc của một MIB theo cách tự động bằng cách gọi các đối tượng không biết, nó yêu cầu Agent gọi phiên bản đối tượng tiếp theo xuất hiện theo thứ tự .
Nó cũng cho phép truy cập vào các giá trị trong bảng bằng cách gửi đi các GetNextRequest PDU cho đến khi Agent trả về GetResponse PDU chứa các tên đối tượng không phù hợp với yêu cầu.
nhưng với mục đích là để ghi giá trị đối tượng chứ không phải là đọc, do đó tại danh sách các biến liên kết sẽ có giá trị tương ứng cần ghi cho mỗi biến. Toán tử SetRequest cũng có đặc tính là hoặc tất cả giá trị các biến được cập nhật hoặc không một giá trị nào được cập nhật. Ví dụ như trường hợp có ít nhất một cặp tên biến và giá trị không tương thích về dạng hoặc độ dài thì sẽ không có một cập nhật nào được thực hiện và trong GetResponse PDU trả về sẽ có trường error-status là badValue(giá trị là 3). Trường hợp lỗi khác là toán tử SetRequest đang cố gắng ghi vào một biến mà không cho thao tác ghi, trường error-status trả về là readOnly(giá trị 4).
GetResponse PDU: là thông báo được sử dụng bởi Agent để đáp ứng các request đến từ NMS. Cấu trúc gần giống hoàn toàn với GetRequest PDU, PDU type chỉ là GetResponse, phần danh sách các cặp biến và giá trị sẽ được đáp ứng lại tùy theo các request. GetResponse sử dụng các trường error-status và error-index để thông báo mã lỗi và chỉ ra thứ tự của biến gây lỗi.
Trap PDU: được Agent sử dụng để thông báo tới NMS các sự kiện quan trọng. Cấu trúc của Trap PDU hoàn toàn khác với các PDU kể trên, bao gồm các trường sau:
PDU type: thể hiện đây là một Trap PDU
Enterprise: nhận dạng kiểu đối tượng được quản trị đã gửi lệnh Trap đi(giá trị của nó được lấy từ sysObjectID trong nhóm System)
Agent address: địa chỉ IP của đối tượng sinh ra Trap
Generic-Trap: một trong các định nghĩa các dạng Trap, có 7 giá