TCP/IP Basics (Part II)

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση

Το παρόν άρθρο είναι το δεύτερο από μια σειρά άρθρων για το TCP/IP.


Στο άρθρο TCP/IP Basics ασχοληθήκαμε με τα βασικά της σουίτας TCP/IP. Στο δεύτερο μέρος θα ασχοληθούμε με ένα κάπως μικρότερο σε έκταση κομμάτι, αλλά ιδιαίτερα σημαντικό. Το subneting. Πάρτε χαρτί και μολύβι γιατί σας έχω μπόλικη δουλειά! ;) Επίσης, στο πρώτο μέρος η εξήγηση της μάσκας υποδικτύου δεν είναι τόσο αναλυτική όσο εδώ.


Subneting

Το subneting είναι ο διαχωρισμός ή το "σπάσιμο" ενός δικτύου σε μικρότερα. Αν δηλαδή έχουμε στην διάθεσή μας μονάχα ένα δίκτυο κλάσης C, το οποίο όπως έχουμε πει επιτρέπει 254 διαφορετικές διευθύνσεις και θέλουμε να χρησιμοποιήσουμε 2 ή περισσότερα δίκτυα, τότε η διάσπαση του αρχικού δικτύου σε μικρότερα υποδίκτυα είναι μονόδρομος. Πριν προχωρήσουμε σε τεχνικές λεπτομέρειες καλό είναι να δούμε μερικές περιπτώσεις όπου χρειαζόμαστε το subneting.

Μία περίπτωση είναι όταν έχουμε ενοικιάσει από έναν ISP (Internet Service Provider) έναν αριθμό από IP διευθύνσεις με τις οποίες πρέπει να δημιουργήσουμε δύο ή περισσότερα δίκτυα. Η κάθε διεύθυνση κοστίζει αρκετά χρήματα, οπότε με το subneting εξοικονομούμε διευθύνσεις, άρα και χρήματα. Αν πχ έχουμε πάρει τις διευθύνσεις 212.105.45.192 - 212.105.45.200 και θέλουμε να φτιάξουμε με αυτές δύο δίκτυα, τότε δημιουργούμε με κάθε μία τετράδα διευθύνσεων ένα υποδίκτυο του αρχικού δικτύου, δηλαδή τα υποδίκτυα 212.105.45.192/30 και 212.105.45.196/30. (Θα εξηγηθούν αναλυτικά όλα παρακάτω)

Μία άλλη περίπτωση είναι αυτή ενός ISP. Κάθε ISP νοικιάζει ένα range IP διευθύνσεων το οποίο στην συνέχεια τεμαχίζει και υπενοικιάζει στους τελικούς χρήστες, δηλαδή στους πελάτες του. Αυτό γίνεται φυσικά με χρήση subneting.

Μία τρίτη περίπτωση είναι αυτή ενός corporate MAN (Metropolitan Area Network) δικτύου, όπου μία μεγάλη επιχείρηση έχει ένα κεντρικό NOC (Network Operation Center) το οποίο διαθέτει στα γραφεία κάθε χώρας όπου δραστηριοποιείται η επιχείρηση ένα δίκτυο κλάσης B ή C, το οποίο το εκάστοτε τοπικό γραφείο διαχειρίζεται όπως κρίνει το ίδιο. Αν για παράδειγμα μία αυτοκινητοβιομηχανία έχει δώσει στα γραφεία της στην Ελλάδα το C-class δίκτυο 192.168.30.0/24 αλλά στην Ελλάδα υπάρχουν δύο υποκαταστήματα απομακρυσμένα μεταξύ τους με περίπου 100 χρήστες το καθένα, τότε ο διαχειριστής του Ελληνικού γραφείο θα σπάσει το αρχικό δίκτυο σε δύο μικρότερα, ένα για κάθε υποκατάστημα.

Φυσικά, υπάρχουν και άλλες περιπτώσεις. Επιχειρήσεις, οργανισμοί, ISPs, ακαδημαϊκά ιδρύματα, οργανισμοί, κ.α. με χρήση του subneting καταφέρνουν να κάνουν καλύτερη διαχείριση του, συνήθως περιορισμένου, address range που έχουν στην διάθεσή τους.

Αρκετά με τα γενικά. Πάμε να δούμε μερικές έννοιες που θα μας βοηθήσουν να κατανοήσουμε καλύτερα το subneting.

Major δίκτυα

Ιστορικά, είχε θεσπιστεί κάποτε ένας διαχωρισμός των δικτύων σε κλάσεις, ανάλογα με το μέγεθός τους. Υπενθυμίζουμε ότι μία IP διεύθυνση είναι ένας 32-bit αριθμός που απαρτίζεται από 4 οκτάδες bits. Είναι δηλαδή της μορφής a.b.c.d όπου καθένα από τα a, b, c και d είναι ένας αριθμός από το 0 έως το 255.

  • 1.x.x.x έως 126.x.x.x : Class-A
  • 128.x.x.x έως 191.x.x.x : Class-B
  • 192.x.x.x έως 223.x.x.x : Class-C

Τα 'x' σημαίνουν ότι στην συγκεκριμένη θέση ο αριθμός μπορεί να πάρει οποιαδήποτε τιμή από 0 έως 255. Η κλάση A είναι η μεγαλύτερη και έχει μάσκα υποδικτύου 255.0.0.0.0, η B είναι μικρότερη από την A και έχει μάσκα υποδικτύου 255.255.0.0, ενώ η κλάση C είναι η μικρότερη όλων και έχει μάσκα υποδικτύου 255.255.255.0. Θα δούμε αναλυτικά τι σημαίνει αυτό σε επόμενη παράγραφο. Υπάρχουν και οι κλάσεις D και E, που η πρώτη χρησιμοποιείται στο multicasting, ενώ η δεύτερη για experimental use και future use. Ωστόσο αυτές οι δύο κλάσεις δεν θα μας απασχολήσουν σε αυτό το άρθρο και αναφέρονται απλά για λόγους πληρότητας.

Ο διαχωρισμός των major δικτύων πλέον δεν χρησιμοποιείται και έχει περισσότερο ιστορική σημασία παρά πρακτική. Ωστόσο είναι κάτι που διατηρείται μέχρι και στην πιο σύγχρονη βιβλιογραφία, ενώ για να υπάρχει συμβατότητα με παλαιότερες συσκευές που βασίζονταν στα major δίκτυα, πολλές νέες συσκευές έχουν πλήρη υποστήριξη των major δικτύων. Σήμερα κάθε δίκτυο μπορεί να έχει οποιαδήποτε μάσκα υποδικτύου θελήσουμε ανεξαρτήτως από τον αριθμό με τον οποίο ξεκινάει η διεύθυνσή του.

Ανατομία μιας IP διεύθυνσης

Μία διεύθυνση δικτύου της μορφής a.b.c.d , σύμφωνα με το πρωτόκολλο IPv4, αποτελείται από δύο κύρια μέρη. Το κομμάτι του δικτύου και αυτό του host. Το πρώτο μέρος μιας διεύθυνσης αποτελεί τα network bits, ενώ το υπόλοιπο προσδιορίζει τον host. Ο host μπορεί να είναι ένας υπολογιστής, ένας server, ένας router, ένα managed switch, ένα access point, ένα τηλέφωνο VoIP ή οποιαδήποτε συσκευή δικτύου που έχει διεύθυνση μέσα στο δίκτυό μας. Το ποιοι από τους πρώτους αριθμούς αναπαριστούν την διεύθυνση του δικτύου (και συνεπώς ποιοι από τους υπόλοιπους τον host) το προσδιορίζει η μάσκα υποδικτύου.

Ως παράδειγμα, η διεύθυνση 192.168.1.15 με μάσκα υποδικτύου 255.255.255.0 αναπαριστά τον host 15 στο δίκτυο 192.168.1.0. Δηλαδή, τα τρία πρώτα πεδία της διεύθυνσης προσδιορίζουν το δίκτυο, ενώ το τελευταίο πεδίο τον host.

Σε αυτό το σημείο πρέπει να υπενθυμίσουμε ότι το κάθε ένα από τα a, b, c και d είναι αριθμοί που στο εσωτερικό ενός υπολογιστή ή μίας δικτυακής συσκευής αναπαρίστανται με bits, δηλαδή στο δυαδικό σύστημα και όχι το δεκαδικό που χρησιμοποιούμε εμείς οι άνθρωποι. Για να μπορούμε λοιπόν να κατανοήσουμε αυτά που θα διαβάσουμε στην συνέχεια, είναι σκόπιμο να αποκτήσουμε, αν δεν έχουμε ήδη, μία εξοικείωση με το δυαδικό σύστημα.

Εισαγωγή στο δυαδικό σύστημα

Στο δεκαδικό σύστημα χρησιμοποιούμε ψηφία διατεταγμένα στην σειρά τα οποία το καθένα από δεξιά προς τα αριστερά προσδιορίζει μονάδες, δεκάδες, εκατοντάδες, χιλιάδες, δεκάδες χιλιάδες, κοκ. Ο αριθμός δηλαδή 632 αναλύεται, διαβάζοντας σαν άραβες από δεξιά προς τα αριστερά, 2 μονάδες, 3 δεκάδες και 6 εκατοντάδες. Παρατηρούμε ότι για να αναπαραστήσουμε τον αριθμό δέκα δεν αρκεί ένα ψηφίο. Με ένα μόνο ψηφίο μπορούμε να αναπαραστήσουμε τους αριθμούς από το 0 έως το 9. Για να γράψουμε δέκα στο δεκαδικό σύστημα απαιτούνται δύο ψηφία. Ένα για να ορίσουμε 0 μονάδες και ένα ακόμα για να ορίσουμε 1 δεκάδα. Και έτσι προκύπτει το 10. Ομοίως, για να ορίσουμε τον αριθμό χίλια δεν αρκούν τρία ψηφία.

Επίσης, παρατηρούμε ότι στο δεκαδικό σύστημα κάθε πολλαπλάσιο είναι δύναμη του δέκα. Η μονάδα είναι το 10^0, η δεκάδα το 10^1, η εκατοντάδα 10^2, η χιλιάδα 10^3, κοκ.

Τα αντίστοιχα ισχύουν στο δυαδικό σύστημα, βάζοντας όπου το δέκα τον αριθμό δύο. Έτσι, έχουμε αριθμούς με ψηφία από το 0 έως το 1. Για να αναπαραστήσουμε τον αριθμό δύο δεν αρκεί ένα ψηφίο, όπως ακριβώς στο δεκαδικό για να αναπαραστήσουμε το δέκα επίσης δεν αρκεί ένα ψηφίο. Επίσης, στο δυαδικό σύστημα, από δεξιά προς τα αριστερά το κάθε ψηφία αναπαριστά τις μονάδες (2^0), τις δυάδες (2^1), τις τετράδες (2^2), τις οκτάδες (2^3), τις δεκαεξάδες (2^4), τις τριανταδιάδες (2^5), κοκ.

Επομένως, ο αριθμός 1101 αναπαριστά (διαβάζοντας από δεξιά προς τα αριστερά πάντοτε) 1 μονάδα, 0 δυάδα, 1 τετράδα και 1 οκτάδα. Κάνοντας το άθροισμα, βρίσκουμε ότι πρόκειται για τον αριθμό δεκατρία. Αντίστροφα, ο αριθμός σαρανταέξι στο δυαδικό σύστημα θα αναπαρασταθεί από:


1 τριανταδιάδα

0 δεκαεξάδα

1 οκτάδα

1 τετράδα

1 δυάδα

0 μονάδα


Βάζοντας τους αριθμούς στην σειρά γράφουμε τον αριθμό σαρανταέξι στο δυαδικό σύστημα: 101110. Προφανώς απαιτείται αρκετή εξάσκηση για να εξοικειωθεί κάποιος επαρκώς με το δυαδικό σύστημα. Υπάρχει αναλυτική μεθοδολογία για μετατροπή από και προς το δυαδικό σύστημα, η οποία όμως ξεφεύγει από τα όρια αυτής της παρουσίασης. Μπορεί να ανατρέξει κάποιος στην σχετική βιβλιογραφία ή να βρει κάποιο σχετικό άρθρο στο Internet.

Για την κατανόηση του άρθρου αρκεί η εξοικείωση με τους αριθμούς έως το 255, οι οποίοι αποτελούνται το πολύ από 8 bits. Δεν είναι και τόσο δύσκολο όσο φαίνεται! Παρατίθενται οι αξίες του κάθε bit ανάλογα με την θέση του σε έναν οκταψήφιο δυαδικό αριθμό:

128   64  32   16    8   4   2   1
 x     x   x    x    x   x   x   x

Πχ ο αριθμός 11100101 αναλύεται ως εξής:

128  64   32   16   8   4   2   1
 1    1    1    0   0   1   0   1     =  128 + 64 + 32 + 4 + 1  =  229

Ωραία, θεωρώ ότι κάπου εδώ έχετε αποκτήσει πλήρη εξοικείωση με το δυαδικό σύστημα. Αν όχι, προσπαθήστε να μετατρέψετε καμιά δεκαριά τυχαίους αριθμούς από το 0 έως το 255 από το δεκαδικό στο δυαδικό και άλλους δέκα από το δυαδικό (οκταψήφιους) στο δεκαδικό. Μπορείτε να επαληθεύσετε τα αποτελέσματα με binary calculators που κυκλοφορούν δωρεάν στο Internet.

Λογική πράξη AND

Η πράξη AND ή στα ελληνικά ΚΑΙ (απεχθάνομαι κάτι τέτοιες μεταφράσεις, οπότε θα χρησιμοποιώ τον όρο στα αγγλικά) είναι μία λογική πράξη που γίνεται μεταξύ δύο bits. Το αποτέλεσμα είναι επίσης ένα bit. Το αποτέλεσμα της πράξης AND είναι 1 αν και μόνο αν τα δύο συμμετέχοντα στην πράξη bits έχουν τιμή 1. Σε οποιαδήποτε άλλη περίπτωση το αποτέλεσμα είναι 0. Ο πίνακας αληθείας της πράξης AND είναι ο ακόλουθος:


0 AND 0 = 0

1 AND 0 = 0

0 AND 1 = 0

1 AND 1 = 1


Απλό δεν είναι; Η πράξη AND είναι η πράξη που χρησιμοποιείται για τον προσδιορισμό της διεύθυνσης ενός δικτύου με χρήση της μάσκας υποδικτύου.

Προσδιορισμός διεύθυνσης δικτύου και host από μία IP διεύθυνση

Έστω ότι έχω την διεύθυνση 172.16.0.14 με μάσκα υποδικτύου 255.255.0.0. Πώς προσδιορίζεται η διεύθυνση του δικτύου και ο host; Αφού σας παίδεψα με την θεωρία των δυαδικών αριθμών και την λογική πράξη AND, ήρθε η ώρα να τα εφαρμόσουμε και να φτάσουμε επιτέλους σε κάτι πρακτικό και ενδιαφέρον!

Το πρώτο που πρέπει να κάνουμε είναι να παραστήσουμε την δοσμένη διεύθυνση και την μάσκα υποδικτύου σε δυαδικούς αριθμούς. Σας ακούω ήδη να λέτε "Ωχ!". Μην διαβάσετε παρακάτω αμέσως. Κάντε την μετατροπή μόνοι σας και μετά επαληθεύστε το αποτέλεσμά σας! (ναι, ναι, αν δεν πιάσει το χεράκι το μολύβι δεν θα μάθουμε ποτέ, μα ποτέ δυαδικούς, πόσο μάλλον να κάνουμε subneting).

IP διεύθυνση : 10110000.00010000.00000000.00001110 , Μάσκα υποδικτύου: 11111111.11111111.00000000.00000000

Τώρα εκτελούμε για όλα τα bits ένα προς ένα στις αντίστοιχες θέσεις την λογική πράξη AND:

         10110000.00010000.00000000.00001110
 AND     11111111.11111111.00000000.00000000
   =     10110000.00010000.00000000.00000000

Το αποτέλεσμα είναι η ζητούμενη "διεύθυνση δικτύου" ή αλλιώς "network ID", η οποία στο δεκαδικό σύστημα είναι η: 172.16.0.0

Για να βρούμε τον host εργαζόμαστε ως εξής. Στα σημεία όπου η μάσκα υποδικτύου έχει τιμή 1 αγνοούμε τα αντίστοιχα bits της διεύθυνσης. Στα σημεία που η μάσκα υποδικτύου έχει 0 απλά αντιγράφουμε τα bits της διεύθυνσης. Στο συγκεκριμένο παράδειγμα, παρατηρούμε ότι όλα τα bits των δύο πρώτων πεδίων της μάσκας είναι 1, οπότε τα δύο πρώτα πεδία της διεύθυνσης δεν μας ενδιαφέρουν. Τα bits της μάσκας υποδικτύου στα δύο επόμενα πεδία είναι όλα 0. Οπότε, αντιγράφουμε απλά τα αντίστοιχα bits της διεύθυνσης. Οπότε έχουμε: 00000000.00001110 και αν αφαιρέσουμε την τελεία που διαχωρίζει τα πεδία της διεύθυνσης έχουμε τον δυαδικό αριθμό 0000000000001110 ο οποίος στο δεκαδικό σύστημα είναι ο αριθμός 14, που είναι και ο ζητούμενος host. Συνοψίζοντας, βρήκαμε ότι η διεύθυνση 172.16.0.14 με μάσκα υποδικτύου 255.255.0.0 παριστά τον host 14 του δικτύου 172.16.0.0 με μάσκα υποδικτύου 255.255.0.0.

Ξέρω τι σκέφτεστε. Πολύ κακό για το τίποτα. Ήταν προφανές ότι το αποτέλεσμα θα ήταν αυτό που προέκυψε και χωρίς να κάνουμε όλες αυτές τις περίεργες, χρονοβόρες και δύσκολες διαδικασίες. Φυσικά σκοπός ήταν να σας δείξω την μεθοδολογία.

Και για να μην πείτε ότι όλα αυτά είναι άχρηστα, ας δούμε ένα ακόμα παράδειγμα, όπου η μεθοδολογία δίνει απάντηση σε ένα όχι και τόσο προφανές πρόβλημα.

Έχω την διεύθυνση 10.45.167.11 με μάσκα υποδικτύου 255.224.0.0. Ποιόν host ποιανού δικτύου παριστά αυτή η διεύθυνση;

Ακολουθώ την μεθοδολογία, αυτή την φορά χωρίς πολλές εξηγήσεις:

         00001010.00101101.10100111.00001011
 AND     11111111.11100000.00000000.00000000
   =     00001010.00100000.00000000.00000000

Network ID (στο δεκαδικό): 10.32.0.0 με μάσκα υποδικτύου 255.224.0.0 . Host (στο δυαδικό): 01101.10100111.00001011 ή χωρίς τελείες: 011011010011100001011 που στο δεκαδικό είναι ο αριθμός: 894731. Άρα πρόκειται για τον host 894731 του δικτύου 10.32.0.0 με μάσκα υποδικτύου 255.224.0.0. Χμμμ... όχι και τόσο προφανές, ε;

Για όποιον θέλει να εξασκηθεί λίγο, ας κάνει μία προσπάθεια να υπολογίσει τα ίδια για τα παρακάτω:

65.12.117.4 με μάσκα υποδικτύου 255.255.192.0
212.45.0.5 με μάσκα υποδικτύου 255.128.0.0
192.168.11.10 με μάσκα υποδικτύου 255.255.255.30
192.168..4.250 με μάσκα υποδικτύου 255.255.255.27

Καλό brainstorming! :p

Μάσκα υποδικτύου

Μέχρι στιγμής έχουμε αναφέρει και έχουμε χρησιμοποιήσει την μάσκα υποδικτύου χωρίς να αναφέρουμε τι ακριβώς κάνει, ποια είναι η μορφή της και πώς προκύπτει. Ήρθε η στιγμή να δώσουμε απάντηση σε αυτά τα ερωτήματα. Από τα όσα έχουμε πει μέχρι στιγμής έχουμε πάρει μία ιδέα για το τι κάνει μία μάσκα υποδικτύου. Καταρχάς μας διαχωρίζει σε μία IP διεύθυνση την διεύθυνση του δικτύου από τον αριθμό του host.

Κατά δεύτερον καθορίζει τον αριθμό των hosts που μπορεί να περιέχει ένα δίκτυο. Η μάσκα 255.255.255.0 ορίζει ένα δίκτυο με 256 διευθύνσεις (0 έως 255) ενώ η μάσκα 255.0.0.0 ορίζει ένα δίκτυο 16777216 διευθύνσεων!!

Τέλος, αν ήμασταν παρατηρητικοί θα διαπιστώσαμε ότι όλες οι μάσκες υποδικτύου που δώσαμε στα παραδείγματα όταν αναλυθούν σε bits, έχουν όλα τα αριστερότερα bits ίσα με 1 και από ένα σημείο και μετά όλα στα δεξιά γίνονται 0. Πχ η μάσκα 255.255.255.0 είναι στο δυαδικό η 11111111.11111111.11111111.00000000 , η 255.224.0.0 είναι η 11111111.11100000.00000000.00000000 και η 255.255.248.0 είναι η 11111111.11111111.11111000.0 . Αποτελείται δηλαδή από ένα πλήθος άσσων και μετά από ένα πλήθος μηδενικών. Δεν μπορεί ποτέ μετά από μηδενικό να ακολουθήσει άσσος. Οι άσσοι εκτείνονται από την αρχή έως ένα σημείο και μετά όλα τα bits είναι μηδενικά. Αυτός είναι απαράβατος κανόνας για τις μάσκες υποδικτύου. Για παράδειγμα η μάσκα υποδικτύου 255.255.255.160 δεν είναι έγκυρη μάσκα γιατί το 160 στο δυαδικό σύστημα είναι ο αριθμός 10100000, δηλαδή μετά από 0 ακολουθεί 1 το οποίο είπαμε ότι δεν επιτρέπεται.

Αυτή η ιδιαιτερότητα μας επιτρέπει να δίνουμε στην μάσκα υποδικτύου μία πολύ πιο εύχρηστη και σύντομη γραφή. Ανάλογα με το πλήθος των bits της μάσκας που έχουν τιμή 1 γράφουμε την μάσκα υποδικτύου με έναν δεκαδικό αριθμό του οποίου προηγείται το σύμβολο / . Για παράδειγμα, η μάσκα υποδικτύου 255.0.0.0 έχει 8 bits με τιμή 1, οπότε το δίκτυο 10.0.0.0 με μάσκα υποδικτύου 255.0.0.0 το γράφουμε 10.0.0.0/8. Κατ' αντιστοιχία, το δίκτυο 192.168.0.0 με μάσκα υποδικτύου 255.255.255.0 το γράφουμε 192.168.0.0/24 , αφού το 255.255.255.0 περιέχει 24 άσσους. Έτσι, αντί να λέμε "το δίκτυο 192.168.0.0 με μάσκα υποδικτύου 255.255.255.0" θα λέμε απλά "το δίκτυο 192.168.0.0/24" και θα καταλαβαίνει κανείς ότι η μάσκα αποτελείται από 24 bits με τιμή 1, δηλαδή ότι η μάσκα είναι το 255.255.255.0. Αυτός ο τρόπος γραφής στο εξής θα χρησιμοποιείται συχνά στο παρόν άρθρο, κάτι που συμβαίνει άλλωστε στο σύνολο της σχετικής βιβλιογραφίας.

Μία σημαντική ιδιότητα της μάσκας υποδικτύου είναι ότι ανάλογα με τα bits που έχει με τιμή 1 μπορεί να χωρίζει ή αλλιώς να "σπάει" ένα δίκτυο σε άλλα μικρότερα. Αυτό ονομάζεται subneting και είναι αυτό που τελικά πραγματεύεται το παρόν άρθρο.

Network ID και broadcast address

Δύο πολύ βασικές διευθύνσεις σε ένα δίκτυο είναι η διεύθυνση δικτύου (network address) και η broadcast address. Η πρώτη προκύπτει με την διαδικασία της λογικής πράξης AND με την μάσκα υποδικτύου που περιγράφηκε παραπάνω. Είναι μία διεύθυνση που δεν μπορεί να αποδοθεί σε κανέναν host σε ένα δίκτυο και χρησιμοποιείται για να παραστήσει το ίδιο το δίκτυο, όπως υποδηλώνει το όνομά του.

Η broadcast address προκύπτει αν στην διεύθυνση του δικτύου θέσουμε όλα τα host bits ίσα με το 1. Για παράδειγμα, για το δίκτυο 192.168.0.0/24 η broadcast address είναι η 192.168.0.255 . Η broadcast address χρησιμοποιείται για το broadcasting, την διαδικασία δηλαδή κατά την οποία ένας υπολογιστής ή μία δικτυακή συσκευή στέλνει μηνύματα σε όλους τους hosts ενός δικτύου. Ομοίως με τη network address, η διεύθυνση broadcast δεν μπορεί να αποδοθεί σε κανέναν host.

Ειδικά το broadcasting είναι κάτι που δεν θα μας απασχολήσει στο παρόν άρθρο, αν και πολλά μπορούν να γραφτούν για αυτό. Ωστόσο, αυτές οι δύο ειδικές διευθύνσεις, το Network ID και το broadcast address υπαγορεύουν ότι οι αξιοποιήσιμες από τους hosts διευθύνσεις σε ένα δίκτυο είναι πάντα μειωμένες κατά δύο, σε σχέση με το address range ενός δικτύου ή υποδικτύου. Πχ το δικτύου 192.168.0.0/24 έχει address range 192.168.0.0 έως 192.168.0.255, σύνολο 256 διευθύνσεων. Ωστόσο, αφού οι διευθύνσεις 192.168.0.0 και 192.168.0.255 είναι δεσμευμένες για το Network ID και το broadcast address, οι host addresses είναι 256 - 2 = 254. Αντίστοιχα ισχύουν σε όλα τα δίκτυα αλλά και τα υποδίκτυα.

Subneting

Μετά από τόσο κόπο που κάναμε διαβάζοντας το άρθρο μέχρι εδώ, έφτασε η στιγμή να δούμε επιτέλους πώς γίνεται αυτό που ονομάζουμε subneting. Για να γίνει η έννοια πιο κατανοητή θα μπούμε κατευθείαν σε ένα παράδειγμα και θα εξηγήσουμε στην συνέχεια τις μεθόδους που ακολουθούμε.

Ο διαχειριστής του δικτύου του ελληνικού παραρτήματος μιας μεγάλης πολυεθνικής εταιρίας έχει λάβει από τα κεντρικά το δίκτυο 192.168.0.0/24 (θυμηθείτε, μάσκα /24 σημαίνει 255.255.255.0) το οποίο είναι αυτό που μπορεί να χρησιμοποιήσει για όλα τα υποκαταστήματα της εταιρίας στην Ελλάδα. Υπάρχει ένα υποκατάστημα στην Αθήνα με μέγιστο πλήθος χρηστών 126, ένα στην Θεσσαλονίκη με μέγιστο πλήθος χρηστών 62, ένα στην Κρήτη με μέγιστο πλήθος χρηστών 30 και ένα στην Ρόδο με μέγιστο πλήθος χρηστών επίσης 30. Κάθε υποκατάστημα πρέπει να ανήκει σε ξεχωριστό υποδίκτυο για λόγους ασφαλείας και διαχείρισης. Καλούμαστε να παίξουμε τον ρόλο του διαχειριστή δικτύου του ελληνικού παραρτήματος όσο αφορά το subneting.

Το δίκτυο 192.168.0.0/24 παρέχει συνολικά 254 διευθύνσεις. Το συνολικό πλήθος των χρηστών είναι 126 + 62 + 30 + 30 = 248. Οπότε, το αρχικά δοσμένο δίκτυο, με κατάλληλη διάσπαση επαρκεί για την διευθυνσιοδότηση όλων των ελληνικών υποκαταστημάτων. Πώς όμως θα γίνει αυτό; Η λύση είναι... subneting! (τι έκπληξη, ε; )

Αρχικά έχουμε το δίκτυο 192.168.0.0 με μάσκα 255.255.255.0 . Αν χρησιμοποιήσω την μάσκα 255.255.255.128, δηλαδή αν δανειστώ ένα bit από το τελευταίο πεδίο της μάσκας τότε το αρχικό μου δίκτυο σπάει σε δύο υποδίκτυα. Το 192.168.0.0/25 και το 192.168.0.128/25. Το γιατί γίνεται αυτό φαίνεται αν αναλύσουμε τις διευθύνσεις στο δυαδικό σύστημα. Για λόγους συντομίας, αναλύεται μονάχα το τελευταίο πεδίο της διεύθυνσης και της μάσκας υποδικτύου.

                                Network ID         |          Πεδίο διευθύνσεων hosts
192.168.0.0/24 ->                192.168.0.        |       x   x   x   x   x   x   x   x
|
|                                Network ID                  | Πεδίο διευθύνσεων hosts
|                                                            |
+-> 192.168.0.0/25               192.168.0.                0 | x   x   x   x   x   x   x
+-> 192.168.0.128/25             192.168.0.                1 | x   x   x   x   x   x   x

Αυτό που κάναμε είναι να δανειστούμε από το πεδίο των hosts ένα bit για την διεύθυνση του δικτύου. Έτσι, οι hosts δεν έχουν πλέον 8 bits αλλά 7. Η διεύθυνση δικτύου όμως με αυτόν τον τρόπο απέκτησε ένα bit το οποίο μπορεί να πάρει τιμή είτε 0 είτε 1. Ανάλογα με την τιμή αυτού του bit έχουμε και την τιμή του εκάστοτε νέου υποδικτύου, κάθε ένα από το οποίο έχει πλέον μάσκα /25 αντί /24 που είχε το αρχικό. Κι αυτό γιατί όπως είπαμε, έχουμε αυξήσει τον αριθμό των bits που αντιστοιχούν στο Network ID (εις βάρος των host bits). Κάθε ένα από τα 192.168.0.0/25 και 192.168.0.128/25 μπορεί να υποστηρίξει 126 χρήστες. Κρατάμε το υποδίκτυο 192.168.0.0/25 για το υποκατάστημα της Αθήνας. Το δίκτυο 192.168.0.128/25 θα το χρησιμοποιήσουμε για να εξυπηρετήσουμε τα υπόλοιπα υποκαταστήματα με περαιτέρω subneting.

Έχουμε λοιπόν το δίκτυο 192.168.0.128/25 για να υποστηρίξουμε τα υποκαταστήματα της Θεσσαλονίκης, της Κρήτης και της Ρόδου. Αν σπάσω το δίκτυο αυτό σε δύο μικρότερα, τότε θα πάρω δύο νέα που θα υποστηρίζει το καθένα 62 hosts.

                                        Network ID            |   Πεδίο διευθύνσεων hosts
192.168.0.128/25 ->              192.168.0.                1  |  x   x   x   x   x   x   x
|
|                                       Network ID                  | Πεδίο διευθύνσεων hosts
|                                                                   |
+-> 192.168.0.128/26               192.168.0.                1   0  | x   x   x   x   x   x
+-> 192.168.0.192/26               192.168.0.                1   1  | x   x   x   x   x   x

Δανειστήκαμε ακόμα ένα bit από τους hosts αυξάνοντας κατά ένα ακόμα bit την διεύθυνση του δικτύου. Έτσι, από το 192.168.0.128/25 δημιουργήσαμε δύο νέα υποδίκτυα, τα 192.168.0.128/26 και 192.168.1.192/26. Το καθένα από αυτά υποστηρίζει όπως είπαμε 62 hosts. Άρα κρατάω το δίκτυο 192.168.0.128 για να υποστηρίξω το υποκατάστημα της Θεσσαλονίκης, ενώ το 192.168.0.192/26 θα το σπάσω μία τελευταία φορά σε δύο μικρότερα των 30 hosts για να υποστηρίξω τα υποκαταστήματα των νησιών.

                                        Network ID                    |   Πεδίο διευθύνσεων hosts
192.168.0.192/26 ->              192.168.0.                1     1    |     x   x   x   x   x   x
|
|                                       Network ID                       | Πεδίο διευθύνσεων hosts
|                                                                        |
+-> 192.168.0.192/27               192.168.0.                1   1  0    | x   x   x   x   x
+-> 192.168.0.224/27               192.168.0.                1   1  1    | x   x   x   x   x

Τα δύο δίκτυα 192.168.0.192/27 και 192.168.224/27 είναι αυτά που θα χρησιμοποιηθούν για τα δύο νησιά, της Κρήτης και της Ρόδου.

Με αυτό το παράδειγμα έγινε σε μεγάλο βαθμό κατανοητή η διαδικασία του subneting. Το παράδειγμα φυσικά είναι απλό. Για πιο περίπλοκες περιπτώσεις, όπως μας ζητούνται περισσότερα δίκτυα και η διάσπαση σε υποδίκτυα δεν είναι προφανής, είναι χρήσιμο να γνωρίζουμε 3 απλούς κανόνες.

  • Ο πρώτος είναι ότι όταν δανείζομαι x bits (συχνά αναφέρονται ως borrowed bits ή εν συντομία bb) από τους hosts για το network ID, τότε δημιουργώ 2^x νέα υποδίκτυα (με τις ανάλογες μάσκες υποδικτύου φυσικά). Αυτό ισχύει ανεξαρτήτως δικτύου ή μάσκας που έχω κάθε φορά. Στο προηγούμενο παράδειγμα για να σπάσω το 192.168.0.128/25 σε δύο νέα δίκτυα, τα 192.168.0.128/26 και 192.168.0.192/26, δανείστηκα 1 bit (από μάσκα /25 πήγα σε /26). Οπότε δημιούργησα 2^1 = 2 νέα υποδίκτυα. Κατά παρόμοιο τρόπο, αν από το 10.0.0.0/8 πάρω 2 bits δημιουργώ 2^2 = 4 νέα υποδίκτυα, τα 10.0.0.0/10, 10.64.0.0/10, 10.128.0.0/10 και 10.192.0.0/10 (δανείστηκα 2 bits, άρα η μάσκα από /8 έγινε /10 σε κάθε νέο υποδίκτυο).
  • Ο δεύτερος κανόνας είναι ότι όταν δανειστώ x bits για να κάνω ένα subneting, τότε το μέγιστο πλήθος hosts για το κάθε νέο μου υποδίκτυο είναι 2 υψωμένο εις τα εναπομείναντα host bits μείον δύο (για network ID και broadcast address). Δηλαδή, όταν στο παράδειγμα σπάσαμε το 192.168.0.0/24 στα 192.168.0.0/25 και 192.168.0.128/25, το καθένα από αυτά μπορούσε να έχει μέγιστο πλήθος hosts 2^7 - 2 = 126. (διότι 7 είναι τα εναπομείναντα host bits μετά το subneting).
  • Ο τρίτος κανόνας είναι ότι όταν κάνουμε subneting και θέλουμε να δημιουργήσουμε δίκτυα με διαφορετικό πλήθος hosts το καθένα, φροντίζουμε να ικανοποιήσουμε πρώτα την συνθήκη για το μεγαλύτερο από αυτά. Στο παράδειγμά μας, πρώτα κάναμε subneting για να καλύψουμε το υποκατάστημα της Αθήνας που απαιτούσε 126 hosts, μετά της Θεσσαλονίκης με 62 hosts και τέλος τα δύο νησιά με 30 hosts το καθένα. Πάντα λοιπόν ξεκινάμε με την δημιουργία του μεγαλύτερου υποδικτύου και ότι περισσεύει το ξανακάνουμε subneting κατ' απαίτηση ώστε να καλύψουμε τις υπόλοιπες απαιτήσεις, προχωρώντας πάλι από το μεγαλύτερο δίκτυο προς τα μικρότερα.

Οι τρεις αυτοί κανόνες είναι πολύ χρήσιμοι όπως θα δούμε στο επόμενο παράδειγμα, που θα παρουσιάσουμε εν τάχει.

Έχω το δίκτυο 172.16.0.0/16 και θέλω να δημιουργήσω από αυτό ένα δίκτυο με 2000 hosts, και άλλα 4 δίκτυα με ακριβώς 30 hosts το καθένα.

Θέλω να έχω 2000 hosts για το πρώτο δίκτυο και από 30 για τα άλλα 4. Αυτό με τους 2000 hosts είναι το μεγαλύτερο, άρα με αυτό ξεκινάω, όπως μου λέει ο τρίτος κανόνας. Θέλω 2000 hosts. Έστω ότι δανείζομαι x bits από τους hosts. Οπότε οι hosts από τα 16 bits που είχαν πέφτουν στα r=16-x. Απαιτώ λοιπόν, σύμφωνα με τον δεύτερο κανόνα, 2^r - 2 = 2000. Παρατηρώ ότι για r=10 είναι 2^10 - 2 =1022 ενώ για r=11 είναι 2^11 - 2 = 2046. Προφανώς δεν υπάρχει τιμή του r που να μου δίνει ακριβώς 2000, οπότε επιλέγω εκείνη την τιμή του r που δίνει το αμέσως μεγαλύτερο αποτέλεσμα από το ζητούμενο πλήθος hosts. Άρα r=11 και συνεπώς 11=16-x άρα x=5. Δηλαδή θα δανειστώ 5 bits από την μάσκα υποδικτύου του αρχικού δικτύου και έτσι θα πάρω τα δίκτυα 172.16.0.0/21, 172.16.8.0/21, 172.16.16.0/21, 172.16.24.0/21, κοκ. Δεν κάνω αναλυτικά τις πράξεις με τα bits, καθώς θεωρώ ότι έχει καλυφθεί σε παραπάνω παράγραφο. Ωστόσο, αν δεν καταλαβαίνεται γιατί βγαίνουν αυτά τα υποδίκτυα, πάρτε χαρτί και μολύβι και... πιάστε δουλειά!

Το πρώτο υποδίκτυο, δηλαδή το 172.16.0.0/21 το δίνω ως απάντηση στο ερώτημα για το δίκτυο με τους 2000 hosts. Ωστόσο, σημειώστε ότι θα μπορούσα κάλλιστα να δώσω ως απάντηση το δίκτυο 172.16.24.0/26 ή οποιοδήποτε από αυτά που προέκυψαν από αυτό το πρώτο subneting, αφού όλα δίνουν 2000 hosts. Για να δώσω απάντηση στο δεύτερο υποερώτημα, που αφορά τα 4 δίκτυα των 4 hosts παίρνω ένα από τα υπόλοιπα δίκτυα των 2022 hosts. Ας πούμε ότι προτιμάμε να πάρουμε το 172.16.8.0/21. Θέλω δίκτυα με 30 ακριβώς hosts. Πάλι λέω ότι r=11-x (προσοχή, εδώ πλέον τα host bits είναι 11, αφού η μάσκα είναι η /21). Απαιτώ 2^r - 2 = 30 άρα r=5 και συνεπώς από την σχέση 5=11-x άρα x=6 που είναι τα bits που πρέπει να δανειστώ από το 172.16.8.0/21. Οπότε προκύπτουν τα δίκτυα: 172.16.8.0/26, 172.16.8.32/26, 172.16.8.64/26, 172.16.8.96/24, 172.16.8.128/26, 172.16.8.160/26, 172.16.8.192/26, κοκ, οποιαδήποτε τέσσερα από αυτά αποτελούν απάντηση στο δεύτερο υποερώτημα.

Συμπεράσματα

Το subneting είναι ιδιαίτερα χρήσιμο και δεν νοούνται μεγάλα δίκτυα χωρίς την χρήση του. Ειδικά το Internet ως ένα γιγάντιο δίκτυο δεν θα μπορούσε να υπάρξει χωρίς το subneting. Και σε μικρότερα δίκτυα όμως το subneting έχει ιδιαίτερα βαρύνουσα σημασία, σε DMZ στα firewalls, σε διαχωρισμό υποκαταστημάτων, κλπ. Το να κατανοήσει κανείς το subneting δεν είναι εύκολο. Απαιτεί κυρίως εξάσκηση με χαρτί και μολύβι. Αν και κουραστικό στην αρχή, είναι κάτι ιδιαίτερα ενδιαφέρον. Όχι για την διαδικασία υπολογισμού του, αλλά για αυτό που παρέχει σε έναν διαχειριστή ή σχεδιαστή δικτύου ως δυναμικότητα στον χειρισμό της διευθυνσιοδότησης, που είναι ένα μείζον ζήτημα τόσο από πλευράς κόστους όσο και διαχείρισης.

Αν κάποιος δεν έχει κατανοήσει το subneting και δεν έχει ευχέρεια στην χρήση του, δεν μπορεί να προχωρήσει στα ακόμα πιο ενδιαφέροντα πεδία των δικτύων όπως είναι το routing, το firewalling, τα VLANs, κ.α.. Με λίγα λόγια δεν νοείται να θέλει να ασχοληθεί σοβαρά κάποιος με τα δίκτυα υπολογιστών και να μην γνωρίζει από subneting. Ενδιαφέρον ή ανιαρό, για φιλόδοξους administrators ή για μαζόχες κομπιουτεράδες, το subneting είναι από τα ουκ άνευ στην διαχείρηση των σύγχρονων δικτύων.


Originally created by finrod

Για την Κοινότητα Ελ.Λογισμικού ΕΜΠ