เนื้อหาวันที่ : 2011-07-21 14:54:43 จำนวนผู้เข้าชมแล้ว : 7737 views

มารู้จักโปรโตคอล SNMP (ตอนที่ 2)

ถ้าจะพูดถึงเวอร์ชันของ SNMP ที่มีอยู่ 3 เวอร์ชัน นักพัฒนาระบบทั่วไปส่วนใหญ่ชื่นชอบมากที่สุดก็ต้องบอกว่าเป็นเวอร์ชันที่ 1 หรืออาจเรียกอีกชื่อว่า SNMPv1

การสื่อสารข้อมูลในงานอุตสาหกรรม
ตอนที่ 12 มารู้จักโปรโตคอล SNMP (ตอนที่ 2)

พิชิต จินตโกศลวิทย์ 
pichitor@yahoo.com

SNMPv1
          ถ้าจะพูดถึงเวอร์ชันของ SNMP ที่มีอยู่ 3 เวอร์ชัน นักพัฒนาระบบทั่วไปส่วนใหญ่ชื่นชอบมากที่สุดก็ต้องบอกว่าเป็นเวอร์ชันที่ 1 หรืออาจเรียกอีกชื่อว่า SNMPv1 ทำไมเวอร์ชันที่ 1 ถึงเป็นที่ชื่นชอบก็เพราะว่าสามารถทำการศึกษา และพัฒนาระบบงานให้สนับสนุน SNMPv1 ได้ไม่ยาก เหมาะสมกับคำว่า Simple หรือง่าย ๆ โดยเวอร์ชันที่ 1 มีฟังก์ชันในการทำงานจำนวนไม่กี่ฟังก์ชัน และลักษณะการทำงานไม่ซับซ้อน ดังต่อไปนี้
          • Get-Request เป็นคำสั่งร้องขอข้อมูลที่ตำแหน่งแรกของโครงสร้างข้อมูล
          • Get-Next-Request เป็นคำสั่งร้องขอข้อมูลตำแหน่งถัดไปตามโครงสร้างข้อมูล
          • Set-Request เป็นคำสั่งขอเขียนข้อมูลลงไปในตัวอุปกรณ์
          • Get-Response เป็นการตอบสนองการร้องขอข้อมูล
          • Trap เป็นการตั้งเงื่อนไขการส่งข้อมูลจากอุปกรณ์หรือเอเยนต์โดยไม่ต้องมีการร้องขอซึ่งโดยทั่วไปมี 2 วิธี นั้นคือ
                    1. Generic Trap
                    2. Specific Trap

          โดยฟังก์ชันดังที่ได้กล่าวข้างต้นจะทำงานบนโครงสร้างข้อมูลแบบรูปร่างต้นไม้ (Tree-like Data Structure) ที่ประกอบด้วยออปเจ็กต์ที่บรรจุด้วยข้อมูลของอุปกรณ์อยู่ตามกิ่งก้านสาขา (Branch) ของต้นไม้ ซึ่งโครงสร้างและรูปแบบจะถูกกำหนดตามมาตรฐาน RFC1155 หรือ เรียกอีกอย่างว่า SMIv1 โดยจะระบุถึงวิธีการจัดการออปเจ็กต์ เช่น การตั้งชื่อออปเจ็กต์ การกำหนดชนิดข้อมูลของแต่ละออปเจ็กต์ โดยวิธีการนิยามออปเจ็กต์ใน SNMPv1 สามารถแบ่งย่อยได้ 3 คุณสมบัติ ดังต่อไปนี้

          1. ชื่อ (Name) 
          ชื่อของออปเจ็กต์ หรือ เรียกอีกอย่างทางเทคนิคว่า OID (Object Identifier) จะต้องไม่ซ้ำกับชื่อของออปเจ็กต์ตัวอื่น ๆ รูปแบบชื่อของออปเจ็กต์จะปรากฏได้สองรูปแบบ คือ เป็นลักษณะของตัวเลข หรือ เป็นลักษณะตัวอักษรที่สามารถอ่านได้โดยง่ายและจำง่ายกว่า จุดประสงค์การมีรูปแบบสองรูปแบบก็คล้ายคลึงกับจุดประสงค์ของหมายเลข IP (Internet Protocol) และชื่อ URL (Uniform Resource Locator) ซึ่งอันที่จริงทั้งสองรูปแบบของ SNMP ก็มีความยาวที่ค่อนข้างยาว และจดจำได้ยากไม่ทิ้งกันเนื่องจากโครงสร้างของข้อมูลมีความใหญ่นั้นเอง ทำให้ยังต้องเปิดคู่มือช่วย หรือใช้เครื่องมือหรือซอฟต์แวร์ช่วยในการทำงาน

          2. ชนิด และ ซินเท็กซ์ (Type และ Syntax)
          ชนิดข้อมูลของออปเจ็กต์จะถูกนิยามโดยใช้ซินเท็กซ์ตามมาตรฐาน ASN.1 (Abstract Syntax Notation One) การนิยามแบบ ASN.1 คือการระบุวิธีการเปลี่ยนรูปแบบการแสดงข้อมูลให้เป็นมาตรฐานกลางก่อนที่จะส่งไปยังตัวเมเนเจอร์ หรือเอเยนต์ที่อาจใช้ระบบปฏิบัติการที่แตกต่างกัน ข้อดีของ ASN.1 คือเป็นรูปแบบของข้อมูลที่ไม่ยึดติดกับชนิดฮาร์ดแวร์ นั้นหมายความว่าไม่ต้องกังวลในเรื่องการส่งผ่านข้อมูลระหว่างเครื่องคอมพิวเตอร์ต่างแพลตฟอร์มซึ่งอาจมีความแตกต่างในการเรียงไบต์สูงกับไบต์ต่ำ โดยจะมีการกล่าวรายละเอียดเพิ่มเติม และยกตัวอย่างการส่งข้อมูลจริง ๆ ในภายหลัง

          3. การเข้ารหัส (Encoding)
          ทุกส่วนของออปเจ็กต์จะถูกเข้ารหัสในรูปแถวของไบต์หรือออกเตตโดยใช้หลักการ BER (Basic Encoding Rules) เพื่อให้ข้อมูลสามารถส่งผ่านสื่อสัญญาณได้ง่าย เช่น เครือข่ายอีเทอร์เน็ต โดยจะกล่าวรายละเอียดเพิ่มเติมและยกตัวอย่างการส่งข้อมูลจริง ๆ ในภายหลังเช่นกัน

* การตั้งชื่อ OID
          แต่ละออปเจ็กต์สามารถจัดให้อยู่ในโครงสร้างต้นไม้ โดยชื่อของออปเจ็กต์ หรือ OID นั้น จะประกอบด้วยชุดของหมายเลขจำนวนเต็มตามจำนวนโหนดที่มันอยู่ภายใต้โครงสร้างโดยใช้เครื่องหมายจุด หรือ ดอต (“.”) เป็นตัวคั่นกลางระหว่างชั้น หรือระดับ ถึงแม้ว่าจะมีการใช้ชื่อเป็นตัวแทนของแต่ละโหนด หรือ ระดับชั้น แต่จริง ๆ แล้วก็ไม่ให้ความรู้สึกที่แตกต่างกัน โดยชื่อที่เป็นตัวอักษร หรือเลขจำนวนเต็มก็สามารถใช้อ้างอิงถึงตำแหน่งของแต่ละโหนด ดังนั้นจึงสามารถใช้การจัดเรียงลำดับชื่อ หรือหมายเลขเพื่อการอ้างถึง OID หรือออปเจ็กต์นั้น ๆ รูปที่ 4 แสดงโครงสร้างต้นไม้ระดับพื้นฐานของ SNMPv1

รูปที่ 4 โครงสร้างต้นไม้ของ SMI

          ตามโครงสร้างต้นไม้ที่แสดงดังรูปที่ 4 โหนดที่อยู่บนสุดจะถูกเรียกว่ารูต (Root) และโหนดที่มีโหนดอื่นอยู่ภายใต้จะถูกเรียกว่าซับทรี (Subtree) แต่สำหรับโหนดสุดท้าย หรือโหนดที่ไม่มีโหนดอื่นอยู่ภายใต้จะเรียกว่า ลีฟโหนด (Leaf Node) จากรูปตัวอย่างที่ 4 รูตคือจุดเริ่มต้นของโครงสร้างต้นไม้สามารถเรียกว่า รูตโหนด (Root-Node) จากรูปที่ 4 โหนด iso(1) จะเป็นเป็นเพียงโหนดเดียวที่เป็นซับทรี สำหรับโหนด ccitt(0) และ joint(2) จะเป็นเพียงลีฟโหนดเท่านั้น เนื่องจากที่จริงแล้วไม่ได้อยู่ภายการควบคุมของมาตรฐาน SNMP แต่สร้างไว้เพื่อระบบอื่น ๆ นอกมาตรฐาน

          แต่ละออปเจ็กต์หรือโหนดจะมีหมายเลข OID กำกับ และถูกเชื่อมโยงซึ่งกันและกันโดยอ้างอิงชื่อและลำดับ การอ้างอิงแบบตัวเลขจะใช้การเรียงลำดับและเครื่องหมายจุดคั้นเพื่อบ่งบอกตำแหน่งของออปเจ็กต์ในตัวเอเยนต์ โดยรูปแบบการอ้างอิงจะคล้ายคลึงกับการอ้างอิงหมายเลข IP เพื่อลดการจดจำ จากรูปที่ 4 เราสามารถอ้างถึงซับทรี internet ได้ดังนี้ คือ 1.3.6.1 หรืออ้างอิงโดยชื่อ คือ iso.org.dod.internet

          อีกประการหนึ่งซับทรียังสามารถถูกเรียกได้อีกอย่างว่าบรานช์ (Branch) จากรูปที่ 4 ได้ว่าบรานช์ mgmt จะใช้นิยามชุดข้อมูลมาตรฐานสำหรับการบริหารจัดการอินเทอร์เน็ตหรือการติดต่อระบบเครือข่ายของอุปกรณ์ ในส่วนของบรานช์ experimental นั้นถูกออกแบบไว้สำหรับทำการทดลองหรือออกแบบออปเจ็กต์หรือข้อมูลชนิดใหม่ สำหรับบรานช์ private ใช้สำหรับสร้างออปเจ็กต์พิเศษที่ถูกนิยามโดยผู้ผลิตอุปกรณ์นั้น ๆ หรือ เพื่อตอบสนองความต้องการแบบพิเศษของผู้ใช้แต่ละรายโดยเฉพาะ ตัวอย่างการนิยามสร้างโครงสร้าง SMI ของซับทรี internet มีรูปแบบ ดังต่อไปนี้

          internet            OBJECT IDENTIFIER ::= {iso org(3) dod(6) 1}
          directory          OBJECT IDENTIFIER ::= {internet 1}
          mgmt               OBJECT IDENTIFIER ::= {internet 2}
          experimental  OBJECT IDENTIFIER ::= {internet 3}
          private              OBJECT IDENTIFIER ::= {internet 3}

          จะเห็นว่าบรรทัดแรกเป็นการประกาศการสร้างออปเจ็กต์ internet นั้นคือ OID หมายเลข 1.3.6.1 ซึ่งจริง ๆ แล้วเป็นซับทรีภายใต้ iso.org.dod หรือ 1.3.6 ส่วนการประกาศอีก 4 บรรทัดก็คือการสร้างซับทรีย่อยลงไปอีกหนึ่งระดับ หรือ เรียกอีกอย่างว่าเป็นบรานช์ของโหนด internet นั้นเอง เช่น บรานช์ directory จะใช้ซินเท็กซ์ หรือการนิยามดังนี้ {Internet 1} ซึ่งบ่งบอกว่ามันเป็นส่วนหนึ่งของซับทรี internet โดยมีหมายเลขบอกลำดับกำกับเพื่อการจำแนก ทำให้ซับทรีดังกล่าวมีหมายเลข OID เท่ากับ 1.3.6.1.1 สำหรับการสร้าง OID ของตัวอื่น ๆ เช่น บรานช์ mgmt ก็ใช้หลักการเดียวกัน ดังนั้นก็จะได้ หมายเลข OID เท่ากับ 1.3.6.1.2 เรียงลำดับกันไป

          ในปัจจุบันยังมีออปเจ็กต์ชนิดพิเศษที่อยู่ภายใต้ซับทรี private ซึ่งเป็นการออกแบบโครงสร้างเพื่อเปิดช่องให้ผู้ผลิตฮาร์ดแวร์ และซอฟต์แวร์ ได้นิยามออปเจ็กต์ขึ้นมาใช้เองเพื่อจุดประสงค์พิเศษต่าง ๆ ที่อาจจะเกิดขึ้นได้โดยมีการนิยามตาม SMI ดังต่อไปนี้

          enterprises  OBJECT IDENTIFIER ::= {private 1}
     
          ความจริงอีกประการหนึ่งนั้นคือหมายเลขออปเจ็กต์ของโหนดในซับทรี private.enterprise ไม่สามารถตั้งเองได้อย่างอิสระ แต่ยังถูกกำหนดโดยหน่วยงานสากล IANA (Internet Assigned Numbers Authority) เพื่อป้องกันการตั้งซ้ำซ้อน ยกตัวอย่างเช่น บริษัท CISCO จะได้หมายเลขภายใต้โหนด enterprise เป็นหมายเลข 9 ดังนั้นหมายเลข OID ของ CISCO จะเท่ากับ iso.org.dod.internet.private.enterpises.cisco หรือ 1.3.6.1.4.1.9 และแล้วโหนดภายใต้บรานช์นี้ของบริษัท CISCO จะเป็นอิสระในการนิยามออปเจ็กต์ตามความต้องการซึ่งเป็นประโยชน์อย่างมาก และเป็นการไม่จำกัดขอบเขตในการพัฒนาสิ่งใหม่ใหม่ อีกอย่างหนึ่งการลงทะเบียนของหมายเลขบรานช์ประเภท Private นั้นไม่เสียค่าใช้จ่ายใด ๆ โดยสามารถลงทะเบียนขอหมายเลขผ่านเว็บไซต์ดังนี้ http://www.isi.edu/cgi-bin/iana/enterprise.pl

* การนิยาม OID
          การนิยาม OID นั้นจะทำด้วยซินเท็กซ์ (Syntax) หรือ คำสั่งในการนิยาม) โดยจะถูกกำกับดูแลด้วยมาตรฐาน ASN.1 สำหรับ SMIv1 จะมีการกำหนดชนิดของข้อมูล (Data Type) เพื่อบ่งบอก หรือเป็นแนะนำว่าเป็นข้อมูลนั้นเป็นชนิดใด โดยทั่วไปใช้ทำอะไร ดังตารางดังต่อไปนี้

ตาราง ชนิดข้อมูลที่สนับสนุนโดย SMIv1
 

          อีกจุดประสงค์หนึ่งของชนิดข้อมูลของออปเจ็กต์ ก็คือเพื่อการจัดกลุ่มของออปเจ็กต์ให้ง่ายต่อการจัดการ หรือที่เรียกอีกอย่างว่า MIB (Management Information Base) โดยอาจจะมองว่า MIB เป็นโครงสร้างฐานข้อมูลใช้ในการบ่งบอกคุณสมบัติของอุปกรณ์นั้น ๆ ก็ได้ ในการทำงานกับซอฟต์แวร์ประเภทบริหารจัดการอุปกรณ์เครือข่ายโดยทั่วไปใช้มักจะใช้ไฟล์ MIB ในการรับทราบคุณสมบัติของอุปกรณ์ที่จะจัดการ โดยวิธีการง่าย ๆ คือ การโหลด หรือการคอมไพล์ไฟล์ MIB ของตัวอุปกรณ์นั้น ๆ เข้าไปในระบบ สิ่งที่สำคัญที่ต้องเข้าใจเกี่ยวกับไฟล์ MIB ก็คือซินเท็กซ์ (Syntax) หรือคำสั่งนั้นเอง โดยปัจจุบันจะใช้มาตรฐานที่เรียกว่า MIB-II ซึ่งเป็นที่นิยมมาก ตัวอย่างเนื้อหาหรือคำสั่งในการนิยามของไฟล์ MIB ดังต่อไปนี้

          RFC1213-MIB DEFINITION: = BEGIN
                    IMPORTS
                              mgmt, NetworkAddress, IpAddress, Counter, Gauge,
                              TimeTicks
                                        FROM RFC1155-SMI
                              OBJECT-TYPE
                                        FROM RFC 1212;
                              mib-2 OBJECT IDENTIFIER ::= {mgmt 1}
                    -- groups in MIB-II 
                              system  OBJECT IDENTIFIER ::= {mib-2 1}
                              interfaces   OBJECT IDENTIFIER ::= {mib-2 2}
                              at  OBJECT IDENTIFIER ::= {mib-2 3}
                              ip  OBJECT IDENTIFIER ::= {mib-2 4}
                              icmp  OBJECT IDENTIFIER ::= {mib-2 5}
                              tcp  OBJECT IDENTIFIER ::= {mib-2 6}
                              udp  OBJECT IDENTIFIER ::= {mib-2 7}
                              egp  OBJECT IDENTIFIER ::= {mib-2 8}
                              transmission OBJECT IDENTIFIER ::= {mib-2 10}
                              snmp  OBJECT IDENTIFIER ::= {mib-2 11}
                    -- the Interfaces table
                    -- The Interface table contains information on the entity’s
                    -- interfaces. Each interface is thought of as being
                    -- attached to a ‘subnetwork’ Note that this term should
                    -- not be confused with ‘subnet’ which refers to an
                    -- addressing-partitioning scheme used in the Internet
                    -- suite of protocols.
                    ifTable OBJECT-TYPE
                              SYNTAX SEQUENCE OF IfEntry
                              ACCESS not-accessable
                              STATUS  mandatory
                              DESCRIPTION
                                        “A list of interface entries. The number of entries is
                                        given by the value of ifNumber.”
                                        ::= {interface 2}
                                        ifEntry OBJECT-TYPE
                                                  SYNTAX IfEntry
                                                  ACCESS not-accessible
                              STATUS mandatory
                              DESCRIPTION
                                        “An interface entry containing objects at the subnetwork
                                        Layer and below for a particular interface.”
                              INDEX {ifIndex}
                              ::= {ifIndex 1}
                              IfEntry ::=
                                        SEQUENCE {
                                                  ifIndex
                                                            INTEGER,
                                                  ifDescr
                                                            DisplayString,
                                                  ifType
                                                            INTEGER,
                                                  ifMtu
                                                            INTEGER,
                                                  ifSpeed
                                                            Gauge,
                                                  ifPhysAddress
                                                            PhysAddress,
                                                  ifAdminStatus
                                                            INTEGER,
                                                  ifOperStatus
                                                            INTEGER,
                                                  ifLastChange
                                                            TimeTicks,
                                                  ifInOctets
                                                            Counter,
                                                  ifInUcastPkts
                                                            Counter,
                                                  ifInNUcastPkts
                                                            Counter,
                                                  ifInDiscards,
                                                            Counter,
                                                  ifInErrors
                                                            Counter,
                                                  ifInUnknownProtos
                                                            Counter,
                                                  ifOutOctets
                                                            Counter,
                                                  ifOutUcastPkts
                                                            Counter,
                                                  ifOutNUcastPkts
                                                            Counter,
                                                  ifOutDiscards
                                                            Counter,
                                                  ifOutErrors
                                                            Counter,
                                                  ifOutQLen
                                                            Gauge,
                                                            ifSpecific
                                                  OBJECT IDENTIFIER
                                                  }
                              ifIndex OBJECT-TYPE
                                        SYNTAX INTEGER
                                        ACCESS  read-only
                                        STATUS  mandatory
                                        DESCRIPTION
                                                  “A unique value for each interface. Its value ranges
                                                  Between 1. and the value of ifNumber. The value for each
                                                  Each interface must remain constant at least from one
                                                  Reinitialization of the entity’s network-management
                                                  System to the next reinitiallization.”
                                                  ::= {ifEntry 1}
                                        ifDescr OBJECT-TYPE
                                                  SYNTAX DisplayString (SIZE (0..255))
                                                  ACCESS read-only
                                                  STATUS mandatory
                                                  DESCRIPTION
                                                            “A textual string containing information about the
                                                            Interface. This string should include the name of
                                                            The manufacturer, the product name, and the version
                                                            Of the hardware interface.”
                                                  ::= {ifEntry 2}
                    END
     
          บรรทัดแรกคือการตั้งชื่อ MIB สำหรับตัวอย่างนี้ ชื่อที่ตั้งคือ RFC1213-MIB (RFC1213 เป็นหมายเลขมาตรฐานสำหรับ MIB-II บ่งบอกว่าไฟล์นี้ใช้มาตรฐาน MIB-II) รูปแบบการนิยามมาตรฐานจะต้องเป็นลักษณะนี้เสมอโดยมีคำสั่งสำคัญอันหนึ่งนั้นคือ IMPORTS ซึ่งเป็นการอนุญาตให้ผู้ใช้ทราบถึงข้อมูลหรือออปเจ็กต์ของตัวอุปกรณ์จากไฟล์ MIB โดย IMPORT จะทำงานคู่กับเงื่อนไข FROM ซึ่งบ่งบอกข้อมูลดังกล่าวมาจากการนิยามมาตรฐานใด โดยตัวอย่างจะเห็นว่าข้อมูลบางส่วนจะมาจากมาตรฐาน SMIv1 หรือ RFC1155 ดังที่กล่าวมาแล้วข้างต้นดังต่อไปนี้
          * NetworkAddress
          * IpAddress
          * Counter
          * Gauge
          * TimeTicks      
 
          ในอีกส่วนหนึ่งก็คือข้อมูลแบบ OBJECT-TYPE ที่ถูกนิยามโดยอีกมาตรฐานของ MIB-2 นั้นคือ RFC 1212 ซึ่งเป็นการนิยามที่กำหนดวิธีการสร้างไฟล์ MIB อีกรูปแบบ โดยที่ OID ที่จะถูกใช้งานจะถูกกำหนดในไฟล์ MIB ดังกล่าวตามเซ็คชันเป็นส่วน ๆ ซึ่งจะมีการเชื่อมต่อซึ่งกันและกันตามซินเท็กซ์ อย่างเช่น กลุ่มของบรรทัดที่นิยามซับทรี mib-2 จะพบว่า mib-2 จะถูกนิยามให้อยู่ภายใต้โหนด mgmt โดยกำหนดโหนดให้หมายเลขที่ .1 ซึ่งเราก็ทราบดีว่า mgmt นั้นมีหมายเลข OID เท่ากับ 1.3.6.1.2 ตามมาตรฐาน ดังนั้นโหนดหรือซับทรี mib-2 ก็จะมีหมายเลข OID เท่ากับ 1.3.6.1.2.1 ซึ่งเป็นไปตามหลักการ จะพบว่าภายใต้โหนด mib-2 ก็จะอีกมีหลายหลายโหนด แต่ที่จะยกตัวอย่าง หรือ เน้น นั้นคือโหนด interfaces  ซึ่งถูกนิยามโดยคำสั่ง { mib-2 2 } และมีหมายเลข OID เท่ากับ 1.3.6.1.2.1.2

          จะพบว่าหลังจากที่ชื่อ OID ได้ถูกนิยาม เราจะต้องนิยามในรายละเอียดของออปเจ็กต์นั้นจริง ๆ ทุกทุกการนิยามของออปเจ็กต์จะมีรูปแบบดังต่อไปนี้
          <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>}
 
          จากตัวอย่าง ออปเจ็กต์แรกที่ถูกนิยามในไฟล์ mib ดังกล่าวคือ ifTable ที่จะใช้จัดกลุ่มของอินเตอร์เฟซของอุปกรณ์ที่ถูกจัดการให้อยู่ในรูปแบบของตาราง การตั้งชื่อสามารถตั้งชื่อออปเจ็กต์โดยใช้อักษรตัวเล็กตัวใหญ่ผสมกันได้แต่ตัวแรกต้องเป็นตัวเล็กเสมอซึ่งการนิยามตามมาตรฐาน ASN.1 ที่สำคัญที่ต้องจดจำ ดังตัวอย่างของล่าง
          ifTable OBJECT-TYPE
                    SYNTAX SEQUENCE OF IfEntry
                    ACCESS not-accessible
                    STATUS mandatory
          DESCRIPTION
                    “A list or interface entries. The number of entries is given by 
                    The value of ifNumber.”
          ::= {interfaces 2}

          รูปแบบซินเท็กซ์ของ ifTable คือ SEQUENCE OF IfEntry หรือเป็นตารางของ แถวลำดับข้อมูล IfEntry ที่ประกอบด้วยหลายชนิดข้อมูล นั้นหมายความว่า ifTable จะทำหน้าที่เป็นตารางที่ประกอบด้วยคอลัมน์ข้อมูลที่ถูกนิยามในออปเจ็กต์ IfEntry ตัวออปเจ็กต์ ifTable นั้นเป็นเพียงการจัดกลุ่มดังนั้นจึงสามารถกำหนดการเข้าถึงให้เป็นแบบ not-accessible ที่หมายความว่าไม่สามารถร้องขอข้อมูลของออปเจ็กต์นี้จากตัวเอเยนต์ได้เนื่องจากไม่มีข้อมูลที่สำคัญ สำหรับสถานะความจำเป็นของออปเจ็กต์ตัวอย่างจะเป็นแบบ mandatory นั้นหมายความว่าเอเยนต์ต้องมีการสร้างออปเจ็กต์นี้เพื่อจะได้ตรงตามข้อกำหนดของ MIB-II ในส่วนของ DESCRIPTION จะใช้อธิบายความหมายเพิ่มเติมของออปเจ็กต์นั้นนั้น สำหรับตัวอย่างนี้หมายเลข OID ของตารางอินเตอร์เฟซ คือ 1.3.6.1.2.1.2.2 หรือ iso.org.dod.internet.mgmt.interfaces.2

          คราวนี้เรามาดูคำสั่งที่สำคัญอีกคำสั่งนั้นคือ SEQUENCE ที่ถูกใช้เพื่ออธิบายแถวลำดับของข้อมูลดังที่กล่าวมาแล้วข้างต้น ดังต่อไปนี้ 
          IfEntry ::=
                    SEQUENCE {
          ifIndex
                    INTEGER,
          ifDescr
                    DisplayString,
          ifType 
                    INTEGER,
          ifMtu
                    INTEGER,
          .
                                     .
          ifSpecific
                    OBJECT INDENTIFIER }
   
          จดจำไว้ว่าชื่อของ sequence หรือแถวลำดับข้อมูล เช่น IfEntry สามารถผสมตัวเล็กตัวใหญ่ได้เช่นกัน แต่ตัวแรกของชื่อต้องเป็นตัวใหญ่เท่านั้นซึ่งแตกต่างจากการนิยามออปเจ็กต์ทั่วไป เช่น ifTable และตัวอย่างข้างต้นคือการนิยาม Sequence ซึ่งอันที่ที่จริงแล้วจะพบว่า Sequence เป็นเพียงรายการของออปเจ็กต์ในลักษณะคอลัมน์ที่ถูกนิยามตามชนิดของข้อมูลมาตรฐาน SMI ในตัวอย่างดังกล่าว เราสามารถตรวจสอบชนิดข้อมูลของออปเจ็กต์ต่าง ๆ เช่น  ifIndex, ifDescr, ifType เป็นต้น  จากการสร้างออปเจ็กต์ที่ไว้จัดกลุ่มข้อมูลในลักษณะตารางนี้ทำสามารถบรรจุในลักษณะแถวหรือ โรว์ (row) ที่สามารถบรรจุข้อมูลประเภทเดียวกันจำนวนหลายหลายโรว์ ขึ้นอยู่กับความสามารถ หรือประสิทธิภาพของตัวเอเยนต์ หรืออุปกรณ์จริง ๆ

          ตอนนี้เราได้สร้าง ifEntry ที่เป็น Sequence เพื่อใช้ในการกำหนดว่ามีข้อมูลอะไรบ้างในแต่ละโรว์ของตาราง ดังนั้นต่อไปมาดูการนิยามของออปเจ็กต์ ifEntry ที่เป็นข้อมูลจริง ๆ หรือแทนคุณสมบัติจริงของอุปกรณ์ในแต่ละโรว์ ได้ดังต่อไปนี้

          ifEntry OBJECT-TYPE
                    SYNTAX IfEntry
                    ACCESS not-accessible
                    STATUS mandatory
                    DESCRIPTION
                              “An interface entry containing objects at the subnetwork layer
                              And below for a particular interface.”
                    INDEX {ifIndex}  
                    ::= {ifTable 1}

          ifEntry เป็นการนิยามโรว์ในตาราง ifTable การนิยามโรว์นี้จะสามารถทำให้เป็นเอกลักษณ์ได้โดยใช้เงื่อนไข clause คำว่า INDEX ค่าของอินเด็กซ์จะเป็นค่าที่ไม่ซ้ำกันเพื่อใช้จำแนกแต่ละโรว์ในตาราง ifTable  แต่อย่างไรก็ตามก็ขึ้นอยู่กับตัวเอเยนต์ที่ต้องตรวจสอบค่าอินเด็กซ์ไม่ให้ซ้ำกัน เช่นกัน  ถ้าเราเตอร์มีจำนวน 6 อินเตอร์เฟซ ในตาราง ifTable จะมี 6 โรว์ของ ifEntry  แล้วแต่ละ ifEntry จะมีหมายเลข OID เท่ากับ 1.3.6.1.2.1.2.2.1 หรือ iso.org.dod.internet.mgmt.interfaces.ifTable.ifEntry ตามด้วยตัวอินเด็กซ์ของ ifEntry จะเป็นหมายเลขต่อท้ายถัดไป การนิยาม ifIndex จะถูกนิยามดังต่อไปนี้

          ifIndex OBJECT-TYPE
                    SYNTAX INTEGER
                    ACCESS read-only
                    STATUS mandatory
                    DESCRIPTION
                              “A unique value for each interface. Its value ranges between
                              1 and the value of ifNumber. The value for each interface
                              must remain constant at leaset from on reinitialization of the
                              entity’s network-management system to the next reinitialization.”
                    ::= {ifEntry 1}
     
          ข้อมูลของออปเจ็กต์ ifIndex จะอ่านได้เพียงอย่างเดียวนั้นมีความหมายว่าเราจะเห็นค่าออกมาแต่ไม่สามารถจะเปลี่ยนแปลงค่าได้ ส่วนออปเจ็กต์สุดท้ายทีจะกล่าวเพียงเล็กน้อยในการนิยามในไฟล์ MIB คือ ifDescr ซึ่งเป็นข้อความสำหรับอธิบายความหมายเพิ่มเติมในแต่ละโรว์ สุดท้ายในแต่ละไฟล์ MIB จะต้องจบด้วยคำสั่ง END ที่เป็นตัวบ่งบอกให้ตัวคอมไพเลอร์ถึงตำแหน่งจบของข้อมูลไฟล์ MIB

          ในตอนที่ 3 ตอนถัดไป จะกล่าวถึงรายละเอียดในแต่ SNMPv2 ที่มีคุณสมบัติเพิ่มเติม และถูกนิยามตามโครงสร้าง SMIv2 โปรดติดตามนะครับ

เอกสารอ้างอิง
          1. Subramanian, Mani. Network Management. Addison-Wesley, 2000
          2. Stallings, W. SNMP, SNMPv1, SNMPv3 and RMON 1 and 2. Addison-Wesley, 1999
          3. Douglas Mauro, Kevin Schmidt. Essential SNMP. O’Reilly, 2001
          4. IETF SNMPv3 working group (Web sites). 
          5. Andrew Tanenbaum, Computer Networks (fourth edition), Prentice Hall, Upper Saddle River, NJ, 2003, ISBN 0-13-038488-7.

สงวนลิขสิทธิ์ ตามพระราชบัญญัติลิขสิทธิ์ พ.ศ. 2539 www.thailandindustry.com
Copyright (C) 2009 www.thailandindustry.com All rights reserved.

ขอสงวนสิทธิ์ ข้อมูล เนื้อหา บทความ และรูปภาพ (ในส่วนที่ทำขึ้นเอง) ทั้งหมดที่ปรากฎอยู่ในเว็บไซต์ www.thailandindustry.com ห้ามมิให้บุคคลใด คัดลอก หรือ ทำสำเนา หรือ ดัดแปลง ข้อความหรือบทความใดๆ ของเว็บไซต์ หากผู้ใดละเมิด ไม่ว่าการลอกเลียน หรือนำส่วนหนึ่งส่วนใดของบทความนี้ไปใช้ ดัดแปลง โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร จะถูกดำเนินคดี ตามที่กฏหมายบัญญัติไว้สูงสุด