Πολύς κόσμος με ρωτάει συχνά, "πως γίνεται αυτό;", "γιατί δε δουλεύει εκείνο;", "κόλλησα υιό, τι κάνω;" κτλ. Η αλήθεια είναι πως οι υπολογιστές δεν είναι κανένα μυστήριο. Έχουν πολύ συγκεκριμένη λειτουργία και προβλέψιμη απόκριση σε κάθε κίνηση. Οποιοσδήποτε μπορεί να καταλάβει κάτι τόσο πολύπλοκο όσο... το ανάπτυγμα σε σειρά Taylor, μπορεί να καταλάβει και την λειτουργία τους. Η ερώτηση που είμαι σίγουρος ότι έρχεται σε όλους είναι "μα γιατί να θέλω να τα μάθω;". Η απάντηση είναι ότι δεν υπάρχει κανένας λόγος κάποιος να γίνει εξπέρ. Γι' αυτό και θα περιοριστώ στις απαραίτητες γνώσεις που θα βοηθήσουν κάποιον να μην ψάχνει για "ειδικούς" κάθε φορά που κάτι κολλάει.
Σημερινό θέμα λοιπόν, dsl, nat και τοπικά δίκτυα.
Θα ξεκινήσω με την απαραίτητη εισαγωγή στην δομή ενός Η/Υ, όποιος τα ξέρει ας προσπεράσει.
Οι υπολογιστές αποτελούνται από 4 βασικές μονάδες. Το πατάρι, το γραφείο, το μυαλό και τις κολώνες.
Το πατάρι είναι κάθε μέσο μόνιμης αποθήκευσης δεδομένων, όπως ο σκληρός δίσκος. Τα μέσα αυτά είναι αργά, δυσκίνητα και δύσχρηστα σε σχέση με τα άλλα 2, γιατί πάντα εξαρτώνται από κάποιο μηχανικό μέρος. Μηχανή σημαίνει τριβή, τριβή σημαίνει καθυστέρηση κ.ο.κ.
Το γραφείο είναι η γρήγορη μνήμη RAM. Είναι η μονάδα στην οποία συμβαίνει κάθε πράξη, κάθε αποτέλεσμα, κάθε πρόγραμμά. Είναι γρήγορη, 100% ηλεκτρονική αλλά δυστυχώς μόλις διακοπή η τροφοδοσία ρεύματος (κοινώς shutdown) αδειάζει από όλα τα δεδομένα.
Το μυαλό είναι ο επεξεργαστής CPU, είναι η μονάδα που κάνει όλες τις πράξεις, είναι η μονάδα που δημιουργεί τα αποτελέσματα.
Τέλος, οι κολώνες είναι η μητρική, είναι το υποσύστημα που κρατάει όλο το σύστημα ενωμένο.
Μία άλλη παρομοίωση που συχνά χρησιμοποιώ είναι το ανθρώπινο σώμα. Ο επεξεργαστής είναι το κεφάλι, η RAM είναι το στομάχι, ο σκληρός η κοιλιά και η μητρική η σπονδυλική στήλη.
Μετά από αυτή τη σύντομη αναφορά πάμε στα λειτουργικά. Όπως το μηχάνημα έτσι και το λογισμικό αποτελείται από διάφορα διακριτά μέρη. Τα κυριότερα είναι ο πυρήνας, το κέλυφος και η διεπαφή.
Ο πυρήνας είναι το κομμάτι εκείνο που κάνει όλη την δουλειά, είναι το κομμάτι του προγράμματος το οποίο παράγει και επεξεργάζεται τα δεδομένα.
Το κέλυφος είναι, ένα περιτύλιγμα γύρω από τον πυρήνα το οποίο αποσκοπεί στο να απλοποιήσει την χρήση του ή/και να την επεκτείνει.
Η διεπαφή είναι κάθε μέσο μεταφοράς δεδομένων από τον έξω κόσμο προς τον υπολογιστή και αντίστροφα. Παραδείγματα είναι το πληκτρολόγιο, τα ηχεία αλλά και ο εκτυπωτής.
Πάμε λοιπόν τώρα να τα βάλουμε όλα αυτά στον κόσμο των δικτύων. Για να υπάρξει δίκτυο πρώτα από όλα απαιτείται μία συσκευή επικοινωνίας με άλλους υπολογιστές. Τέτοιες συσκευές είναι τα modem και οι κάρτες δικτύου. Αυτές τις συσκευές μπορείτε να τις φανταστείτε ως εξώπορτες έξω από το οίκημα του Η/Υ. Όπως συμβαίνει και στην πραγματική ζωή, όπου κάθε σπίτι βρίσκεται σε μία όδο, σε ένα νομό, σε μία χώρα και έχει τον δικό της αριθμό, έτσι και στους υπολογιστές έχουμε τα ίδια στοιχεία που όλα μαζί ονομάζονται IP (Internet Address). Η διεύθυνση αυτή θα έπρεπε να λέγεται NP (network address) αφού πολύ συχνά δεν έχει καμία επαφή με το internet (το οποίο είναι ένα πολύ συγκεκριμένο δίκτυο, διακριτό και ανεξάρτητο των εκατομμυρίων άλλων που υπάρχουν).
Η IP λοιπόν, αποτελείται από τέσσερις τριψήφιους αριθμούς στο δεκαδικό αριθμητικό σύστημα με εύρος το διάστημα [0,255) και αν α,β,γ,δ τέτοιοι αριθμοί τότε η ip είναι της μορφής α.β.γ.δ. Ο αριθμός α αντιστοιχεί στην χώρα και ονομάζεται Α κλάση. Ο αριθμός β στον νομό και ονομάζεται B κλάση, ο γ είναι η οδός και λέγεται C κλάση και ο δ είναι το δικό μας μηχάνημα, η δικιά μας πόρτα και ονομάζεται D κλάση.
Όπως άφησα να εννοηθεί ένας υπολογιστής μπορεί να έχει πολλαπλές διευθύνσεις, μία για κάθε "εξώπορτα". Ωστόσο είναι ευνόητο επίσης, ότι κάθε τέτοια εξώπορτα δεν είναι απαραίτητο να είναι συνδεδεμένη στο ίδιο δίκτυο. Ας δούμε το παρακάτω σχήμα:
Κώδικας: Επιλογή όλων
[ Χ ]------κ-------[(1):Υ:(2)]-------λ-------[ Ζ ]
Α.Β.Ck.Dz -- (1):A.B.Ck.Dy1 , (2):A.B.Cλ.Dy2 -- Α.Β.Cλ.Dz
όπου Dy1 διάφορο του Dy2. Σκεφτείτε τον κόμβο Y ως ένα γωνιακό σπίτι με εξώπορτες σε κάθε πλευρά. Τότε κάθε εξώπορτα όχι μόνο έχει διαφορετική οδό αλλά και διαφορετικό αριθμό σχετικό με την αρίθμηση στην εκάστοτε οδό.
Ωραία όλα αυτά, τα έχω ξαναγράψει και σε προηγούμενο άρθρο. Αυτό που δεν έχω πει όμως είναι οι πόρτες. Προσοχή μην τις μπερδέψετε με τις "εξώπορτες" που μεταφορικά χρησιμοποιούσα προηγουμένως. Ο όρος πόρτα είναι επίσημη ορολογία (port στα αγγλικά) και έχει να κάνει με το λειτουργικό σύστημα.
Ας ξεκινήσω με ένα παράδειγμα. Στο παραπάνω μοντέλο ας υποθέσουμε το πρόγραμμα MSN για την επικοινωνία μεταξύ των Χ,Υ. Θα ονομάσω Μχ το MSN που εκτελείται στον Χ και Μψ στον Υ αντίστοιχα. Όταν ο χρήστης του Μχ γράψει κάτι, τα δεδομένα αποστέλλονται στον Υ όπου τα διαβάζει το Μψ και τα δείχνει στην οθόνη. Ας υποθέσουμε τώρα και το πρόγραμμα Firefox (αντιστοίχως Φχ και Φψ) μέσω του οποίου ο χρήστης του Υ θέλει να δει μία σελίδα που φιλοξενείται στον Χ. Θα γράψει στην μπάρα διευθύνσεων του Φψ Α.Β.Ck.Dz και λογικά θα δει τη σελίδα, αφού ο Φψ θα στείλει την αίτηση στον X και αυτός με την σειρά του θα του στείλει την σελίδα (ας πούμε αυτή τη διεργασία Σχ). Ας υποθέσουμε τώρα ότι αυτά τα δύο γίνονται ταυτόχρονα. Δλδ την ίδια στιγμή φτάνουν στον Y τα δεδομένα του Μχ και του Σχ. Έχουμε δύο προγράμματα (Μψ και Φψ) τα οποία πρέπει με κάποιο τρόπο να συνεννοηθούν και να βρουν ποια δεδομένα είναι ποιανού. Μπάχαλο.
Αυτό ακριβώς το πρόβλημα ανάγκασε στην δημιουργία των πορτών. Μία πόρτα είναι ένας "αυθαίρετος" δεκαδικός αριθμός και λειτουργεί ως αναγνωριστικό για το σύστημα ώστε να ξεχωρίζει σε ποιό πρόγραμμα απευθύνεται κάθε άφιξη δεδομένων. Το σύστημα δεν περιμένει πάντα αυτές τις αφίξεις. Οι περισσότερες απλά γίνονται από μόνες τους χωρίς καμία προειδοποίηση. Όταν ο Φψ ζήτησε από τον Σχ την σελίδα δεν τον είχε ενημερώσει πρωτύτερα για αυτή του την πρόθεση. Η επικοινωνία όμως επιτεύχθηκε γιατί ο Σχ ξέρει πως οτιδήποτε έρχεται με το αναγνωριστικό (πόρτα) 80 είναι δικό του.
Σκεφτείτε το σαν αλληλογραφία. Κάθε πακέτο δεδομένων που φεύγει από έναν κόμβο συνοδεύεται από έναν επιπρόσθετο φάκελο που λέει τα στοιχεία παραλήπτη και τα στοιχεία αποστολέα. Τα στοιχεία αυτά δεν είναι τπτ άλλο από τις IP του κάθε κόμβου μαζί με τις κατάλληλες πόρτες, στην μορφή α.β.γ.δ:πόρτα.
Ας γενικεύσουμε λίγο το πρόβλημα με το ακόλουθο σχήμα, γνώριμο σε κάθε κάτοχο dsl:
Κώδικας: Επιλογή όλων
[internet]-------κ--------[(1):router(2):]--------λ-------[PC]
ι) όπως είπαμε και πριν για τον Υ έτσι και το router είναι γωνιακό σπίτι.
ιι) Τα δεδομένα πάνε μόνο ευθεία αλλά μεταξύ των (1) και (2) υπάρχει γωνία
ιιι)Το internet ξέρει μόνο την διεύθυνση του router(1). Το router(2) είναι διαφορετικό, άρα και ξένο, δίκτυο συνεπώς το ίδιο ισχύει και για το PC.
ιν) Το κ δίκτυο είναι κομμάτι του internet, ενώ το λ είναι ανεξάρτητο και ονομάζεται τοπικό δίκτυο (LAN, Local Area Network).
Τα ανωτέρω προβλήματα αντιμετωπίζονται με μία τεχνική που ονομάζεται NAT (Network Address Translation) και η ουσία πίσω από αυτή την τεχνική είναι:
Ότι φτάνει στο router(2) θα το μεταγάγω στον προορισμό του μέσο του router(1), ωστόσο στην πορεία θα του αλλάξω τα στοιχεία αποστολέα ώστε να φαίνεται ότι τα έστειλε ο router(1). Τι κερδίζω με αυτό; Ας πάρουμε ένα παράδειγμα.
Έστω το πρόγραμμα Azureus στο PC (θα το λέμε Αζ) και έστω το ίδιο πρόγραμμα κάπου στο internet (θα το λέμε Αι). Ο Αι έχει ένα αρχείο που θέλει να κατεβάσει ο Αζ. Το πρόβλημα είναι πως Αζ είναι σε τοπικό δίκτυο και λόγω αυτού ενώ ξέρει τα πάντα για το router και μπορεί να επικοινωνήσει με τον Αι, ο Αι γνωρίζει μόνο τον router(1). Με άλλα λόγια χωρίς NAT το πακέτο που θα έφτανε στον Αι θα είχε ως αποστολέα την IP του PC στο οποίο είναι Αζ αλλά αυτή η IP είναι ξένη ως προς το internet άρα και μη προσβάσιμη. Το αποτέλεσμα είναι πως ο Αι λαμβάνοντας αυτήν την άγνωστη διεύθυνση δε θα είναι σε θέση να μαντέψει ότι πίσω από όλα αυτά κρύβεται ο router(1) οπότε και δε θα στείλει καμία απάντηση.
Το Nat λοιπόν κρατάει ένα πίνακα που λέει ότι το τάδε πακέτο ήρθε από το τάδε PC και πάει εκεί, εγώ θα αλλάξω τα στοιχεία του αποστολέα στα δικά μου και όταν λάβω απάντηση θα συμβουλευτώ αυτό εδώ το πινακάκι για να την προωθήσω ανάλογα.
Η παραπάνω διαδικασία είναι αυτόματη και δουλεύει καλά. Αυτή είναι και η βασική δουλειά του router και από αυτό παίρνει και το όνομά του, στα ελληνικά δρομολογητής.
Τι γίνεται όμως με τα δεδομένα που ΔΕΝ είναι απάντηση σε προηγούμενο εσωτερικό αίτημα; Τα torrents βασίζονται στην αποστολή δεδομένων. Με άλλα λόγια αν δίνεις τότε θα πάρεις ως αντάλλαγμα. Όταν όμως έχεις ένα αρχείο που το δίνεις σε άλλους χρήστες δεν μπορείς να ξέρεις ούτε ποιοι το θέλουν και ακόμη περισσότερο πιο κομμάτι του αρχείου θέλουν. Το μόνο που θα κάνει ο Αζ για παράδειγμα, όταν κατεβάσει το αρχείο από τον Αι, είναι να φωνάζει παντού "έχω αυτό το αρχείο, όποιος θέλει το παίρνει". Και από κει και πέρα διάφοροι υπολογιστές θα στείλουν αιτήσεις για να το πάρουν αλλά όλες θα είναι απρόσμενες και θα έχουν ως παραλήπτη των router(1).
Ο router(1) τώρα με την σειρά του δεν μπορεί να ξέρει σε ποιο μηχάνημα να στείλει τα δεδομένα αυτά. Αφού είναι λογικό σε τοπικό δίκτυο 3 ή περισσοτέρων κόμβων (μαζί με τον router) να τρέχει ο Aζ και στα 2 PC.
Αυτό που κάνουμε λοιπόν, είναι να ρυθμίσουμε κάθε azureus να τρέχει σε διαφορετική πόρτα και λέμε στο router ότι δεδομένα φτάνουν με παραλήπτη σε αυτήν την πόρτα (αφού η διεύθυνση θα είναι πάντα του router(1) και όχι του πραγματικού παραλήπτη) θα τα στέλνεις σε εκείνο το PC, χωρίς πολλά λόγια.
Αυτό δημιουργεί την προϋπόθεση πως κάθε πόρτα πρέπει να είναι μοναδική σε όλο το τοπικό δίκτυο και μόνο ανά μηχάνημα.
Άλλαξα τον τίτλο. Δεν έπιανε το space και έβαζες τελείες?
-Wizard
