Διάλεξη 6 (γ μέρος): Λοιπόν, συνεχίζουμε με τα χαρακτηριστικά του IP έκδοση 6. Καταρχήν, ποιες είναι οι νέες νεατότητες που έχουμε. Οι νέες νεατότητες είναι η βασική μεγάλη αλλαγή, έτσι, αφορά τι? Το μέγεθος της διεύθυνσης. Η διεύθυνση είναι αντί για 32-bit στην έκδοση 4, τώρα είναι 128-bit. Η μορφή της επικεφαλίδας είναι εντελώς διαφορετική. Υπάρχουν επικεφαλίδες επέκτασης, οι οποίες περιέχουν ξεχωριστές πληροφορίες, όπως θα δούμε. Υποστηρίζονται πολύ μέσα. Με βάση μια επικεφαλίδα ροή σε ένα flow label που υπάρχει στην επικεφαλίδα, μπορούν να αποστηριχτούν διαφορετικές ροές. Και φυσικά είναι πολύ πιο ανοιχτό πρωτόκολλο σε νέες επεκτάσεις. Δηλαδή μπορούν να γίνουν καινούργιες επικεφαλίδες, οι οποίες να υποστηρίζουν μελλοντικά άλλες εφαρμογές. Τώρα, πώς γίνεται στο MTU. Το segmentation και η πανεσταναμολόγηση διαφέρει αρκετά στην έκδοση 6 από την έκδοση 4. Γιατί, θυμάστε ότι γίνεται αυτό. Στην έκδοση 4, ο κάθε router αποφασίζει εάν θα τεμαχεί σε ένα πακέτο ή όχι, σε μικρότερο ή όχι, ένα πολύ μεγάλο για αυτό το δίκτυο ή όχι. Στην έκδοση 6, αυτό μπορεί να το αποφασίσει ο ίδιος ο υπολογιστής που αρχικά στέλνει το πακέτο. Και μπορεί να επιλέξει το μέγεθος MTU και οι routers, οι οποίοι θα είναι IP έκδοση 6, δεν θα κατακεμαρτήσουν άλλο το πακέτο. Αλλά πώς θα γίνει αυτό. Για να γίνει πρώτα αυτό, πρέπει πρώτα να αναγνωριστεί το MTU όλης της διαδρομής. Δηλαδή, να ξέρουμε από την αρχή μέχρι τον τελικό προορισμό και τους ενδιάμεσους routers από το δίκτυο που περνάει, ποιο είναι το ελάχιστο μέγεθος πακέτου, το maximum transfer unit. Αυτό λέγεται ανακάλυψη διαδρομής MTU και στέλνει αρχικά δηλαδή μια σειρά στον προορισμό για να δει αυτά χωρίς φάλματα. Εάν αυτά χωρίς φάλματα, τότε αυτό είναι το MTU. Μόλις ένα data γραμμή είναι αρκετά μεγάλο για να περάσει χωρίς τεμαχισμό επιπλέον, τότε επιλέγεται αυτό το μέγεθος ως MTU. Δηλαδή, η σημαντική διαφορά σε σχέση με την έκδοση 6 είναι ότι πλέον ο αποστολέας αποφασίζει το ελάχιστο μέγεθος πακέτου. Πώς ανακαλύπτοντας το ελάχιστο μέγεθος πακέτου της διαδρομής. Δηλαδή, μπορούμε να έχουμε δύο μέρη, δηλαδή βλέπετε το κομμάτι που δεν θέλουμε να τεμαχιστεί και το κομμάτι που θέλουμε να τεμαχιστεί. Δηλαδή, αυτό το κομμάτι θα μείνει έτσι όπως είναι, στο άλλο κομμάτι θα έχουμε fragment hinder 1x2 κτλ. θα χωριστεί σε διαφορετικά μέρη σε τρία κομμάτια. Το π1x2x3, δηλαδή αυτό εδώ θα σπάσει σε αυτά και θα μπει και μια μπκεφαλίδα ώστε να ξέρουμε ποιο κομμάτι βρίσκεται σε ποιο πακέτο. Τώρα, για ποιο λόγο έχω μπουκλαπλέ σε μπκεφαλίδα στην εκδοσία 6, κάτι που δεν είχα στην εκδοσία 4, έτσι. Δύο είναι οι βασικοί λόγοι, οικονομία και επεκτασίμοτα, έτσι. Οικονομία, δηλαδή η λειτουργικότητα των διάφορων υπηρεσιών πάει σε χωριστές μπκεφαλίδες έτσι ώστε να εξοικονομεί χώρο. Άρα, μικρότερα data grams στέλνουν λιγότερο χώρο και χρόνο για τη μετάδοσή τους. Και προφανώς η μίωση του μέγεθος του data gram αφορά και μίωση του εύρου ζώνης που χρειάζεται για τη μετάδοση. Και το άλλο είναι η επεκτασίμοτα, δηλαδή υπάρχει εδώ η πρόβλεψη ότι μπορεί να χρειαστώ νέες επικεφαλίδες μελλοντικά, έτσι, για νέες εφαρμογές. Με αυτόν τον τρόπο, υπάρχουν στους επικεφαλίδες παραμένουν αμετάβλητες και μπορεί να οριστούν επόμενες επικεφαλίδες. Όπως το βλέπουμε μέσα στο πακέτο, στην επικεφαλίδα, στη standard επικεφαλίδα της IP έκδοση 6, υπάρχει ένα πεδίο που λέγεται next header, δηλαδή επόμενη επικεφαλίδα. Σε αυτή την επόμενη επικεφαλίδα μπορεί να βάλουμε οτιδήποτε. Δηλαδή, οποιαδήποτε καινούργια επικεφαλίδα θελήσουμε να χρησιμοποιήσουμε μελλοντικά. Και για να δούμε λίγο τη δομή του της επικεφαλίδας, δηλαδή έχω εδώ αυτό που βλέπετε λέει mandatory IP version 6 header. Δηλαδή υποχρωτική, υπάρχει μια ελάχιστη υποχρωτική επικεφαλίδα, που είναι γύρω στα 40 bytes. Από εκεί και πέρα μπορεί να υπάρχει μια επικεφαλίδα που λέγεται hop by hop options header. Δηλαδή, επικεφαλίδα τι, επικεφαλίδα που δίνει τι πρέπει να γίνει σε κάθε router, πώς θα γίνει σε κάθε router, τι επιλογές μπορεί να υπάρκουν. Υπάρχει το routing header για την ανακάλυψη. Δηλαδή, εάν θέλω να καταγράψω ακριβώς και να του πω ακριβώς από ποιους routers θα περάσεις, δηλαδή επικεφαλίδα δρομολόγησης, να καταγράψω όλη τη διαδρομή. Υπάρχει το fragment header, δηλαδή το πώς θα γίνει ο κατακαρματισμός σε αυτά τα δεδομένα, σε αυτό το πακέτο, το destination options header, δηλαδή τι επιλογές μπορείς να τρέξεις όταν φτάσεις τελικά στον προορισμό, γιατί οι επιλογές μόνο υπάρχουν. Και από εκεί και κάτω, όπως βλέπετε, υπάρχουν τα γνωστά μας, δηλαδή θα υπάρχει το tcp header και φυσικά εδώ το πακέτο της εφαρμογής. Εδώ να πω ότι αλλάζει μόνο το IP, το tcp παραμένει το ίδιο. Δεν υπάρχει έκδοση 6 tcp, το tcp παραμένει το ίδιο με την ίδια λειτουργία. Και αν θέλουμε να δούμε λίγο την υποχρωτική επικεφαλήδα, δηλαδή έκδοση, προφανώς έξι, το flow label έτσι η κεφαλήδα ροείς, κάτι που είναι καινούργιο, δηλαδή με αυτόν τον τρόπο μπορώ να ξεχωρίσω διαφορετικές ροές που πάνε ακόμα και στον ίδιο προορισμό, δηλαδή μία ροή μπορεί να είναι ας πούμε βίντεο, μία άλλη ροή μπορεί να είναι απλά ένα mail. Η μία ροή πρέπει να έχει μεγαλύτερη ποτεραιότητα από την άλλη. Για αυτόν τον λόγο υπάρχει αυτό το label. Υπάρχει το payload length, δηλαδή το μήκος του οφέλη μου φορτίου, πόσο θα είναι. Η επόμενη επικεφαλήδα, το hop limit, που είναι στην ουσία το αντίσχυτο με το time to live που είχαμε δει στην έκδοση 4, δηλαδή μέχρι πόσους αναπηδήσεις μπορείς να κάνεις, ποιο είναι το μέγιστο όριο. Και φυσικά η διεύθυνση, όπως ακριβώς στην έκδοση 4, η διεύθυνση της πηγής και η διεύθυνση του προορισμού, μόνο που σε αυτή την περίπτωση είναι 128 bits η διεύθυνσης. Δηλαδή είπαμε ότι τα βασικά είναι η ετικέτα ροής, την οποία επιτρέπει στην ουσία, στην κίνησή μου να διαχωριστεί σε διάφορα αυτά που λέμε traffic class, σε κλάσεις κίνησης, το μήκος οφέλη μου φορτίου που είναι ακριβώς το ίδιο όπως ήταν και στην έκδοση 6 και φυσικά το πεδίο της επόμενης επικεφαλήδας, το next header. Τώρα, όσον αφορά την ετικέτα ροής, το flow label, αυτή μπορεί να χρειαστεί ειδικό χειρισμό σε κάθε router, άρα προσέξτε τώρα, μια ροή προσδιορίζεται από τρία πράγματα, το source address, destination address, συν την ετικέτα ροής, κάτι το οποίο δεν υπάρχει φυσικά στην έκδοση 4. Και στην έκδοση 4 αυτό προσπαθούσαμε να το κάνουμε με κάποιους άλλους τεχνητούς τρόπους, παραβλέποντας, αλλά να δώσουν κάποια παιδεία στην επακτήπη κεφαλίδα, να δημιουργηθούν διαφορετικές ροές. Και ο δρομολογητής, ο οποίος δρομολογητής φυσικά πρέπει να είναι IPv6 για να δουλέψει με αυτά, αντιμετωπίζει όλα αυτή τη ροή με έναν εντελώς διαφορετικό τρόπο. Μπορεί να δώσει διαφορετική προτεραιότητα ανάλογα με το περιεχόμενα κτλ. Και μπορεί να υπάρχουν και διαφορετικές απαιτήσεις σχετικά με την επεξεργασία του σήματος αυτής της ροής. Άρα λοιπόν η ροή είναι κάτι πολύ διαφορετικό και πολύ καινούργιο που βλέπουμε σε αυτή την έκδοση. Τώρα, ένα άλλο πολύ σημαντικό χαρακτηριστικό του IP έκδοση 6 είναι τι, είναι η διευθυσιοδότηση. Είπαμε ότι έχουμε διευθύσεις των 128 bits. Θυμάστε ότι στην έκδοση 4 είχα δύο επίπεδα ιεραρχίας, host και network. Εδώ τώρα μπορεί να έχω πολλοεπίπεδη δομή. Μπορεί να έχω internet service provider, εταιρεία, ιστοσελίδα κτλ. Μπορεί να έχω μια πολύ μεγαλύτερη ιεραρχία. Η κάθε διεύθυνση ανατίθεται σε μία διαπαφή. Μία διαπαφή, κάθε διαπαφή. Το άλλο καινούργιο χαρακτηριστικό είναι ότι μπορεί να έχει πολλές διαφορετικές διευθύνσεις. Και εδώ ορίζω τριών ειδών διευθύνσεις. Δηλαδή διευθύνσεις, θα τις λέγαμε μόνο εκπομπής, unicast, που είναι σε έναν υπολογιστή. Ή στις διεπαφές του υπολογιστή. Η multicast, δηλαδή πολυεκπομπής, πολλαπλής εκπομπής, που μπορώ να στείλω το ίδιο πακέτο σε πολλούς υπολογιστές, έτσι διεπαφές πολλών υπολογιστών. Και καθολικής εκπομπής, unicast, που είναι κάτι καινούργιο, που μπορεί να στείλω σε όλες τις διεπαφές του ίδιου υπολογιστής, μπορεί να σημαίνει το unicast ότι σε μια σειρά από συσκευών, που μοιράζονται κάποιο κοινό πρόθεμα, κάποια κοινή διεύθυνση. Αυτό είναι κάτι καινούργιο που δεν υπήρχε. Οι unicast διευθύνσεις δεν υπήρχαν στην έκδοση 4. Τώρα, πώς μοιάζουν αυτές οι διευθύνσεις. Αν τα γράφαμε με δεκαδικά, θα γράφαμε κάτι τέτοιο. Όπως δηλαδή στα 32 bit θα γράφαμε κάτι τέτοιο. Για αυτόν τον λόγο πώς καταλαβαίνετε ότι δεν είναι πρακτικό να το γράψουμε με δεκαδικά. Για αυτόν τον λόγο, οι διευθύνσεις στην έκδοση 6, γράφονται σε μορφή 16 αδική. Δηλαδή ο παραπάνω αριθμός σε μορφή 16 αδική γράφεται έτσι. Όχι ότι αυτό είναι μικρό. Απλά, υπάρχουν κάποιες απλούστευσεις. Δηλαδή, αν έχω μια δεύτερη διεύθυνση που έχει πολλά μηδενικά, μπορώ απλά να βάλω δύο άνοικατοτελείες. Αυτό σημαίνει αυτό. Να δούμε κι άλλα παραδείγματα. Για παράδειγμα, αυτό εδώ είναι αυτό, έτσι. Αυτό εδώ, είπαμε, γράφεται έτσι. Μια παλιά διεύθυνση, γιατί αυτομάτως και όλες οι παλιές διευθύνσεις, 32-bit, μπορούν να μετατρέπουν σε 128-bit. Πώς θα γίνει αυτή η μετατροπή, θεωρώντας όλα τα προηγούμενα μηδέν και γράφοντάς το με αυτή τη μορφή, που τελικά είναι αυτή εδώ η μορφή. Δηλαδή, δύο τελείες μπρος. Δηλαδή, αυτή δεν είναι η διεύθυνση έκδοσης 4, είναι η διεύθυνση έκδοση 6, γιατί έχει τις άνοικατοτελείες. Και μάλιστα, η διεύθυνση, το localhost, που είδαμε ότι στο IP έκδοση 4 είναι 127.0.1, στο IP έκδοση 6 είναι άνοικατο 2.1. Αυτό σημαίνει localhost. Δηλαδή, αν κάνετε ping σε αυτό, είναι το αντίστοιχο με το ping στο 127.0.1. Πάλι θα σας απαντήσει. Ναι, για τις διευθύνσεις είπαμε ότι έχουμε τη Unicast, έχουμε την Unicast που είναι διαφορετική, δηλαδή παράδοση σε κάθε διεπαφή και στο κοντινότερο, και τη Multicast, έτσι, πολλαπλής εκπομπής, παράδοση σε όλες τις διεπαφές. Τώρα, η μορφή των διευθύνσεων. Οι παγκόσμιες διευθύνσεις αποτελούνται από, έχουν ένα πρόθεμα, το global routing prefix, 48-bit, 16-bit είναι το subnet id και 64-bit από εκεί πέρα είναι το interface id. Δηλαδή, αυτή είναι μια παγκόσμια Unicast διεύθυνση, η οποία είναι και μοναδική στον κόσμο. Δηλαδή, αυτή είναι ο υπολογιστής σας, όταν συνδέεται στο internet και έχει IP έκδοση 6, έχει μια τέτοια παγκόσμια μοναδική διεύθυνση. Αυτή είναι η μορφή των παγκόσμιων διευθύνσεων. Θα δείτε στους υπολογιστές σας ότι έχουμε και τις λεγόμενες link local διευθύνσεις, διευθύνσεις τοπικής σύνδεσης θα λέγαμε. Τι είναι αυτές οι διευθύνσεις, είναι όλες αυτές που ξεκινάν από αυτό εδώ το πρόθεμα, δηλαδή το Fy80 και από εκεί πέρα έχουν το interface ID πάλι 64 bit και είναι διευθύνσεις όπως το λέγεται και ορος τοπικής σύνδεσης, δηλαδή οι διευθύνσεις αυτές είναι μόνο για επικοινωνία μεταξύ των κόμβων τοπικά μέσα στο ίδιο δίκτυο και δεν χρησιμοποιούνται γιατί. Δρομολογούνται από τους ρούτερ, δηλαδή ο ρούτερ δεν προωθεί τέτοιες διευθύνσεις πέρα από τη ζεύξη. Είναι κάτι δηλαδή θα λέγαμε ότι είναι και αντίστοιχο με τις ιδιωτικές IP διευθύνσεις που είδαμε στην έκδοση 4. Όχι ακριβώς το ίδιο αλλά κάπως αντίστοιχο. Τώρα, θα έχετε παρατηρήσει ότι στα Windows 7, 8, τα τελευταία λειτουργικά, στα Vista υπάρχουν και το IP4 και το IP6. Ποιες αρχιτεκτονικές χρησιμοποιούνται για αυτά? Πολύ συντομία, δηλαδή τώρα οι εταιρείες που κάνουν λογισμικό και που κάνουν λειτουργικά χρησιμοποιούνται δύο αρχιτεκτονικές. Είτε dual IP, δηλαδή είτε θα έχω dual IP, δηλαδή έχω άλλο επίπεδο εφαρμογής στο ίδιο, επίπεδο μεταφοράς στο ίδιο. Και από εκεί και πέρα ξεχωρίζω μόνο στην έκδοση 4 και στην έκδοση 6. Ή θα έχω dual stack, δηλαδή έχω TCP ξεχωριστά για τη μια εφαρμογή ή TCP ξεχωριστά για την άλλη έκδοση. Έχω αυτήν εδώ την αρχιτεκτονική. Πάντα το application layer και το netcode interface λέει το ίδιο. Αυτό απλά ενημερωτικά για να ξέρουμε τελικά μέσα στα λειτουργικά πώς χρησιμοποιούν, γιατί χρησιμοποιούν και τις δύο εκδόσεις, πώς χρησιμοποιούν τη μία και πώς χρησιμοποιούν την άλλη. Και σε αυτές τις περιπτώσεις όταν θέλουμε να στείλουμε, γιατί ακριβώς όλοι οι routers δεν είναι IP version 6 enabled, δηλαδή δεν είναι σίγουρο ότι μπορούμε να στείλουμε μήνυμα παντού με την έκδοση 6. Άρα λοιπόν τι γίνεται σε αυτή την περίπτωση. Μέσα σε ένα κανονικό IP έκδοση 4 πακέτο ενθυλακώνεται, γίνεται tunnel πάνω από 4, ένα κανονικό IP έκδοση 6 πακέτο. Κατεβαίνει όλο αυτό δηλαδή στο πεδίο του data, εδώ υπάρχουν τα δεδομένα που θα είναι τα δεδομένα των αυτοίρων πρωτοκόλων του TCP ας πούμε της εφαρμογής και τα λοιπά και στέλνεται όλο μαζί αυτό σαν πακέτο 4. Η ταχνική αυτή λέγεται tunnel πάνω από έκδοση 4 και τώρα μπορούμε να διακρίνουμε πολλές και διαφορετικές περιπτώσεις. Αν όλη η υποδομή μου είναι μόνο IP4, αναγκαστικά μόνο με tunnel. Από εδώ και πέρα χρησιμοποιώ μόνο αυτή την τρακτική για να φτάσω από τον ένα κόμπο στον άλλο. Εάν υπάρχει ένα κομμάτι υποδομής που είναι tunnel και από εκεί πέρα υπάρχει ένα άλλο κομμάτι το οποίο είναι μόνο IP6, μπορώ να κάνω για αυτό το κομμάτι tunnel και το υπόλοιπο να πάει κανονικά σαν IP version 6 tunnel. Δηλαδή μπορεί να υπάρχουν λογικές host του router και host του host ανάλογα με το που θα γίνει το tunnel. Αυτό το παράδειγμα είναι από Vista αλλά είναι περίπου το ίδιο και στα 7 και στα 8. Αν δώσουμε IP config θα δούμε IP version 6 address ή διεύθυνση έκδοση 6, αυτό είναι global address από 2001 που ξεκινάει. Η link local διεύθυνση. Και τα λοιπακές υπάρχει φυσικά με τη διεύθυνση την 4. Ή αν δώσετε μία άλλη εντολή, δηλαδή αν δώσετε net show interface IP 6 show addresses που δουλεύει και στα 7 και στα 8, τώρα για τα XP δεν είμαι σίγουρος αν δουλεύει αυτό γιατί και τα XP έχουν, θα δείτε ας πούμε για το κάθε interface, σου λέει το interface, σου λέει ξέρω εγώ τη link local διεύθυνση και τα λοιπα. Σου δείχνει εδώ τη διεύθυνση. Αυτό εδώ το 12, βλέπετε υπάρχει το τέτοιο του 100 και το 12, αυτό σημαίνει zone ID, δηλαδή χωρίζει σε ζώνες, εδώ έχει 13 ξέρω εγώ. Χωρίζει σε ζώνες τα κάθε link local interface και το κάθε να έχει τη δική του zone ID. Εντάξει, τέλος πάντων αυτά είναι πολύ λεπτομέρειες, αλλά μπορείτε να το δοκιμάσετε και αυτό, δεν ξέρω αν θέλετε να το κάνουμε και εδώ, να δοκιμάσετε να δώσετε αυτήν την εντολή για να δείτε όλες τις διευθύνσεις έκδοσης 6 που έχει ο υπολογιστής σας. Τώρα, να δούμε λίγο τις επικεφαλίδες επέκτασης, δηλαδή κραχήνη hop by hop, δηλαδή είναι οι επιλογές που πρέπει να εξετάζονται σε κάθε δρομολογητή που περνάει το πακέτο μου. Εντάξει, αν είναι άγνωστο, φυσικά απόρριψη, πώς θα γίνει, αν είναι άγνωστος προωρισμός, θα γίνει απόρριψη ή θα γίνει, πώς θα γίνει ο χειροχειρισμός προωθήσεις, θα έχει επίσης πάλι το πεδίο της επόμενης επικεφαλίδας, μπορεί μετά από αυτό να υπάρχει επόμενη επικεφαλίδα, το μήκος αυτής της επικεφαλίδας και από και πέρα οι επιλογές. Δηλαδή, μπορεί να είναι pad 1, που σημαίνει ότι βάλε 1 επιπλέον byte ή pad 9, βάλε 9 επιπλέον byte, ώστε να το κάνεις στρογγυλό αριθμό. Εάν υπάρχει αυτό που λέμε το jumbo payload, το οποίο ορίζει ένα τεράστιο φέλημα φορτίο, νομίζω είναι στάξιο 1 GB, αν υπάρχει αυτό εδώ, και ένα άλλο πεδίο που λέγεται router alert, που στην περίπτωση που θέλω να ειδοποιήσω κάτι για κάτι τον δρομολογητή. Άλλη επικεφαλίδα είναι επικεφαλίδα κατακερματισμού, ο κατακερματισμός είπαμε ότι επιτρέπεται μόνο στη πηγή, δηλαδή έτσι ώστε να μην γίνει ενδιάμεσος κατακερματισμός από δρομολογητές, αλλά λοιπόν πρέπει να έχω ανακαλύψει τη μικρότερη MTU, αλλιώς ο περιορισμός θα γίνει αυτόματα σε μέγεθος 1280 bytes, αυτό είναι το μικρότερο μέγεθος και αυτή η κεφαλίδα θα περιλαμβάνει ο offset, δηλαδή ποιο κομμάτι του τμήματος είναι, υπάρχει ένα αντίστοιχο more fragment bits που προφανώς αν είναι 1 σημαίνει ότι ακολουθεί και άλλο κομμάτι ή αν είναι 0 σημαίνει δεν ακολουθεί και άλλο κομμάτι και φυσικά ένας αναγνωριστής που να είναι ο αριθμός του fragment, έτσι ο αριθμός ποιο κομμάτι στέλνουμε. Η επικεφαλίδα δρομολόγησης που επίσης είναι κάτι καινούριο πάλι θα περιλαμβάνει την επόμενη επικεφαλίδα, το μήκος της επικεφαλίδας αυτής, τον τύπο της δρομολόγησης, πώς θέλουμε να γίνει η δρομολόγηση, τις διαδρομές δρομολόγησης που απομένουν και στην περίπτωση που ορίσω τύπο δρομολόγησης 0 τότε έχω από κάτω και μια λίστα με διευθύνσεις, που είναι η αρχική διεύθυνση είναι πρώτη στη λίστα, οι τρέχουσα διεύθυνσες είναι επόμενες στη λίστα και τελικά έχω όλες τις επόμενες μέχρι την τελική διεύθυνση προορισμού, δηλαδή μπορώ να ορίσω ακριβώς από πόσους ρούτερς και ποιους ρούτερς θα περάσει, κάτι το οποίο φυσικά δεν υπάρχει στην έκδοση 4 και φυσικά υπάρχει και επικεφαλήδα επιλογών προορισμού όπου έχω διάφορες προοριστικές πληροφορίες για τον κόμβο προορισμού και έχω, η μορφή είναι περίπου η ίδια με την hop by hop έτσι επικεφαλήδα, τώρα λοιπόν τελειώσαμε την εκδοσία 6 να δούμε κάποια άλλα πράγματα που σχετίζονται με το IP και θα τελειώσουμε αυτό το κεφάλαιο και θα ξεκινήσουμε το TCP, καταρχήν φαντάζουμε ότι θα έχουμε ακούσει τον όρο VPN δηλαδή εικονικά ιδιωτικά δίκτυα έχουμε δει ότι το ίδιο το IP από μόνο του δεν υποστηρίζει καμία κρυπτογράφηση άρα και καμία ασφάλεια για αυτό το λόγο το να κάνουμε ένα μη ασφαλές δίκτυο ασφαλές χρειάζεται και χρήση κρυπτογράφησης και ειδικών πρωτοκόλων, πολλές φορές πολύ προπριέταρες λύσεις μπορεί να είναι προβληματικές μπορεί να μη ισχύουν για όλα ή να δημιουργούν άλλα προβλήματα άρα λοιπόν χρειάστηκε για αυτό το λόγο δημιουργήθηκε η ανάγκη για ένα IP το οποίο να παρέχει ασφάλεια, το IP αυτό είναι το λεγόμενο IP Sec δηλαδή είναι ένα πρωτόκολλο το οποίο κρυπτογραφεί τα δεδομένα περνάει πάνω από το κανονικό IP και με αυτό μπορώ να κάνω, δηλαδή μπορώ να γίνουν παράδειγμα ως χάρη διάφορες εφαρμογές μπορώ να έχω ασφάλεια ηλεκτρονικού εμπορίου μπορώ να έχω απομακρυσμένη πρόσβαση πάλι μέσω δικτύου μπορώ να έχω συνδεσιμότητα διαφορετικών υποκαταστημάτων μιας εταιρείας μπορώ να έχω συνδεσιμότητα intranet και extranet πάλι σε ένα εταιρικό δίκτυο. Τι κάνει δηλαδή αυτό δηλαδή παίρνει το κομμάτι των δεδομένων το κρυπτογραφεί και το βάζει κανονικά μέσα στο IP δηλαδή από ένα σημείο και μετά τα δεδομένα μου είναι κρυπτογραφημένα και αποκρυπτογραφούνται στο άλλο άκρο. Δηλαδή για να το δούμε λίγο καλύτερα εδώ ας πούμε έχω ας πούμε ότι δεν έχω εδώ έχω κανονικά το IP και το IP payload το κανονικό και εδώ που θέλω να έχω ασφάλεια δηλαδή πάνω από το δημόσιο δικτύο έχω τι κάνω κρυπτογράφηση και μετά το IP header έχω το IP secure header και εδώ έχω κρυπτογραφημένα δεδομένα. Δηλαδή τα υπόλοιπα δεδομένα εδώ κρυπτογραφούνται άρα δηλαδή εδώ έχω ασφάλεια εδώ αυτά δεν μπορούν είναι κρυπτογραφημένα δεν μπορούν να υποκλαπούν. Τώρα ποια είναι τα οφέλη προφανώς παρέχει ισχυρία ασφάλεια για την εξωτερική κινήσει είναι αρκετά ανθεκτικό στην παράκαμψη δηλαδή αν κάποιος προσπαθήσει να πάρει αυτά τα πακέτα είναι αρκετά δύσκολο να τα αποκρυπτογραφήσει βρίσκεται κάτω από το επίπεδο μεταφοράς. Άρα λοιπόν αυτό σημαίνει ότι υπάρχει διαφάνεια για τις εφαρμογές δηλαδή η εφαρμογή δεν ξέρει τα δεδομένα κρυπτογραφημένα ή όχι και φυσικά μπορεί να διαφανεί και στους τελικούς χρήστες. Άρα παρέχει ασφάλεια για μεμονωμένους χρήστες εφόσον χρειάζεται. Κάτι που ξαναλέω ότι το ίντερνετ γενικά δεν παρέχει ούτε έχει κάποιο μηχανισμό ασφάλειας. Δηλαδή για αυτόν τον λόγο δημιουργήθηκαν αυτό το πρωτόκολλο. Τώρα τι λειτουργίες κάνει, υπάρχει μια επικεφαλίδα για authentication, υπάρχει η λειτουργία της ενθυλάγκωσης του οφέλη μου φορτίου, δηλαδή με την κρυπτογραφημένου, υπάρχει μια βασική λειτουργία ανταλλαγής και στα VPN χρειάζεται μια συνδυασμένη λειτουργία. Τώρα δεν θα κάνουμε περισσότερα απλά θέλω να ξέρετε τις διαφορετικές επιλογές που έχουμε πάνω από IP ακόμα και για την ασφάλεια. Οπότε εδώ τελειώσαμε και αυτή την ενότητα με το IP, οπότε θα συνεχίσουμε στην επόμενη. Θα συνεχίσουμε στην επόμενη ενότητα που έχει να κάνει με το επίπεδο μεταφοράς, δηλαδή το επίπεδο το οποίο παίρνει υπηρεσίες από το επίπεδο δικτύου και δίνει υπηρεσίες στο επίπεδο εφαρμογών. Γιατί χρειάζεται αυτό, δηλαδή για να κάνει τι, για να κάνει τον έλεγχο σύνδεσης, για να κάνει τον έλεγχο ροής, για να προσθέσει τι, αξιοπιστία πάνω από ένα μη αξιοπιστό δίκτυο. Για να λύσει το θέμα πως είναι δυνατόν διαφορετικές εφαρμογές να συνδέονται ας πούμε πάνω από το ιδιοδικτύο, δηλαδή το IP μου προσφέρει μόνο απλά τις διευθύνσεις. Δεν θα πρέπει να υπάρχει κάποιο άλλο αντίστοιχη ανώτερο επίπεδο διευθυσιοδότηση για να μπορούν να δουλέψουν διαφορετικές εφαρμογές ταυτόχρονα πάνω από το δίκτυο. Πώς θα γίνει. Και φυσικά μπορεί να ασχοληθεί και με ζητήματα όπως ποιότητα υπηρεσίας αλλά και έλεγχο συμφόρησης του δικτύου. Δηλαδή έχουμε δύο σημαντικά πρωτόκολλα μεταφοράς το TCP και το UTP. Το TCP δημιουργεί ένα αξιόπιστο ρεύμα μεταφοράς. Δηλαδή όταν λέμε αξιόπιστο. Γιατί το λέμε αξιόπιστο. Κάτω. Ξέρουμε ότι η λειτουργία του IP γενικά θεωρείται μη αξιόπιστη. Αναξιόπιστη. Γιατί το λέμε αυτό. Γιατί το IP δεν κάνει κανένα έλεγχο ροής και κανέναν έγκρος φαλμάτων. Όταν στέλνω ένα IP πακέτο δεν ξέρω τίποτα για την τύχη του. Δεν γνωρίζω κάτι. Δεν στέλνεται κάποια επιβεβαίωση ότι έφτασε κανονικά το πακέτο. Άρα γενικά το IP είναι πρωτόκολλο μη αξιόπιστο. Αναξιόπιστο. Θέλω δηλαδή, για να το κάνω αυτό αξιόπιστο, θέλω από πάνω ένα επίπεδο μεταφοράς που να κάνει αυτά τα πράγματα. Να δέχεται επιβεβαίωση για κάθε πακέτο που στέλνει, να ελέγχει τη ροή και φυσικά να ελέγχει και τα σφάλματα. Να δει αν φτάνουν πακέτα με σφάλματα και τα λοιπά. Υπάρχει και άλλη επιλογή στο επίπεδο μεταφοράς που είναι το UTP. Το UTP παρέχει και αυτό αναξιόπιστη υπηρεσία μεταφοράς. Δηλαδή, στέλνει το πακέτο χωρίς να το ελέγξει και χωρίς να πάρει καμία επιβεβαίωση. Θα μου πείτε γιατί να το χρησιμοποιήσουμε αυτό. Έχει και αυτή την εφαρμογή του όπως θα δούμε. Τώρα, γιατί χρειαζόμαστε όμως πρωτόκολλα μεταφοράς. Δηλαδή, προσέξτε λέει για end to end. Δηλαδή, πρωτόκολλα των οποίων οι λειτουργίες τους εκτελούνται από άκρο σε άκρο. Δηλαδή, από τον έναν υπολογιστή στον άλλον και όχι κάπου ενδιάμεσα. Δηλαδή, μέχρι τώρα είδαμε πρωτόκολλα που εκτελούνται και ενδιάμεσα, όπως το IP. Το IP είναι υλοποιημένο και στους rooters και στους κόμμους του δικτύου. Το TCP και το UTP και όλα τα άλλα τα πρωτόκολλα υλοποιούνται μόνο στα τελικά συστήματα. Απ' τον έναν προσμό στον άλλον. Γιατί, είπαμε, το IP δεν μπορεί να ξεχωρίσει σε πολλά διαφορετικά προγράμματα εφαρμογών που εκτελούνται στον ίδιο υπολογιστή. Πώς θα ξεχωρίσει, δηλαδή, ας πούμε ότι θέλω να κατεβάσω ταυτόχρονα μια σελίδα, αλλά και ταυτόχρονα θέλω να στείλω mail σε έναν υπολογιστή, πώς θα ξεχωρίσει ποιο πακέτο θα πάει πού. Πάλι και τα δύο πακέτα θα έχουν την ίδια διεύθεση πηγής, την ίδια IP διεύθεση πηγής. Άρα πώς θα ξεχωρίσω ποιο θα πάει πού. Αν διευθύνω σε έναν υπολογιστή, για αυτό τον λόγο χρειάζεται ένα ακόμα επίπεδο διεύθυνσης, διεθυσιοδότης, το οποίο το βάζει το TCP, αλλά και το UTP. Θα δούμε πρώτα, εμείς πριν εξετάσουμε το TCP στις λεπτομερίες του, θα δούμε το UTP, το User Data Gram Πρωτόκολλο. Μπορεί να χαρακτησθεί, είναι πρωτόκολλο και αυτό πάλι end to end, από άκρο σε άκρο, ασυνδεσμικό, δηλαδή connectionless, χωρίς προσανατολισμό προσύνδεση. Λέγεται στα αγγλικά ότι είναι message oriented, δηλαδή προσανατολισμένο προς μήνυμα, που σημαίνει ότι μια εφαρμογή που χρησιμοποιεί το UTP, μπορεί να στελείνει αλλά και να λαμβάνει μεμονωμένα μηνύματα. Δηλαδή, για παράδειγμα, ξέρετε τους time servers, τους servers οι οποίοι κρατούν το χρόνο, στέλνεις ένα μήνυμα σε αυτό το server με UTP και σου επιστρέφει τι ώρα είναι. Δεν το έχετε ξανά ακούσει αυτό. Time Servers, υπάρχει και timeout.gr, υπάρχει και στο πανεπιστήμιό μας. Για παράδειγμα, το παραδείγμα όλα είναι ατυχές γιατί δεν το ξέραμε. Η διαχείριση του δικτύου, το πρωτόκολλο SNMP, δηλαδή που στέλνονται σε διάφορους κόγκους του δικτύου, να μου απαντήσει για τη κατάσταση της κίνησης εκείνη τη στιγμή. Και αυτό απαντάει πως με UTP πακέτα. Δηλαδή μικρά μηνύματα, λίγη πληροφορία, η οποία θέλουν να έρθει και να πάει γρήγορα. Είναι πρωτόκολλο βέλητης της προσπάθειας. Δηλαδή προσφέρει αυτό που λέμε best delivery, προσπαθεί να κάνει την καλύτερη δυνατή παράδοση, προσφέρει τυχή αλληλεπίδραση, δηλαδή μπορεί να αλληλεπιδράσει με πολλές άλλες εφαρμογές και φυσικά είναι ανεξάρτητο από το λειτουργικό σύστημα και από τα αναγνωστικά που ακολουθούν από το τοπικό λειτουργικό σύστημα. Όπως και το TCP είναι ανεξάρτητο από το λειτουργικό. Δηλαδή το UTP δεν χρειάζεται να δημιουργήσει μια σύνδεση πριν αποστολή δεδομένων. Μπορεί να ξεκινήσει η αποστολή δεδομένων συνέχεια. Δηλαδή δεν υπάρχει, όπως θα δούμε στο TCP, η διαδικασία του connection establishment, της δημιουργίας της σύνδεσης, ούτε η διαδικασία του connection termination. Έχω πακέτα να στείλω, τα στέλνω κατευθείαν μέσω UTP. Επιτρέπει να καθυστερήσει για ένα μεγάλο χρονικό δεδομένων δεξιτών δύο μεταδόσων. Κάτι, προσέξτε, δεν του επιτρέπει το TCP. Το TCP έχει timeouts, έχει χρονιστές. Δηλαδή αν λήξουν αυτοί, μετά από ένα σμούκι μετά, θεωρείται ότι έχει τερματιστεί η σύνδεση. Πώς σταματάει η σύνδεση. Δεν σταματήσουν να τελάσσουν κάποια πακέτα για να σταματήσει να έχουμε το connection termination. Σταματούν και οι δύο να τελάσσουν πακέτα. Και σταματάει η σύνδεση. Δεν χρησιμοποιεί οποιαδήποτε μηνύματα ελέγχου και έχει εξαιλεκτικά μικρό overhead. Το UTP header είναι πολύ μικρότερο από το TCP header. Είναι πολύ μικρότερο. Είπαμε ότι δεν διαιρεί συνδυάζει μηνύματα, η διαβαφή είναι προσανατολισμένη προς μήνυμα. Το UTP setup το πρωτόκολλο για τη διαταίρηση των εδωμανών. Κάθε UTP μήνυμα μπορεί να χωρέσει μόνο σε ένα IP πακέτο. Και το μέγεθος του IP πακέτου είναι το όριο για το μέγεθος του UTP πακέτου. Άρα λοιπόν δεν μπορεί παραπάνω από 64 KB το μέγεθος του UTP πακέτου. Ενώ κάτι που δεν ισχύει στο TCP. Αυτό μπορεί να προκαλέσει μία αποδοτική κίνηση στο δεκτό. Δηλαδή για μικρά μηνύματα θα έχουν μεγάλη αναλογία επικεφαλίδας και δεδομένων. Ενώ για μεγάλα μηνύματα θα είναι πάρα πολύ κατακερματισμένα. Δηλαδή αυτό το γεγονός μπορεί να δημιουργήσει όχι καλή απόδοση στο δίκτυο. Τώρα, κάθε μήνυμα UTP μπορεί να χαθεί, να διπλασιαστεί, να παραδοθεί εκτός σειράς ακολουθίας, να έχει σφάλματα. Το UTP όμως δεν διορθώνει ούτε ανοιχνεύει σφάλματα τα προβλήματα εκπομπής. Δηλαδή θα πρέπει, αν θέλω να χρησιμοποιήσω UTP, όλες αυτές τις διαδικασίες να γίνουν είτε από το επίπεδο της εφαρμογής, είτε από πιο κάτω από το data link επίπεδο. Ή θα πρέπει να κάνει πλέον βήματα για να χρειάζεται τα προβλήματα. Άρα όμως γιατί να χρησιμοποιήσω το UTP πάνω από IP, αφού έχει όλα αυτά τα μειονεκτήματα. Γιατί να χρησιμοποιήσω, γιατί, όπως βλέπετε εδώ με bolt, είναι καταλληλό για εφαρμογές πραγματικού χρόνου. Δηλαδή για μετάδοση φωνής και βίντεο. Γιατί είναι κατάλληλο? Γιατί ακριβώς στέλνει μικρά πακέτα, χωρίς να πάρει acknowledgement, ενώ το TCP ανταλλάσει κάθε φορά επιβεβαιώσεις. Άρα λοιπόν με τα φορά δεδομένου πραγματικού χρόνου πάνω από TCP, καθυστερεί πολύ περισσότερο. Και εδώ τώρα είναι η ερώτηση που έχω να σας κάνω. Μετά από αυτό που ακούσαμε, αν θέλατε να σχεδιάσατε μια εφαρμογή πραγματικού χρόνου, δηλαδή που να στέλνει βίντεο, πώς θα σχεδιάζατε τη σηματοδοσία της εφαρμογής και πώς θα σχεδιάζατε τη μεταφορά δεδομένων της εφαρμογής. Θα ήταν πάνω από TCP ή πάνω από UTP. Τι θα ήταν το καλύτερο, με βάση αυτά που είπαμε. Ναι, αλλά για ποιο πράγμα. Σου είπα δύο πράγματα, αλλά δεν σου είπα δύο πράγματα, έχει μια εφαρμογή. Σηματοδοσία και μεταφορά δεδομένων. Δηλαδή, σηματοδοσία, τι εννοώ, δηλαδή να γίνει το handshake ώστε να ξεκινήσει η αποσολή δεδομένων. Δεν θα το κάνεις αυτό αμέσως. Λοιπόν, σε αυτή την περίπτωση, καταλληλότερο θα ήταν το TCP, για να έχω αξιόπιστη μεταφορά δεδομένων για σηματοδοσία, έτσι, έτσι ώστε γρήγορα να μπω στην εφαρμογή και στη συνέχεια, όταν όμως έχω τη ροή πραγματικών δεδομένων, δηλαδή βίντεο και τα λοιπά ή φωνές, να χρησιμοποιήσω UTP, έτσι, και έτσι γίνεται στη πραγματικότητα. Το καταλάβαμε γιατί. Τώρα, UTP, έτσι, τυχές αλληλεπιδράσεις. Μπορώ να έχω αλληλεπιδράσεις, ένα προς ένα, έτσι, δηλαδή με μία εφαρμογή έττα λάση μήνυμα με μία ακριβώς άλλη εφαρμογή. Ένα προς πολλά, μία εφαρμογή στέλνει μήνυματα σε πολλούς παραλίπτες, πολλά προς ένα, πολλά προς πολλά και τα λοιπά, έτσι. Μπορώ να έχω όλες τις δυνατότητες, όλους τους διασμούς αλληλεπιδράσεων. Τώρα, το UTP υποστηρίζει και το μήνυμα να είναι πολλαπλής διανομής, έτσι, ετσι, multicast, έτσι, ή μπορεί να είναι και broadcast. Και ένα μήνυμα, πάλι, με δεδομένο ότι το δίκτυο από κάτω, το data link δίκτυο υποστηρίζει αυτήν την μετάδοση. Και υποστηρίζει και, είπαμε, υποστηρίζει και broadcast και multicast, ειδικά στα δίκτυα έθναι που το υποστηρίζουν. Αλλά είναι χρήσιμο και για αυτό, είναι χρήσιμο, δηλαδή, και για εφαρμογές multicast, έτσι. Παλαιότερα, έτσι, δεν ξέρω αν γίνεται ακόμα και τώρα, η NASA έστελνε, έλεγε ότι με IP multicast, έστελνε τα βίντεο της τεκτοξεύσης πειράβλων, έτσι, ή δεδομένα, ξέρω εγώ, από διάφορες διαστημικές αποστολές. Και αυτά ήτανε πάνω από, ήτανε βίντεο πάνω από IP multicast, με IP multicast διευθύνσεις, πάνω από UTP, έτσι. Τώρα, ποια είναι η διεύθυνση του UTP? Έτσι, η διεύθυνση του UTP είναι η θήρα UTP, έτσι, το που είναι ανεξάρτητο, είναι ένας αριθμός, δηλαδή, το οποίος ανατίθεται σε κάθε εφαρμογή και είναι ανεξάρτητο, φυσικά, του λειτουργικού συστήματος. Δηλαδή, αυτό σίγουρα παρέχει μια αντισχέμα και στον αριθμό θήρας και των αναγνωδιστικών του λειτουργικού και επιτρέπει η κάθε εφαρμογή να στείλει μία έτηση για να καθοριστεί ένα ζεύγος τελικών σημείων ένα εφαρμογή. Δηλαδή, στην ουσία έχω μία τετράδα. Η κάθε σύνδεση αναγνωρίζεται και στο UTP αλλά και στο TCP από μία τετράδα σημείων. Ποια είναι αυτά τα σημεία? Είναι η διεύθυνση IP δική μου, η θύρα η δική μου, η διεύθυνση IP του άλλου υπολογιστή και η θύρα του άλλου υπολογιστή. Αυτή η τετράδα σημείων είναι που αναγνωρίζει μοναδικά την κάθε σύνδεση. Τώρα, να δούμε λίγο την μορφοποίηση των φορμάτων πακετών. Βασικά, είναι πάρα πολύ απλό. Υπάρχουν μόνο στην ουσία τέσσερα πεδία, δηλαδή η θύρα της πηγής, θύρα προσμού, το μήκος του μηνύματος, ένα checksum, έτσι, άδρες μαλέχου. Αλλά προσέχει αυτό το checksum έχει να κάνει με όχι τα δεδομένα αλλά μόνο την επικεφαλήδα, την UTP επικεφαλήδα, όχι τα αυτό και τα αυτό τα δεδομένα. Δηλαδή αυτό εδώ, source port, destination port, message length και UTP checksum. Εδώ βέβαια, δεν θα πρέπει οι UTP θύρες να συγχαίονται με τις TCP θύρες. Άλλες θύρες πάνω από TCP, άλλες είναι αντίστοιχοι λειτουργέδους αλλά είναι άλλο πράγμα οι TCP θύρες, άλλα πράγμα οι UTP θύρες. Τώρα είπαμε, το άδρες μαλέχου, εντάξει, είναι μία ψέντα. Μπορεί να είναι, είτε ο sender μπορεί να υπολογίσει ένα checksum για την επικεφαλήδα, για αυτό το άδρες μαλέχου, είτε να τα κάνει όλα τα πιν 0 που σημαίνει ότι δεν με ενδιαφέρει ο έλεγχος του αθρίσματος. Ο προορισμός θα επαληθέψει αυτό το checksum μόνο εάν η μορφή αυτή είναι μη μηδενική. Δηλαδή στην περίπτωση που θέλω πολύ γρήγορη ροή, μπορούν όλα αυτά να τεθούν μηδεν, ώστε να μην γίνεται καμία επαλήθευση. Τώρα, πώς μεταδίδεται το UTP, το UTP ενθυλακώνεται πάνω σαν επί πακέτα. Να δούμε πώς ακριβώς το ICMP ας πούμε και το TCP, δηλαδή τι γίνεται, έχω εδώ τα UTP δεδοπένα, η UTP επικεφαλήδα, όλα αυτό κατεβαίνει και μπαίνει πού, στο πεδίο του δεδομένων του IP, η IP επικεφαλήδα και όλα αυτό φυσικά κατεβαίνει και μπαίνει πού, στο από κάτω επίπεδο, που μπορεί να είναι το Ethernet πηχεία, έτσι, και εδώ να έχω το Ethernet header, στο data link επίπεδο. Τώρα, γνωστές εφαρμογές πάνω από UTP είναι, όπως είπαμε, το SNMP, δηλαδή για τη διαχείριση του δικτύου, το DNS που θα το κάνουμε στο επόμενο μάθημα, domain name service, δηλαδή, τι είναι αυτό, η υπηρεσία που μου δίνει, που μετατρέπει στην ουσία, τις IP διευθύνσεις σε κομμάτια, σε strings, τα οποία μπορούν να διαβαστούν από εμάς, δηλαδή, το www.auth.gr, ποια είναι η IP διευθύνση του, είναι αυτή, ξέρω, υπάρχει, δηλαδή, μια βάση δεδομένου που έχει αυτήν την αντίστοιχη, και διάφορα συστήματα κατανευμένων αρχείων, όπως ήταν το NFS, Network File System, όλα αυτά είναι πάνω από Unix, ή το Andrew File System, που το είχε κάνει το Πανεπιστήμιο του Carnegie Mellon, κάποια προγράμματα ελαφριάς μεταφοράς αρχείων πάνω από Unix, όπως το Trivial FTP, το bootstrap πρωτόκολλο, το οποίο ήταν ένα πρωτόκολλο το οποίο πάλι σε Unix μηχανήματα, ζητούσες IP διεύθυνση από ένα server και αυτό σου έστελνε την IP διεύθυνση πάνω από UDP και τα λοιπά, αυτές είναι κάποιες εφαρμογές του UDP, αλλά επαναλαβαίνω ότι η σημαντικότερη εφαρμογή του UDP τώρα, είναι οι εφαρμογές πραγματικού χρόνου, δηλαδή το voice over IP, βίντεο πάνω από IP και τα λοιπά. Ναι λοιπόν αυτά τα είπαμε, είπαμε ότι ορίζεται στο RFC 768 μπορείτε να το κατεβάσετε κι αν το δικαίω. Και αν θέλουμε τελικά να ομαδοποιήσουμε κάπως τις εφαρμογές, δηλαδή είναι συλλογή δεδομένων, διάδοση δεδομένων μπορεί να στείλω εγώ προς τα έξω, διάφορες αιτήσεις και απαντήσεις, δηλαδή σε τι κατασβήσεις το δίκτυο αυτή είναι η απάντηση και τα λοιπά και φυσικά εφαρμογές πραγματικού χρόνου. Λοιπόν οπότε να διακόψουμε άλλο εδώ για ένα διάλειμμα. Το TCP είναι, είπαμε, πρωτόκολλο προσανατολισμένο σε σύνδεση που μας δίνει μια αξιόπιστη επικοινωνία, πάνω από αξιόπιστο ή αναξιόπιστο δίκτυο, έχει δύο τρόπους labeling το λειτουργείο, δηλαδή επισήμανσης δεδομένων, είναι το λεγόμενο data stream push, δηλαδή όθησης δεδομένων, όπου ο χρήστης θέτει ένα bit σε ένα και θεωρώ ότι πρέπει να στείλω να οθήσω όλα τα δεδομένα που έχουν φτάσει μέχρι τώρα προς τα πάνω, προς τα που, προς το ανώτερο πρωτόκολλο, προς την εφαρμογή. Και δηλαδή, σε αυτή την περίπτωση, δεν περιμένω για μια, να γεμίσει η μνήμη μου και στείλω κατευθείαν δεδομένα, είτε αν θέλω να στείλω ένα το λεγόμενο μήνυμα επίγον, δηλαδή το urgent σήμα, πάλι ένα bit έχει τεθεί κυναισομένα, που δείχνει ότι έχω μια ρόη επίγον δεδομένων και ο χρήστης μπορεί να αποφασίσει, δηλαδή, ο χρήστης ποιος είναι αυτή την περίπτωση, η εφαρμογή, να αποφασίσει το πώς θα τα χειριστεί, έτσι, όταν είναι urgent τα δεδομένα. Αλλά για να καταλάβουμε λίγο καλύτερα το επίπεδο μεταφοράς, ήθελα να δούμε λίγο αυτής της κάποιες διαφάνες με εικόνες. Δηλαδή, αρχικά, έτσι, έχουμε στο επίπεδο data link, έχουμε τη node-node, έτσι, από κόμβο σε κόμβο. Δηλαδή, όπου υπάρχει πραγματικά φυσική σύνδεση, έτσι, από κόμβο σε κόμβο, στο δεύτερο επίπεδο. Στο τρίτο επίπεδο δικτύου, υπάρχει σύνδεση host-to-host, έτσι, από υπολογιστής-υπολογιστή. Και τώρα, εμείς είμαστε σε ένα τέταρτο επίπεδο, που είναι τι, process-to-process. Δηλαδή, από οι εφαρμογές, διαφορετικά προγράμματα, στον ίδιο υπολογιστή, πώς συνδέονται μεταξύ τους. Αυτό είναι το επίπεδο μεταφοράς. Δηλαδή, τώρα, εμείς είμαστε σε αυτό, process-to-process. Έτσι, είχαμε τις απαιτήσεις, είχαμε, καταρχήν, στο επίπεδο data-link, είχαμε τη διεύθυνση MAC, έτσι. Αν υποθέσουμε το δίκτυο από κάτω, είναι Ethernet. Στο επίπεδο δικτύου, έχουμε την IP διεύθυνση. Άρα, γεννινάται η ανάγκη, ότι και στο επίπεδο της μεταφοράς, θα πρέπει να έχουμε εκεί μια διεύθυνση. Ποιος είναι αυτός ο... πώς θα επιλέξω, δηλαδή, ανάλογα σε διαφορετικές διαργασίες. Θα επιλέξω με βάση τον αριθμό θείρας, έτσι, το port number, δηλαδή, π.χ. Εδώ έχω 52.000 port number, εδώ έχω 13 port, έτσι. Να, αυτό που σας έλεγα, daytime client και daytime server. Δηλαδή, στέλνω μήνυμα, στέλνω client μήνυμα στο server και ζητάει να μάθει ποια είναι η ώρα, έτσι. Και του επιστρέφει αυτό στην ώρα, πάλι με ένα άλλο μήνυμα. Αλλά πώς η θείρα προορισμού, η θείρα η δικιά μου, έτσι. Δηλαδή, με διεύθυνση στο επίπεδο μεταφοράς. Τώρα, οι αριθμοί θειρών, έτσι, ποιοι είναι. Είναι αριθμοί 16-bit, άρα μπορεί να είναι από 0 μέχρι 65.535, έτσι. 2 στις 16 μειών 1. Από 0 μέχρι 1023, είναι οι ονομαζόμενες πολύ γνωστές θείρες. Δηλαδή, στα αγγλικά λέγονται well known ports. Δηλαδή, είναι θείρες οι οποίες έχουν ανατεθεί σε αρκετά γνωστά πρωτόκολλα. Ποιοι, έτσι. Η θείρα 80, το ξέρουμε έτσι, φαντάζουμε ότι το έχετε ακούσει, ότι αντιστοιχεί πού. Αντιστοιχεί στο World Wide Web, έτσι. Όλοι οι web servers, γενικά, είναι προκαθορισμένο να ακούνε στη θείρα 80. Βέβαια, αυτό γενικά, τα well known ports, είναι γενικά για εφαρμογές τύπου server. Οι αντίστοιχοι clients, έτσι, έχουν άλλες, χρησιμοποιούν άλλες θείρες οι οποίες είναι δυναμικές και δημιουργούνται εκείνη τη στιγμή. Γενικά το ΙΑΝΑ, έτσι, ο internet number authority, έχει δημιουργήσει μία λίστα με τις θείρες. Είπαμε ότι από 0 μέχρι 1023 υπάρχουν γραμμένες. Υπάρχουν οι εγγεγραμμένες θείρες από 1024 μέχρι 49151. Και υπάρχουν οι δυναμικές θείρες, που αυτές εδώ είναι οι προσωρινές θείρες, δηλαδή που χρησιμοποιούν οι υπολογιστές για να συνδεχθούν προσωρινά σε μία συγκεκριμένη διεύθυνση. Λέει, α, υπάρχει το αρχείο, σε κάθε Linux μηχάνημα, αν ψάξεις το αρχείο AETC, υπάρχει το αρχείο services, έτσι, στο οποίο υπάρχουν όλες οι αυτές οι γνωστές θείρες. Και γιατί σας έχω φέρει και ένα τέτοιο αρχείο, θα ήθελα να το δούμε, εάν θα μπορούμε, να δείξω και τα πόσο φαίνεται, έτσι, δηλαδή για παράδειγμα. Ναι, τέλος, δεν φαίνεται πολύ καλά, ναι, δεν φαίνεται καλά. Εντάξει, αφήστε το. Όσοι έχετε Linux μπορείτε να είστε στον Director AETC, το αρχείο services. Τώρα, ο συνδυασμός, προφανώς έτσι, για να έχω μία διεύθυνση πρόσθεση του πρόσθεση, χρειάζομαι δύο αναγνωριστικά, έτσι, χρειάζομαι τι, την IP διεύθυνση και τη θήρα. Ο συνδυασμός αυτή, IP διεύθυνση και θήρας, ο συνδυασμός αυτός ονομάζεται socket στα αγγλικά, ονομάζεται socket address, στα αλληνικά μπορεί να το πούμε διεύθυνση υποδοχής, και είναι τελικά αυτός ο σημείο επικοινωνίας, δηλαδή η διεύθυνση υποδοχής του πελάτη, του client προσδιορίζει μοναδικά τον client, και η διεύθυνση υποδοχής του server, προσδιορίζει μοναδικά τον server. Άρα λοιπόν, χρειάζομαι συνολικά ένα δύο sockets, έτσι, ένα τέτοιο ζεύγος υποδοχών, δηλαδή, τοπική διεύθυνση IP, τοπική θήρα, απομακρυσμένη διεύθυνση IP, απομακρυσμένη θήρα. Κατανοητό? Τώρα, άρα λοιπόν, ξεκινώντας μία μεταφορά, έτσι, έχω αυτό το τελικό ζεύγος, host και θήρα. Άρα, π.χ. εάν θέλω να συνδέσω δύο υπολογιστές μαζί τους, π.χ. τον Google GR στη θήρα 37, και τον physics.outgr στη θήρα 76, έχω μία τετράδα η οποία μοναδικά μου προσδιορίζει τη σύνδεση. Αυτό να το προσέξουμε λίγο γιατί είναι αρκετά σημαντικό. Για παράδειγμα, μπορώ να έχω πολλαπλέσεις συνδέσεις που στον ίδιο υπολογιστή, έτσι, δηλαδή, π.χ. η θήρα 1037 σ' αυτόν εδώ στο whitehouse.gov και η θήρα 76 σ' αυτόν εδώ στο virginia.do, έτσι. Αλλά ταυτόχρονα, ο ίδιος υπολογιστής μπορεί να συνδεθεί με διαφορετική θήρα, βλέπετε το ίδιο, με διαφορετική θήρα μπορεί να συνδεθεί σε άλλον υπολογιστή. Έτσι δύο είναι δύο διαφορετικές συνδέσεις. Βλέπετε, ίδιος υπολογιστής, διαφορετική θήρα. Μπορώ να έχω πολλαπλέσεις συνδέσεις στην ίδια θήρα, δηλαδή αυτός εδώ με τη θήρα αυτή, και ταυτόχρονα αυτός εδώ με αυτόν εδώ με αυτή τη θήρα. Προσέξτε εδώ, ίδιο IP, ίδια θήρα, αλλά που σε διαφορετικούς υπολογιστές. Η τετράδα αυτή, οι τετράδες αυτές είναι διαφορετικές, είναι μια σύνδεση που γίνεται. Το καταλαβαίνουμε? Για παράδειγμα, έτσι, παίρνω εγώ από τον, ανοίγω εγώ τον Firefox και συνδέουμε στο www.auth.gr, έτσι. Άρα, συνδέουμε, από τη μία πλευρά, εγώ, η δικιά μου IP διεύθυνση, με μία τυχαία θήρα, που θα δείτε εκείνη τη στιγμή, και από την άλλη, ένα συγκεκριμένο υπολογιστή, στο www.auth.gr, στη θήρα 80. Ταυτόχρονα, μετά, ανοίγω κι άλλο παράθυρο browser, έτσι, και μπαίνω πάλι στον ίδιο server. Τι γίνεται, μπορεί να γίνει αυτή η σύνδεση, γίνεται, ε, είναι μοναδική, γιατί, κοιτάξτε, όταν ανοίγω κι άλλο παράθυρο και μπαίνω στον ίδιο ακριβώς server, από τη μία πλευρά, πάλι είναι, ο www.auth.gr και στη θήρα 80, από την άλλη πλευρά είναι η IP η δικιά μου, αλλά η θήρα η δικιά μου, τώρα, είναι μία άλλη θήρα, έτσι. Δεν είναι η ίδια τυχαία θήρα που ήταν πριν, γιατί είναι κατελημένη. Είναι μία άλλη τυχαία θήρα. Άρα, δηλαδή, πάλι, ακόμα και από τον ίδιο υπολογιστή, ανοίγοντας, είτε πολλαπλά παράθυρα στον ίδιο browser, είτε διαφορετικούς browser, πάλι, μπορώ να έχω διαφορετικές συνδέσεις. Αυτό που δεν μπορώ να έχω είναι ότι δύο συνδέσεις δεν μπορούν να έχουν την ίδια τετράδα. Και ένα στοιχείο να διαφέρει αυτής της τετράδας είναι η διαφορετική συνδέση. Το καταλαβαίνουμε, έτσι εξηγείται το πως ανοίγουμε πολλαπλά παράθυρα με τον ίδιο browser ή ανοίγουμε πολλαπλά σε εφαρμογές στον ίδιο υπολογιστή και τα λοιπά. Τώρα, στο TCP ορίζει για κάθε θήρα δύο καταστάσεις. Δηλαδή, η μία θήρα μπορεί να είναι αυτό που λέμε παθητικά ανοιχτή, Passive Open, που λέμε ότι ακούει, δηλαδή είναι έτοιμη να δεχτεί σύνδεση. Για παράδειγμα, ένας web server έχει τη θήρα 80 παθητικά ανοιχτή, δηλαδή που σημαίνει ότι ακούω, είμαι έτοιμος να δεχτώ εισερχόμενη σύνδεση και να απαντήσω. Ή μπορεί να είναι ενεργά ανοιχτή, δηλαδή Active Open, που σημαίνει ότι έχω επικοινωνία με το άλλο άκρο και ζητώ μια σύνδεση. Δηλαδή, ο client μπορεί να κάνει το Active Open. Ανοίγω τη θήρα κατευθείαν και στέλνω έτηση στο web server, κάνω Active Open. Είναι ενεργά ανοιχτή. Φυσικά, και οι δύο αυτές ενότητες λογισμικού συνδυάζονται για τη δημιουργία μιας σύνδεσης. Και φυσικά, το TCP παρέχει τη δυνατότητα στα προγράμματα που ανοιχτώ να μεταδίδουν δεδομένα. Άρα, λοιπόν, το TCP είναι ένα πρωτόκολλο που καθορίζει πώς θα διακρίνει κανείς πολλαπλούς προορισμούς σε μία συσκευή, σε μία απολογιστή, πώς μπορεί να ξεκινήσει κανείς αλλά και να διακόψει μια μεταφορά ροής, τι μορφή μπορεί να έχει αυτά τα δεδομένα που ανταλλάσσουν οι υπολογιστές, το φορμάτ των δεδομένων και τι είδους διαδικασίες πρέπει να χρησιμοποιηθούν ώστε να εγγυηθούμε ότι τα δεδομένα αυτά θα φτάσουν σωστά. Τώρα, το TCP πρέπει να εκτελεί και τυπικές λειτουργίες μεταφοράς. Καταρχήν αυτό που λέμε το segmentation, τα πακέτα TCP λέγονται segments στα αγγλικά, TCP segments, δηλαδή σπάμε το μήνυμα του επέδοφαρμογή σε τμήματα που ονομάζονται τις segments. Πρέπει να κάνει έλεγχο σφαλμάτων end-to-end, πρέπει να κάνει end-to-end από ακροσάκρο έλεγχο ροής και φυσικά μπορεί να κάνει πολυπλεξία και απολυπλεξία σε διαφορετικές ροές. Άρα είναι γενικά αξιόπιστο, είναι connection-oriented, σύνδεση προσανατολισμένο προσύνδεση, είναι stream-oriented, δηλαδή ορίζει ροές, ρευματοστρεφή θα λέγαμε στα ελληνικά, ανταλλάζει δεδομένα με ροές. Είναι αμφίδρομης μετάδοσης, full-duplex. Full-duplex τι σημαίνει, σημαίνει ότι μπορεί ο ένας να έχει, να στέλνει ταυτόχρονα δεδομένα και ταυτόχρονα στέλνει και acknowledgement για να επιβεώσει τα προηγούμενα δεδομένα που έλαβε, έτσι. Και αυτό που να γίνεται ταυτόχρονα. Εντάξει είναι buffer, μπορεί να χρησιμοποιήσει, να αποθηκεύσει δεδομένα και μεγάλα απάντηση στη σωστή σειρά και τα λοιπά. Αυτό μπορεί να παρουσιάσει με το push, όπως είδαμε. Τώρα, αν τα θέλουμε να τα δούμε λίγο πιο αναλυτικά, γιατί είναι αξιόβιστα, έτσι, γιατί εφόσον έχει στείλει τα εδομένα, απαιτεί μια επιβεβαίωση, έτσι, επειδή απαιτεί acknowledgement για να συνεχίσει να στέλνει εδομένα. Εάν δεν λάβει acknowledgement, θα ξαναμεταδώσει πάλι τα ίδια εδομένα. Και αν ξαπάλι δεν ξαναλάβει, θα περιμένει κάποιο χρόνο, θα περιμένει να κάνει αρκετές προσπάθειες και αν μετά από μερικές προσπάθειες δεν μπορεί να λάβει acknowledgement, τότε θα απαρατηθεί της προσπάθειας. Πόσο χρόνο θα κάνει για να αναμείνει τα εδομένα. Ο χρόνος αυτός υπολογίζεται με βάση το rdt, το round trip time, το χρόνο που κάνει για να πάει και να έρθει τα εδομένα δύο φορές και θα είναι α, μία με σταθερά α από το προηγούμενο round trip time, ενώ ένα μίον α από το νέο round trip time, όπως συνήθως το α είναι στη τάξη του 90%. Πρακτικά ο χρόνος αυτός που περιμένω για την επιβεβαίωση είναι δύο επί το round trip time. Και φυσικά αυτό που λέμε ότι είναι full duplex, μπορείτε να το έχετε δει με τον όρο piggy-baked, δηλαδή μπορούν να στέλνονται ταυτόχρονα και επιβεβαίωσης αλλά και ταυτόχρονα και δεδομένα και από τις δύο πλευρές, δηλαδή ο ένας επιβεβαίνει τα εδομένα του άλλου και στέλνει και τα δικά του δεδομένα. Τώρα αριθμή ακολουθίας, το κάθε πακέτο έχει ένα αριθμό ακολουθίας, σχετίζετε με κάθε byte που στέλνετε. Χρησιμοποιούνται δύο παιδιά στην ουσία, ο αριθμός ακολουθίας αλλά και το sequence number αλλά και το acknowledgement number, ο αριθμός επιβεβαίωσης. Και τα δύο αναφέρονται σε αριθμό byte και όχι σε αριθμό τοιμάτων, δηλαδή έχω στείλει τόσα bytes μέχρι τώρα, αυτό σημαίνει το sequence number. Αριθμός ακολουθίας είναι ο αριθμός του πρώτου byte μεταφέρον, ο αριθμός acknowledgement υποδηλώνει το επόμενο byte που περιμένει να πάρει, δηλαδή αν ένας αριθμός acknowledgement είναι 5643 σημαίνει ότι έχω λάβει όλα τα bytes σωστά μέχρι το 5642. Άρα το επόμενο που περιμένω να μου στείλεις είναι το 5643. Το TCP χρησιμοποιεί αυτό που λέμε sliding window, ένα συγκρόμενο παράθυρο για την μετάδοση, για τον έλεγχο της ροής. Αυτό σημαίνει ότι ο κάθε αποστολέας διατηρεί τρεις δείκτες. Ο ένας δείκτης είναι τα δεδομένα που έχουνε σταλεί και έχουνε επιβεβαιωθεί από το δέκτη. Ο δεύτερος δείκτης είναι τα δεδομένα τα οποία είναι έτοιμα έχουν αποσταλεί αλλά δεν έχουν επιβεβαιωθεί ακόμα και ο επόμενος δείκτης είναι τα δεδομένα τα οποία δεν έχουν σταλεί ακόμα. Τα οποία πιάνουν το επόμενο δεδομένο που περιμένουν να σταλεί. Περιλαμβάνει αυτούς τους δείκτες και σιγά σιγά αυτό το παράθυρο μετατοπίζεται. Δηλαδή στέλνουν και δεδομένα να γίνουν επιβεβαίωση, σιγά σιγά και τα επόμενα και τα λοιπά. Και αντίστοιχα ο πομπός έχει ένα τέτοιο αντίστοιχο παράθυρο που επιβεβαίων. Δηλαδή μπορεί να έχει και αυτός δείκτη. Δεδομένα που έχουνε σταλεί αλλά που έχουνε ληφθεί αλλά δεν έχουν επιβεβαιωθεί, δεδομένα που έχουν επιβεβαιωθεί και τα λοιπά. Τώρα για να γίνει ο έλεγχος της ροή, στο TCP, ο πομπός στέλνει ακριβώς πόσα ο δέκτης κάνει αυτό που λέμε στέλνει το arved, στα αγγλικά λέγεται advertised window. Παραθύρου. Δηλαδή στέλνει ο πομπός, ο δέκτης το πόσο ακριβώς bites με βάση την buffer που έχει μετατεθυμένως να δεχτεί. Άρα λοιπόν το παράθυρο του αποστολέα μπορεί να είναι μικρότερο από το παράθυρο του δέκτη. Δεν μπορεί να είναι μεγαλύτερο από αυτό που έχει στέλνει. Ο δέκτης προφανώς είναι το σειρόμενο παράθυρο. Εάν το πρόγραμμα του δέκτη καταλαβαίνει πολύ πιο πικρότερα δεδομένα από ό,τι λαμβάνει, τότε αυξάνεται το... Έχω επέκταση παραθύρου αποστολέα αλλά αυξάνεται το μέγεθος του παραθύρου του δέκτη. Αν γίνει η αντίστροφη διαδικασία, εάν η εφαρμογή αυτή δεν μπορεί να απορροφήσει τα εδομένα αυτά που λαμβάνει γρηγορότερα, τότε έχω συρρήκνωση του παραθύρου του αποστολέα και μειώνεται το παράθυρο του δέκτη. Για να κλείσω αυτό το παράθυρο, για να τερματιστεί η αποστολή, αναγγέλλει ο δέκτης ένα μηδενικό παράθυρο. Τώρα, ο έλεγχος σφαλμάτων. Έχω διάφορα εργαλεία για να κάνω έλεγχος σφαλμάτων στο TCP. Δηλαδή, τι σφάλματα μπορούν να γίνονται. Μπορούν να έχω τμήματα που έχουν λάθει, που έχουν χαθεί, που έχουν φτάσει εκτός σειράς. Ή μπορούν ακόμα που έχουν δύπλικες, που είναι διπλά, που έχουν φτάσει δύο φορές, δηλαδή το ίδιο πράγμα. Τα εργαλεία που έχω γι' αυτό είναι το checksum, για να λέξω τα σφαλμένα, η επιβεβαίωση, αλλά και ένας χρονιστής για να ξέρω για τα χαμένα και τα τμήματα, και αυτά θα όμως είναι εκτός σειράς ακολουθίας. Για τα χαμένα τμήματα ή ασφαλμένα ταχύζουμε ακριβώς το ίδιο τρόπο. Το τμήμα θα μεταπεδοθεί μετά από time-out. Δεν στέλνεται αρνητική επιβεβαίωση στο TCP. Εάν φτάσει κάποιο που είναι δύο φορές το ίδιο, τότε θα γίνει απόρριψη από τον πρόορισμό, δηλαδή θα το έχει δει στην μπάφωρα ότι θα το απορρίψει. Εάν φτάσει ένα τμήμα που είναι εκτός σειράς, δεν θα στείλω acknowledgement, μέχρις ότου φτάσουν και όλα τα προηγούμενα, δηλαδή μέχρις ότου μπορεί να ακβεωθεί η σειρά ακολουθίας. Για τα χαμένα acknowledgement δεν γίνεται κάτι συγκεκριμένο γιατί ο μηχανισμός λέει ότι είναι συσσορευτικός. Αν χαθεί ένα acknowledgement, μπορεί το επόμενο που θα σταλεί να αναγνωρίσει και να βεβαιώσει και όλα τα προηγούμενα. Άρα λοιπόν δεν υπάρχει κάποιος λόγος για το TCP να κάνει κάτι άλλο σε αυτή την περίπτωση. Λοιπόν θα σταματήσουμε εδώ. |