ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ: ΑΝΙΧΝΕΥΣΗ ΣΦΑΛΜΑΤΩΝ ΣΕ ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΔΙΚΤΥΑ ΑΝΙΧΝΕΥΣΗ ΣΦΑΛΜΑΤΩΝ: Κυκλικός Έλεγχος Πλεονασμού CRC codes Cyclic Redundancy Check codes Ο μηχανισμός ανίχνευσης σφαλμάτων στις επικοινωνίες δεδομένων και γενικότερα στα τηλεπικοινωνιακά δίκτυα, αποτελεί βασική συνιστώσα σε πλήθος πρωτοκόλλων και συμβάλλει σημαντικά στην αξιόπιστη μεταφορά και επαλήθευση των πακέτων (δηλ. των δεδομένων) σε μια σύγχρονη ζεύξη σημείο προς σημείο. Αν και κώδικες ανίχνευσης και διόρθωσης σφαλμάτων συναντώνται και στο φυσικό επίπεδο, εντούτοις δεν επαρκεί η εφαρμογή τους για την αξιόπιστη επικοινωνία δεδομένων σε επίπεδο πακέτων, ανάμεσα στα υπόλοιπα στρώματα της στοίβας πρωτοκόλλων. Η ανίχνευση σφαλμάτων εφαρμόζεται σε αρκετά επίπεδα της στοίβας πρωτοκόλλων, ωστόσο αποτελεί δομικό συστατικό για το επίπεδο ζεύξης δεδομένων (Data Link Layer) για αξιόπιστη μεταφορά πλαισίων δεδομένων (ή πιο γενικά πακέτων). Ένας πολύ διαδεδομένος και ισχυρός μηχανισμός ανίχνευσης σφαλμάτων είναι η κωδικοποίηση που αναφέρεται ως Κυκλικός Έλεγχος Πλεονασμού (CRC codes Cyclic Redundancy Check codes). Η κωδικοποίηση CRC συναντάται στην πλειοψηφία των τυποποιήσεων του στρώματος ζεύξης δεδομένων σε όλα τους τύπους τηλεπικοινωνιακών δικτύων. Η αρχή λειτουργίας της κωδικοποίησης CRC βασίζεται σε αριθμητική modulo 2 και η υλοποίηση της πραγματοποιείται πολύ εύκολα είτε με λογισμικό (κώδικα) είτε, για πιο γρήγορη απόδοση και ολοκλήρωση, με υλικό βασισμένο σε ισοδύναμη ψηφιακή λογική. Αν θεωρήσουμε πλαίσιο δεδομένων που αποτελείται από k bit (k bit frame) τότε στον πομπό (στο επίπεδο ζεύξης δεδομένων), βάση του πλαισίου δεδομένων, παράγεται μια επιπλέον ακολουθία ελέγχου πλαισίου (FCS Frame Check Sequence) αποτελούμενη από n bit (n bit FCS) η οποία ενώνεται με το αρχικό πλαίσιο. Η FCS προκύπτει με διαίρεση του τροποποιημένου αρχικού πλαισίου δεδομένων με έναν προκαθορισμένο διαιρέτη μήκους n+1 bit που είναι γνωστός στο πομπό και στον δέκτη. Η τροποποίηση του αρχικού πλαισίου δεδομένων θα φανεί παρακάτω. Με αυτό τον τρόπο προκύπτει το τελικό πλαίσιο δεδομένων που θα μεταδοθεί και το οποίο αποτελείται από k+n bit. Σκοπός της διαδικασίας αυτής είναι το τελικό πλαίσιο να διαιρείται ακριβώς (χωρίς υπόλοιπο) στον δέκτη από ένα προκαθορισμένο αριθμό (τον προκαθορισμένο διαιρέτη). Η μη ύπαρξη υπολοίπου υποδεικνύει ότι δεν έχει γίνει σφάλμα στην μετάδοση. Για να γίνουν κατανοητά τα προηγούμενα έχουμε το εξής παράδειγμα για το οποίο ο προσδιορισμός της FCS φαίνεται στο σχήμα 1: Μ = Πλαίσιο δεδομένων (10 bit) 1 1 0 1 0 1 1 0 1 1 P = Προκαθορισμένος διαιρέτης (5 bit) γεννήτορας (generator) 1 0 0 1 1 X = Τροποποιημένο πλαίσιο δεδομένων (14 bit) με ολίσθηση 4 θέσεων αριστερά = 2 4 Μ 1 1 0 1 0 1 1 0 1 1 0 0 0 0 FCS = ακολουθία ελέγχου πλαισίου (4 bit) προκύπτει με διαίρεση: FCS = X/P = 2 4 Μ / P 1 1 1 0 Τ = Τελικό πλαίσιο μετάδοσης (14 bit) = 2 4 Μ+FCS 1 1 0 1 0 1 1 0 1 1 1 1 1 0
Σχ. 1: Λειτουργία της διαίρεσης για τον προσδιορισμό της FCS. C n 1 XOR C n 2 XOR XOR C 1 XOR C 0 XOR Bit εισόδου OR A n 1 OR A n 2 OR A 2 OR A 1 Σχ. 2: Γενικό δομικό διάγραμμα της αρχιτεκτονικής υλοποίησης κωδικοποίησης CRC με ισοδύναμη ψηφιακή λογική. Υλοποίηση του διαιρέτη P(x) = x n + A n 1 x n 1 + A n 2 x n 2 +... + A 2 x 2 + A 1 x + 1
X 0 X 1 X 2 X 3 Σχ. 3: Διάταξη ψηφιακής λογικής στο SIMULINK για ανίχνευση σφαλμάτων με κώδικες CRC. Διαιρέτης P(x) = x 4 + x + 1. Στον δέκτη (στο επίπεδο ζεύξης δεδομένων) πραγματοποιείται η διαίρεση μεταξύ του λαμβανόμενου πλαισίου και του προκαθορισμένου διαιρέτη Τ/P. Αν το υπόλοιπο της διαίρεσης προκύψει μηδενικό θεωρείται ότι δεν έχει υπάρξει σφάλμα. Στην αντίθετη περίπτωση η ύπαρξη σφάλματος οδηγεί σε αίτηση επαναμετάδοσης του ληφθέντος πλαισίου. Οι παραπάνω ακολουθίες bit συνήθως εκφράζονται ως πολυώνυμα με δυαδικούς συντελεστές μιας πλασματικής μεταβλητής Χ. Για παράδειγμα, ο προκαθορισμένος διαιρέτης 10011 του σχήματος 1 εκφράζεται ως P(x) = 1 x 4 + 0 x 3 + 0 x 2 + 1 x 1 + 1 x 0 δηλ. P(x) = x 4 + x + 1. και η διαδικασία ισοδυναμεί με διαίρεση πολυωνύμων με αριθμητική modulo 2. Το γενικό δομικό διάγραμμα της αρχιτεκτονικής υλοποίησης κωδικοποίησης CRC με ισοδύναμη ψηφιακή λογική φαίνεται στο σχήμα 2. Η διάταξη αποτελείται από έναν καταχωρητή ολίσθησης (shift register) κάθε στοιχείο του οποίου αντιπροσωπεύει τον δυαδικό συντελεστή και στις εισόδους του οποίου παρεμβάλλονται πύλες XOR για την υλοποίηση της modulo 2 διαίρεσης. Ο
καταχωρητής ολίσθησης εύκολα υλοποιείται με χρήση Flip Flop. Η διάταξη σε SIMULINK που πραγματοποιεί την διαδικασία του παραδείγματος του σχήματος 1, φαίνεται στο σχήμα 3. Σκοπός της εργαστηριακής άσκησης είναι, α) η εξοικείωση με την βασική αρχή λειτουργίας της κωδικοποίησης CRC, β) η εξοικείωση με το SIMULINK για την μελέτη και υλοποίηση της CRC, γ) η υλοποίηση και προσομοίωση κωδικοποίησης CRC με ψηφιακή λογική στο SIMULINK, δ) η υλοποίηση και προσομοίωση τυποποιημένης κωδικοποίησης CRC στο SIMULINK ΕΡΓΑΣΤΗΡΙΑΚΗ ΠΟΡΕΙΑ 1. Υλοποιήστε και επαληθεύστε τη λειτουργία του παραδείγματος του σχήματος 3. ΠΡΟΣΟΧΗ: Ο χρόνος ολοκλήρωσης της προσομοίωσης στο SIMULINK πρέπει να είναι ίσος με τον αριθμό των clocks που χρειάζεται η ολοκλήρωση της διαίρεσης. Για παράδειγμα, αν CLOCK = 1 sec (clock period) και ο αριθμός του τροποποιημένου πλαισίου δεδομένων είναι 14bit τότε χρειάζονται 14 clocks για την διαίρεση οπότε ο χρόνος ολοκλήρωσης της προσομοίωσης στο SIMULINK πρέπει να τεθεί σε 14sec. 2. Υλοποιήστε και επαληθεύστε διάταξη στο SIMULINK για κωδικοποίηση CRC με διαιρέτη γεννήτορα P(x) = x 5 +x 4 +x 2 +1. Το πλαίσιο δεδομένων είναι το Μ = [1 0 1 0 0 0 1 1 0 1]. Ορίστε περίοδο CLOCK = 1 sec. 3. Επαληθεύστε την λειτουργία του δέκτη. 4. Χρησιμοποιώντας τα έτοιμα υποσυστήματα κωδικοποίησης CRC του SIMULINK (βιβλιοθήκη Communications Blockset/Error Detection and Correction/CRC/), υλοποιήστε διάταξη με το στάδιο κωδικοποίησης στο πομπό και το στάδιο ανίχνευσης σφαλμάτων στο δέκτη. Χρησιμοποιήστε για πολυώνυμο διαιρέτη τα στοιχεία του παρακάτω πίνακα. Θεωρήστε ιδανικό κανάλι και επαληθεύστε την λειτουργία της διάταξης για κάθε περίπτωση. Συμβουλευτείτε το HELP του SIMULINK για την χρήση των υποσυστημάτων. CRC 32 CRC P(x) #Bits Χρήση x 32 +x 26 +x 23 +x 22 +x 16 +x 12 +x 11 +x 10 +x 8 +x 7 +x 5 +x 4 +x 2 +x+1 32 Ethernet 802.3 CRC 16 x 16 +x 15 +x 2 +1 24 ISDN CRC CCIT x 16 +x 12 +x 5 +1 16 X.25 (HDLC) x 8 +x 2 +x+1 8 ATM (Header)
5. Θεωρήστε μετάδοση με λάθη. Έστω Ε μηδενικό διάνυσμα με αριθμό bit ίσο με αυτό του τελικού πλαισίου μετάδοσης δηλ. Ε = [0 0 0...0 0 0] με μήκος = 2 n Μ+FCS. Εάν οποιαδήποτε θέση στο E γίνει 1 και πραγματοποιηθεί η πράξη Ε XOR T, όπου Τ το τελικό πλαίσιο μετάδοσης, τότε σε αυτές τις θέσεις εισάγεται τεχνητό λάθος. Με αυτό τον τρόπο πετυχαίνουμε προσομοίωση με λάθη μετάδοσης. 6. Στις διατάξεις του ερωτήματος 4, εισάγετε κατάλληλα τεχνητά λάθη (και λάθη καταιγισμού burst errors) ώστε να εξετάσετε και να επαληθεύεστε τα παρακάτω χαρακτηριστικά της κωδικοποίησης CRC. Κωδικοποίηση CRC με διαιρέτη P(x) μήκους Ν bit μπορεί να ανιχνεύσει: όλα τα λάθη του ενός bit όλα τα λάθη διπλών bit εφόσον έχει τουλάχιστον 3 άσσους οποιοδήποτε περιττό αριθμών σε λάθη εφόσον το P(x) περιέχει τον όρο Χ+1 όλα τα λάθη καταιγισμού μήκους < Ν (δηλ. μήκος της FCS) τα περισσότερα από τα λάθη καταιγισμού μήκους Ν ΣΗΜ: Τα καταιγιστικά λάθη ορίζονται ως εξής: Ένα καταιγιστικό λάθος αρχίζει από λανθασμένο bit και τελειώνει σε λανθασμένο bit. Τα ενδιάμεσα bit μπορεί να έχουν λάθη αλλά μπορεί και να μην έχουν. Ωστόσο το μήκος του καταιγιστικού λάθους συμπεριλαμβάνει όλα τα bit. Ομάδες καταιγιστικών λαθών διαχωρίζονται τουλάχιστον από L bits όπου L το μήκος του καταιγιστικού λάθους κάθε φορά (δηλ. πρέπει να παρεμβάλλονται L σωστά bit στο ενδιάμεσο). Το παρακάτω σχήμα δείχνει ένα παράδειγμα καταιγιστικών λαθών.