120 likes | 276 Views
Abstract Syntax Notation One, ASN.1. Χρήση αφηρημένου συντακτικού για τον ορισμό των MIBs και των Protocol Data Units (PDUs) του πρωτοκόλλου SNMP Καθορισμός αφηρημένου συντακτικού με την τυπική γλώσσα ASN.1 Abstract Syntax Notation One, ASN.1:
E N D
Abstract Syntax Notation One, ASN.1 • Χρήση αφηρημένου συντακτικού για τον ορισμό των MIBs και των Protocol Data Units (PDUs) του πρωτοκόλλου SNMP • Καθορισμός αφηρημένου συντακτικού με την τυπική γλώσσα ASN.1 • Abstract Syntax Notation One, ASN.1: • Tυπική γλώσσα συμβολισμού αφηρημένων συντακτικών (notation of abstract syntax) (ISO 8824/CCITT X.208) για την αναπαράσταση δεδομένων των δικτυακών εφαρμογών • Επιτρέπει το συμβολισμό τύπων δεδομένων και τιμών αυτών των τύπων • Basic Encoding Rules, BER: • Κανόνες που καθορίζουν πως τα στιγμιότυπα (instances) αφηρημένων συντακτικών κωδικοποιούνται για μεταφορά (transfer syntax) (ISO 8825/CCITT X.209)
Τύποι της ASN.1 • Ένας τύπος είναι μία συλλογή από πιθανές τιμές • Παράδειγμα: • INTEGER: αναπαριστά το σύνολο όλων των θετικών και αρνητικών ακεραίων αριθμών • BOOLEAN: αναπαριστά μόνο τις τιμές του TRUE και FALSE • Τύποι της ASN.1 • Απλοί προκαθορισμένοι τύποι (simple build-in) από τους οποίους δημιουργούνται όλοι οι υπόλοιποι • Δομημένοι τύποι (structured) που επιτρέπουν τον ορισμό σύνθετων τύπων δεδομένων • Κάθε ASN.1 τύπος προσδιορίζεται μοναδικά από μία ετικέτα (tag), που αποτελείται από: • το όνομα μιας κλάσης (class) και • ένα θετικό νούμερο (tag number). • Τέσσερεις κλάσεις: • UNIVERSAL, APPLICATION, Context-specific, Private
Συμβολισμός για τον ορισμό τύπων στην ASN.1 • Ορισμός νέου τύπου με τη χρήση συμβολισμού ανάθεσης τύπου (type assignment) AlarmReport ::= SEQUENCE { id INTEGER, alarmTime UTCTime, alarmInfo IA5String } • Ένας συμβολισμός ανάθεσης τύπου αποτελείται από τρία τμήματα: • Αναφορά τύπου (type reference): το όνομα του νέου τύπου • Οι χαρακτήρες ::= που διαβάζεται «ορίζεται ως» • Ο τύπος βάσει του οποίου ορίζεται ο νέος τύπος
Συμβολισμός για τον ορισμό τιμών στην ASN.1 • Ορισμός νέου τύπου με τη χρήση συμβολισμού ανάθεσης τιμής (value assignment) thisAlarm AlarmReport ::= { id 5, alarmTime “9112311200”, alarmInfo “SOS” } • Ένας συμβολισμός ανάθεσης τύπου αποτελείται από τρία τμήματα: • Αναφοράτιμής (value reference): το όνομα της τιμής και ο τύπος της • Οι χαρακτήρες ::= που διαβάζεται «ανατίθεται η τιμή» • Μία έγκυρη τιμή
Οι προκαθορισμένοι τύποι της ASN.1 • Οι σημαντικότεροι απλοί τύποι (simple types) (1) • BOOLEAN Married ::= BOOLEAN • INTEGER NumberOfCustomers ::= INTEGER DaysInTheYear ::= INTEGER { first(1), last(356)} EquipmentType ::= INTEGER { undefined (0), computer (1), printer (2) } • ENUMERATED EquipmentType ::= ENUMERATED { undefined (0), computer (1), printer (2) }
Οι προκαθορισμένοι τύποι της ASN.1 • Οι σημαντικότεροι απλοί τύποι (simple types) (2) • REAL MxBE M:mantissa, E:exponent, B:base (2 or 10) ChannelCapacity ::= REAL -- 9.6 Kbps lowSpeed ChannelCapacity ::= {96, 10, -1} • BIT STRING BinaryFile ::= BIT STRING • binary strings: η δυαδική τιμήσε μονά εισαγωγικά ακολουθούμενο από το χαρακτήρα Β, π.χ. ‘1001010011’Β, ‘01’Β • hexadecimal strings: η δεκαεξαδική τιμή σε μονά εισαγωγικά ακολουθούμενο από το χαρακτήρα Η, π.χ. ‘48454C4C4F’H • OCTET STRING: Αναπαράσταση δυαδικών δεδομένων με μη καθορισμένο format που το μέγεθός τους σε bits είναι πολλαπλάσιο του 8 FileContents ::= OCTET STRING • NULL Absent ::= NULL
Οι προκαθορισμένοι τύποι της ASN.1 • Οι σημαντικότεροι απλοί τύποι (simple types) (3) • OBJECT IDENTIFIER: μία σειρά από μη αρνητικές τιμές οι οποίες προέρχονται από τη διάσχιση ενός δέντρου. Document-Type-Name :: = OBJECT IDENTIFIER fTAM-1 Document-Type-Name :: = { 1 0 8571 5 1} fTAM-1 Document-Type-Name :: = { iso(1) standard(0) 8571 5 1}
Οι προκαθορισμένοι τύποι της ASN.1 • Οι σημαντικότεροι απλοί τύποι (simple types) (4) • Τύποι για το ορισμό strings: • NumericString • PrintableString • TeletexString • VideotexString • VisibleString • IA5String • GraphicsString • GeneralString • GeneralizedTime: αναπαράσταση χρόνου κυρίως στη μορφή “YYYYMMDDHHMMSS.ff” π.χ. “19990809153010.3”τοπική ώρα 9, Αυγούστου 1999, 3:30 μμ και 10.3 δεύτερα • ObjectDescriptor: χρησιμοποιείται σε συνδυασμό με OBJECT DESCRIPTORγια την απόδοση ονομασίας asciiContents OBJECT IDENTIFIER ::= { ……} asciiContentsDescriptor ObjectDescriptor ::= “Textual File Contents”
Οι προκαθορισμένοι τύποι της ASN.1 • Δομημένοι τύποι (structured types) (1) • SEQUENCE EmployeeRecord ::= SEQUENCE { number INTEGER, name IA5String, position INTEGER { staff (0), manager (1)}, salary INTEGER address IA5String OPTIONAL married BOOLEAN DEFAULT FALSE } generalDirector EmployeeRecord ::= { number 170001, name “Smith J.R.”, position manager, salary 700000 }
Οι προκαθορισμένοι τύποι της ASN.1 • Δομημένοι τύποι (structured types) (2) • SEQUENCE OF TemperatureReadings ::= SEQUENCE OF INTEGER EmployeeDB ::= SEQUENCE OF EmployeeRecord • SET: FileAttributes ::= SET { owner IA5String, size INTEGER, access ENUMERATED {read(0), read-write(1)} } thisFile FileAttributes ::= {owner “John”, size 21256, access read-write} ή thisFile FileAttributes ::= {size 21256, owner “John”, access read-write}
Οι προκαθορισμένοι τύποι της ASN.1 • Δομημένοι τύποι (structured types) (3) • SET OF TelephoneNumbers ::= SET OF INTEGER myPhones TelephoneNumbers ::= {2222222, 3333333, 4040404} ή myPhones TelephoneNumbers ::= {3333333, 4040404, 2222222} • CHOICE: FileContents ::= CHOICE { textual IA5String, binary BIT STRING, empty NULL } thisFile FileContents ::= textual “HELLO !”
Η χρήση των ετικετών (tags) στην ASN.1 • Ορισμός τύπων με τη χρήση ετικέτας (tagged types) • Ένας τύπος που ορίζεται αναφορικά με έναν υπάρχων τύπο και μία ετικέτα. • Ο νέος τύπος έχει την ίδια μορφή με τον προϋπάρχοντα τύπο αλλά είναι διαφορετικός, δηλαδή σε κάθε κωδικοποίηση για μεταφορά η τιμή αυτού του τύπου πρέπει να ξεχωρίζει από τον προηγούμενο. • Η ανάγκη χρήσης ετικετών: Temperature ::= INTEGER AlarmID ::= INTEGER RetryCounter ::= INTEGER Κατά τη κωδικοποίηση και μεταφορά της τιμής 5 όλα θα είχαν την τιμή 02 01 05 tag length value Temperature ::= [APPLICATION 0] INTEGER AlarmID ::= [APPLICATION 1] INTEGER RetryCounter ::= [APPLICATION 2] INTEGER