Στο τεύχος 004 του deltaHacker ξεκινήσαμε μια νέα σειρά άρθρων πάνω σε θέματα και τεχνολογίες που αφορούν στη δικτύωση. Το πρώτο άρθρο της σειράς εισάγει τον αναγνώστη στη λογική της σουίτας TCP/IP κι εξηγεί πώς η πανίσχυρη ιδέα της στοίβας πρωτοκόλλων κάνει δυνατή την ύπαρξη οσοδήποτε μικρών ή μεγάλων δικτύων, ακόμη και του ίδιου του Internet. Στο δεύτερο άρθρο της σειράς, που δημοσιεύτηκε στο deltaHacker 005, στρέψαμε την προσοχή μας στο Network Layer του λεγόμενου TCP/IP stack και συγκεκριμένα στην έκδοση 4 του πρωτοκόλλου IP ή απλά IPv4. Το παρόν είναι η συνέχεια του έντυπου άρθρου.
Ομαλή εισαγωγή
Δίκτυα μέσα σε δίκτυα
Πρώτη γνωριμία με τα υποδίκτυα
Τα subnets αποκαλύπτονται!
Μικρά μυστικά για τα subnet masks
Καταγραφή όλων των διευθύνσεων ενός υποδικτύου
Ιδιωτικές και δημόσιες διευθύνσεις IP
Σημείωση: Για την καλύτερη κατανόηση όλων όσων ακολουθούν απαιτείται μια εξοικείωση με το δυαδικό σύστημα αρίθμησης, καθώς και με τις μετατροπές μεταξύ δυαδικού και δεκαδικού συστήματος. Αν λοιπόν χρειαστεί, διαβάστε το σχετικό άρθρο.
Ομαλή εισαγωγή
Είδαμε στο τεύχος 005 του deltaHacker ότι οι διευθύνσεις του IPv4 (στο εξής απλά IP) αποτελούνται από δύο μέρη: το αριστερό καθορίζει τη λεγόμενη ταυτότητα ή διεύθυνση δικτύου (network ID ή network address) και το δεξιό την ταυτότητα ή τη διεύθυνση μιας δικτυακής συσκευής εντός του δικτύου (host ID ή host address).
Αν θέλουμε να είμαστε ακριβείς, οφείλουμε να επισημάνουμε ότι μια διεύθυνση IP δεν αντιστοιχεί σε μια συσκευή αλλά σ’ ένα network interface μιας συσκευής. Για παράδειγμα, ένας τυπικός, σύγχρονος υπολογιστής είναι πιθανό να διαθέτει δύο network interfaces: ένα ενσύρματο, μέσω μιας κάρτας Ethernet, καθώς κι ένα ασύρματο, μέσω μιας κάρτας WiFi. Ε, όταν και τα δύο αυτά interfaces είναι ενεργά, τότε σε καθένα αντιστοιχεί και μια διαφορετική διεύθυνση IP ή, όπως λέμε στην καθομιλουμένη, ένα διαφορετικό IP. Για λόγους απλότητας –κι επειδή πραγματικά δεν έχει νόημα για τη συζήτησή μας να υποθέτουμε διαφορετικά–, στη συνέχεια του παρόντος θα ταυτίζουμε μια δικτυακή συσκευή μ’ έναν υπολογιστή, ο οποίος διαθέτει ένα μόνο network interface. (Φυσικά, δεν έχει καμία σημασία αν αυτό είναι ενσύρματο, ασύρματο ή βασισμένο σε καλά πειθαρχημένα ταχυδρομικά περιστέρια. Αυτές είναι λεπτομέρειες που αφορούν στο Link Layer του TCP/IP stack κι όχι στο Network Layer, όπου και κατοικεί το IP. Παρεμπιπτόντως, τι ακριβώς είναι αυτό το TCP/IP stack μπορείτε να μάθετε από το σχετικό άρθρο στο deltaHacker 004.)
Ας δούμε ένα παράδειγμα διεύθυνσης IP. Καθόμαστε μπροστά από έναν υπολογιστή με Windows 7. Ποιο είναι το IP του; Ένας τρόπος για να το δούμε είναι ν’ ανοίξουμε το Control Panel και ν’ ακολουθήσουμε τη διαδρομή Network and Internet –> Network and Sharing Center –> Local Area Connection –> Details. Μεταξύ των πληροφοριών στο παράθυρο Network Connection Details που εμφανίζεται, υπάρχει και η γραμμή IPv4 Address. Στα δεξιά της φαίνεται το IP του υπολογιστή και στο παράδειγμά μας είναι το 192.168.57.101. Ακριβέστερα, επειδή ο υπολογιστής αυτός ανήκει σε ένα τυπικό δίκτυο κλάσης C, το network ID αυτής της διεύθυνσης είναι το μέρος 192.168.57, ενώ το host ID είναι το 101. Για να μιλήσουμε τεχνικά, έχουμε να κάνουμε με το δίκτυο 192.168.57.0 και τον υπολογιστή 0.0.0.101.
Αλλά για μισό λεπτό. Με ποιο κριτήριο πήραμε τα τρία αριστερότερα octets της δεκαδικής αναπαράστασης του IP και είπαμε ότι αυτά καθορίζουν το network ID; Γιατί δηλαδή δεν πήραμε δύο ή ένα octet; Χάθηκε ο κόσμος να λέγαμε ότι έχουμε το δίκτυο 192.168.0.0 και τον υπολογιστή 0.0.57.101 ή ότι έχουμε το δίκτυο 192.0.0.0 και τον υπολογιστή 0.168.57.101; Και προσέξτε, αν μετατρέψουμε τη διεύθυνση IP στην πραγματική της μορφή, που στο συγκεκριμένο παράδειγμα είναι ο δυαδικός αριθμός
11000000 10101000 00111001 01100101
τότε η απόφαση για το πού τελειώνει το network ID και που αρχίζει το host ID φαντάζει ακόμη πιο αυθαίρετη!
Προσέξτε όμως τι γίνεται. Όπως αναφέραμε μόλις, ο υπολογιστής με τα Windows 7 ανήκει σ’ ένα δίκτυο κλάσης C. Για την ακρίβεια συμμετέχει σ’ ένα συνηθισμένο, οικιακό δίκτυο. Σύμφωνα και με όσα συζητήσαμε στο σχετικό άρθρο του deltaHacker 005, η αρχική μέθοδος κατηγοριοποίησης των διευθύνσεων IP τις ήθελε (σχεδόν) όλες τους να εμπίπτουν σε μία από τρεις κλάσεις: A, B και C. Εξ ορισμού, στις διευθύνσεις της κλάσης A δεσμεύονται οκτώ bit από αριστερά για το network ID, στις διευθύνσεις της κλάσης B δεκαέξι bit από αριστερά για το network ID και στις διευθύνσεις της κλάσης C εικοσιτέσσερα bit από αριστερά για το network ID. Στο ίδιο άρθρο είπαμε και πώς ξεχωρίζουμε με μια μόνο ματιά σε ποια κλάση εμπίπτει ένα IP. Δεν χρειάζεται να επαναληφθούμε κι εδώ. Θα υπενθυμίσουμε μόνο ότι, πάλι εξ ορισμού, αν τα τρία bit από αριστερά είναι 110, τότε έχουμε να κάνουμε με διεύθυνση της κλάσης C. Το IP του Windows box όντως ξεκινά με “110” από αριστερά, επομένως ανήκει στην κλάση C. Σ’ αυτήν, τα 24 αριστερότερα bits δεσμεύονται για το network ID. Να λοιπόν γιατί είπαμε ότι το network ID είναι το 192.168.57.0 (11000000 10101000 00111001 00000000) και το host ID το 0.0.0.101 (00000000 00000000 00000000 01100101).
Η προηγούμενη συλλογιστική είναι σωστή για το οικιακό δίκτυο μέσα στο οποίο ανήκει το Windows box του παραδείγματός μας, όμως δεν μπορεί να γενικευτεί. Και δεν μπορεί να γενικευτεί γιατί πλέον η λογική της κατηγοριοποίησης των διευθύνσεων σε τρεις κλάσεις έχει εγκαταλειφθεί!
Σήμερα έχουμε πολύ μεγαλύτερη ευελιξία στον ορισμό του μεγέθους των δικτύων. Για παράδειγμα, ακόμη και σ’ ένα τυπικό, οικιακό δίκτυο ή στο δίκτυο μιας μικρής εταιρείας, είναι δυνατόν να έχουμε επιμέρους δίκτυα ή αλλιώς υποδίκτυα, δηλαδή δίκτυα μέσα σε δίκτυα.
Μπερδευτήκατε; Συνεχίστε το διάβασμα.
Δίκτυα μέσα σε δίκτυα
Όπως εξηγήσαμε στο σχετικό άρθρο του deltaHacker 005, η λογική της κατηγοριοποίησης των IP σε τρεις κλάσεις δεν είναι ό,τι πιο βολικό (από άποψη routing), ούτε ό,τι πιο οικονομικό (από πλευράς κατανομής address space). Η λύση στο πρόβλημα δεν είναι να ορίσουμε περισσότερες κλάσεις. Μια καλύτερη προσέγγιση είναι ν’ αρχίσουμε να βλέπουμε διαφορετικά τα bit του host ID. Αναλυτικότερα, μια ομάδα εξ αυτών από αριστερά μπορούμε να θεωρούμε ότι ορίζουν ένα υποδίκτυο (subnet). Έτσι, αντί να έχουμε δίκτυα (networks) και συσκευές (hosts), σύμφωνα με τη νέα, περισσότερο ευέλικτη θεώρηση έχουμε δίκτυα, υποδίκτυα και μετά συσκευές. Προφανώς, στην ιεραρχία αυτή οι υπολογιστές είναι δυνατόν ν’ ανήκουν σε υποδίκτυα, τα οποία με τη σειρά τους ανήκουν σε ευρύτερα δίκτυα.
Ακριβώς λόγω της εισαγωγής των υποδικτύων, είναι πλέον εφικτό να τμηματοποιούμε ένα δίκτυο σε δύο ή περισσότερα επιμέρους δίκτυα. Προσέξτε: Αυτό δεν έχει αξία μόνο για τα τεράστια δίκτυα που ορίζουν οι διευθύνσεις της κλάσης A (προβλέπονται εκατομμύρια hosts για το καθένα), ούτε για τα πολύ μεγάλα που ορίζουν εκείνες της κλάσης Β (προβλέπονται δεκάδες χιλιάδες hosts για το καθένα). Ακόμη και σ’ ένα μικρό δίκτυο κλάσης C, όπου υπάρχει χώρος για 254 το πολύ υπολογιστές, αρκετές φορές είναι επιθυμητό να συγκροτούμε υποδίκτυα. Για παράδειγμα, σε μια μικρή εταιρεία είναι πιθανό να θέλουμε το εμπορικό τμήμα σε διαφορετικό δίκτυο από εκείνο της γραμματείας. Χάρη στην τεχνική του subnetting, που θα παρουσιάσουμε αναλυτικά παρακάτω, είναι δυνατόν να πάρουμε το δίκτυο κλάσης C της εταιρείας και να το χωρίσουμε σε δύο μικρότερα υποδίκτυα (subnets).
Πρώτη γνωριμία με τα υποδίκτυα
Όλοι οι υπολογιστές που ανήκουν στο ίδιο υποδίκτυο είναι προφανές ότι έχουν διευθύνσεις IP με κοινό “αριστερό μέρος”. Για να το πούμε λίγο τεχνικά, οι υπολογιστές του ίδιου subnet έχουν κοινό γκρουπ πιο σημαντικών bit, όπου το πιο σημαντικό bit απ’ όλα (most significant bit) είναι εκείνο που βρίσκεται στην 32η θέση — αρχίζοντας να μετράμε από δεξιά.
Κατ’ αυτόν τον τρόπο, οι διευθύνσεις IP χωρίζονται πλέον σε δύο μέρη: στο λεγόμενο routing ή network prefix (αριστερά), καθώς και στο host ID ή αλλιώς rest field (δεξιά). Διευθύνσεις με κοινό network prefix ανήκουν σε υπολογιστές που βρίσκονται εντός του ίδιου subnet.
Το network prefix συνήθως εκφράζεται υπό τη μορφή CIDR (Classless Inter-Domain Routing). Για να γίνει κατανοητός ο εν λόγω τρόπος γραφής, ας εξετάσουμε αμέσως ένα παράδειγμα network prefix που γράφεται με τη μορφή CIDR:
192.168.70.0/24
To 192.168.70.0 είναι η πρώτη διεύθυνση του subnet κι ο αριθμός που ακολουθεί το slash (/), δηλαδή στο συγκεκριμένο παράδειγμα το 24, αντιπροσωπεύει το μήκος του network prefix σε bit. Από τα 32bit που έχει συνολικά μια διεύθυνση IPv4, λοιπόν, το /24 σημαίνει ότι μας μένουν 32 – 24 = 8 δεξιότερα bit, τα οποία επιτρέπεται να “παίζουν” ελεύθερα, ταυτοποιώντας διαφορετικά hosts.
Ένας άλλος, ισοδύναμος τρόπος αναπαράστασης του network prefix, επιτυγχάνεται μέσω της λεγόμενης μάσκας δικτύου (network mask ή netmask). Για παράδειγμα, το netmask του δικτύου 192.168.70.0/24 είναι το 255.255.255.0. Μετατρέποντας στο δυαδικό, βλέπουμε ότι έχουμε ακριβώς 24 άσους, ξεκινώντας από αριστερά. Να λοιπόν γιατί σε κάποιες εγκαταστάσεις/ρυθμίσεις λειτουργικών συστημάτων, όταν δεν θέλουμε αυτόματη διευθυνσιοδότηση μέσω DHCP server και πληκτρολογούμε το IP χειροκίνητα, βάζουμε κι ως netmask το 255.255.255.0: Κατ’ αυτόν τον τρόπο δηλώνουμε ότι το μηχάνημα είναι μέλος ενός δικτύου με 254 το πολύ hosts. (Δεν έχει χωρητικότητα 2^8 = 256 hosts, αφού τα host IDs με παντού μηδενικά ή παντού άσους είναι δεσμευμένα για ειδικές χρήσεις.) Σημειώστε εδώ πως όταν η μάσκα δικτύου καθορίζει ένα υποδίκτυο μέσα σ’ ένα ευρύτερο δίκτυο, τότε ονομάζεται επίσης και μάσκα υποδικτύου (subnet mask). Σε πολύ λίγο θα δούμε παραδείγματα χρήσης subnet mask.
Πριν συνεχίσουμε αξίζει να επισημάνουμε ότι προκειμένου να επικοινωνούν οι hosts διαφορετικών subnets, χρησιμοποιούνται ειδικοί υπολογιστές ή συσκευές που ονομάζονται πύλες (gateways). Πρόκειται για τους γνωστούς μας δρομολογητές (routers). Ακριβώς αυτοί είναι που κάνουν δυνατή τη δρομολόγηση των δικτυακών πακέτων μεταξύ διαφορετικών δικτύων ή διαφορετικών υποδικτύων του ίδιου, ευρύτερου δικτύου. Περισσότερα για το πώς δουλεύει το routing θα δούμε σε επόμενο άρθρο της σειράς μας.
Τα subnets αποκαλύπτονται!
Όπως έχει γίνει προφανές, το subnetting είναι μια τεχνική που επιτρέπει την ευέλικτη χρήση των 32bit μιας διεύθυνσης IP με στόχο τη δημιουργία δικτύων που δεν περιορίζονται από την παλιά λογική της κατηγοριοποίησης σε τρεις μόνο κλάσεις διευθύνσεων. Χάρη στο subnetting μπορούμε να χαρακτηρίζουμε ένα ή περισσότερα από τα πιο σημαντικά bit του host ID, με στόχο να επεκτείνουμε ένα υπάρχον network ID κλάσης A, B ή C κι έτσι να έχουμε δίκτυα μέσα σε δίκτυα ή αλλιώς subnets.
Βεβαίως, για να δουλέψει το subnetting στην πράξη ο router κάθε δικτύου πρέπει να γνωρίζει ποια bit του host ID ορίζουν την ταυτότητα υποδικτύου (subnet ID). Ακριβέστερα, αυτό που πρέπει να γνωρίζει είναι από πού στο καλό αρχίζει το host ID μιας διεύθυνσης IP, στο δίκτυο που βρίσκεται πίσω του. Τον διαχωρισμό λοιπόν μιας διεύθυνσης IP σε network prefix από τ’ αριστερά και host ID από τα δεξιά, τον πετυχαίνει χάρη στη μάσκα υποδικτύου (subnet mask). Αυτό το subnet mask είν’ ένας αριθμός μήκους 32bit, ο οποίος ξεκινά από αριστερά μόνο με άσους (1) κι από κάποια θέση κι έπειτα έχει μόνο μηδενικά (0). Οι άσοι αντιστοιχούν στο network prefix μιας διεύθυνσης IP, ενώ τα μηδενικά στο host ID.
Στο παράδειγμα που δώσαμε πριν λίγο, ως subnet mask είχαμε το 255.255.255.0 ή αλλιώς το
11111111 11111111 11111111 00000000
στο δυαδικό. Για την ακρίβεια το 255.255.255.0 δεν είναι subnet mask αλλά ένα απλοϊκό netmask, αφού ορίζει ένα τυπικό δίκτυο κλάσης C κι όχι κάποιο υποδίκτυο. Ας δούμε τώρα ένα παράδειγμα αληθινού subnet netmask: 255.255.255.224. Το μέγεθος του δικτύου που ορίζει, το βρίσκουμε μετατρέποντας στο δυαδικό:
11111111 11111111 11111111 11000000
Βλέπουμε λοιπόν ότι έχουμε έξι μόνο μηδενικά στα δεξιά, επομένως το συγκεκριμένο subnet mask καθορίζει ένα υποδίκτυο με 2^6 – 2 = 62 το πολύ μηχανήματα. Προφανώς, πρόκειται για ένα subnet ενός παλιομοδίτικου δικτύου κλάσης C (με χωρητικότητα 2^8 – 2 = 254 μηχανήματα).
Ας δούμε κι άλλο ένα παράδειγμα subnet mask: το 255.255.252.0 ή αλλιώς
11111111 11111111 11111100 00000000
στο δυαδικό. Αυτή τη φορά, τα μηδενικά στα δεξιά είναι αρκετά: Περισσότερα από τα 6 του προηγούμενου παραδείγματος, περισσότερα από τα 8 ενός τυπικού δικτύου κλάσης C — αλλά λιγότερα από τα 16 ενός δικτύου κλάσης B. Έχουμε, για την ακρίβεια, ένα subnet mask με δέκα μηδενικά στα δεξιά, το οποίο περιγράφει ένα υποδίκτυο με 2^10 – 2 = 1022 hosts. Σίγουρα είναι πολλά μηχανήματα για ένα μόνο δίκτυο, από την άλλη όμως είναι πάρα πολύ λιγότερα από τα (2^16 – 2 =) 65534 hosts ενός δικτύου κλάσης B!
Είδαμε λοιπόν πώς ένα subnet mask ορίζει το μέγεθος ενός υποδικτύου. Ας δούμε τώρα πώς από μια διεύθυνση IP –και με δεδομένο το subnet mask– ξεχωρίζει ο router το network prefix. Ουσιαστικά, αυτό που κάνει είναι να εφαρμόζει τη λογική πράξη AND μεταξύ των αντίστοιχων bit του subnet mask και του IP. Η λογική πράξη AND δουλεύει ως εξής:
0 AND 0 = 0 1 AND 0 = 0 0 AND 1 = 0 1 AND 1 = 1
Ας δούμε ένα παράδειγμα. Ο router στο οικιακό δίκτυο του γράφοντα, ως subnet mask έχει το 255.255.255.0. Πιθανότατα το ίδιο subnet mask έχει κι ο δικός σας router. Από κει και πέρα, αναλόγως του πώς είναι στημένο το οικιακό δίκτυο, τα μηχανήματα πίσω από τον router έχουν διευθύνσεις IP της μορφής 192.168.0.* ή 192.168.1.* ή 10.0.0.* κ.ο.κ. Ας εξετάσουμε μια συγκεκριμένη περίπτωση, όπου ο router έχει να στείλει ένα πακέτο στο μηχάνημα με IP το 192.168.1.25. Ενώ εμείς, ως κάτοχοι του router και διαχειριστές του τοπικού δικτύου, μπορούμε αμέσως να συμπεράνουμε ότι η διεύθυνση αυτή προέρχεται από το δίκτυο 192.168.1.0 και συγκεκριμένα ανήκει στο μηχάνημα με host ID το 0.0.0.25, ο καημένος ο router δεν είναι σε θέση να έχει τη δική μας αντίληψη για τα πράγματα. Για την ακρίβεια, δεν έχει καθόλου αντίληψη για τίποτε. Το ίδιο χάλια είναι και το επίπεδο των γνώσεών του. Αν και ομολογουμένως η κατάστασή του είναι απελπιστική, δεν μπορεί ν’ αποφύγει το καθήκον του επικαλούμενος άγνοια: Με κάποιο τρόπο πρέπει να ξεχωρίσει το network prefix απ’ αυτό το 192.168.1.25. Εδώ που τα λέμε, αν δεν μπορεί να το κάνει τότε τι σόι router είναι; Ευτυχώς ξέρει να χειρίζεται καλά τους δυαδικούς αριθμούς, ενώ γνωρίζει και πώς δουλεύει η λογική πράξη AND. Ακολούθως φαίνεται ξεκάθαρα η μεθοδολογία του:
Διεύθυνση IP σε dotted decimal: 192.168.1.25 Subnet mask σε dotted decimal: 255.255.255.0 Διεύθυνση IP στο δυαδικό: 11000000 10101000 00000001 00011001 Subnet mask στο δυαδικό: 11111111 11111111 11111111 00000000 ----------------------------------------λογικό AND ανά ζεύγος ομότιμων bit- network prefix στο δυαδικό: 11000000 10101000 00000001 00000000 network prefix σε dotted decimal: 192.168.1.0
Το παράδειγμα που μόλις είδαμε ήταν βγαλμένο από ένα οικιακό δίκτυο και μ’ αυτά είμαστε λίγο πολύ εξοικειωμένοι. Αν τώρα αρχίσουμε να εξετάζουμε πιο “ιδιαίτερα” δίκτυα, τότε με το που θα βλέπουμε κάποιο IP δεν θα είναι εύκολο να καταλαβαίνουμε με την πρώτη ποιο είναι το network prefix. Όμως ο router ενός τέτοιου δικτύου δεν θα χρειάζεται κάτι περισσότερο από το subnet mask για να βγάζει άκρη. Δείτε, π.χ., το δίκτυο που ορίζει το subnet mask 255.255.255.224 και πόσο εύκολα ξεχωρίζει ο router το network prefix από τη διεύθυνση 10.0.8.150:
Διεύθυνση IP σε dotted decimal: 10.0.8.150 Subnet mask σε dotted decimal: 255.255.255.224 Διεύθυνση IP στο δυαδικό: 00001010 00000000 00001000 10010110 Subnet mask στο δυαδικό: 11111111 11111111 11111111 11100000 ----------------------------------------λογικό AND ανά ζεύγος ομότιμων bit- network prefix στο δυαδικό: 00001010 00000000 00001000 10000000 network prefix σε dotted decimal: 10.0.8.128
Αλήθεια, μπορούσατε εσείς να καταλάβετε με μια ματιά ότι όταν το subnet mask είναι 255.255.255.224, τότε το μηχάνημα με 10.0.8.150 ανήκει στο δίκτυο 10.0.8.128;
Μικρά μυστικά για τα subnet masks
Ένα subnet mask δεν πρέπει να συγχέεται με κάποια διεύθυνση IP γιατί, πολύ απλά, δεν είναι. Το subnet mask δεν αντιστοιχεί σε κάποιο δίκτυο ή σε κάποια συσκευή. Απλά, σε συνδυασμό με μια διεύθυνση IP βοηθά στον προσδιορισμό του network prefix. Είπαμε προηγουμένως ότι κάθε subnet mask ξεκινά από αριστερά με διαδοχικούς άσους κι από ένα σημείο και μετά έχει μόνο μηδενικά. Επιπρόσθετα, υπάρχουν τρία χαρακτηριστικά των subnet masks που αξίζει να έχουμε κατά νου.
1. Το ελάχιστο πλήθος των άσων είναι 8. (Μπορείτε να φανταστείτε γιατί;) Αποτέλεσμα του περιορισμού αυτού είναι ότι κάθε subnet mask σε μορφή dotted decimal ξεκινά πάντα με το 255.
2. Το μέγιστο πλήθος των άσων είναι 30. Πράγματι, αν είχαμε 32 άσους τότε δεν θα έμενε καθόλου χώρος για την περιγραφή hosts, επομένως ένα τέτοιο subnet mask δεν θα είχε κανένα λόγο ύπαρξης — εκτός ίσως από το να περιγράψει το κενό δίκτυο. Αλλά το “κενό δίκτυο” είναι μια συνολοθεωρητική έννοια που ενδιαφέρει περισσότερο τους μαθηματικούς, παρά τους μηχανικούς δικτύων. (Κρίμα, αυτοί χάνουν.) Συνεχίζοντας τη συλλογιστική μας για το μέγιστο πλήθος άσων, ένα subnet mask με 31 άσους θα άφηνε χώρο μόνο για τα host IDs 0.0.0.0 και 0.0.0.1. Γενικά, η διεύθυνση 0.0.0.0 επιδέχεται ειδικές ερμηνείες (περιγράφει, π.χ., το ίδιο το δίκτυο ή έναν υπολογιστή που δεν έχει πάρει ακόμα IP). Από την άλλη, ένα host ID που περιέχει μόνον άσους είναι δεσμευμένο για τη λεγόμενη διεύθυνση εκπομπής (broadcast address) του δικτύου. Τέλος, με ένα subnet mask που περιλαμβάνει 30 το πολύ άσους, μένει πάντα χώρος για τουλάχιστον 2^(32-30) – 2 = 2 έγκυρα host IDs.
3. Επειδή το subnet mask ξεκινά πάντα με διαδοχικούς άσους και μετά έχει μόνο μηδενικά, για κάθε octet ενός subnet mask υπάρχουν εννέα μόνο πιθανές τιμές. Είναι ακριβώς αυτές που παρατίθενται στον ακόλουθο πίνακα:
Α/Α Δυαδική οκτάδα Δεκαδική τιμή --------------------------------- 1 00000000 0 2 10000000 128 3 11000000 192 4 11100000 224 5 11110000 240 6 11111000 248 7 11111100 252 8 11111110 254 9 11111111 255
Καταγραφή όλων των διευθύνσεων ενός υποδικτύου
Ένας βολικός τρόπος να φανταζόμαστε τα subnets, είναι να τα θεωρούμε ως συλλογές διευθύνσεων IP οι οποίες έχουν κοινό network prefix. Ας βρούμε, π.χ., το σύνολο των διευθύνσεων που ορίζει το network prefix 172.16.5.0/28.
Κατ’ αρχάς, παρατηρούμε ότι το subnet mask του δικτύου έχει 28 άσους. Έτσι, έχουμε 32-28 = 4 ελεύθερα bit για host IDs. Συνολικά λοιπόν ορίζονται 2^4 = 16 διαφορετικά host IDs. Από αυτά αφαιρούμε τα δύο ειδικού τύπου, έτσι μένουν 14 διαφορετικά host IDs — φυσικά για 14 διαφορετικά μηχανήματα. Για να τα καταγράψουμε όλα, μετατρέπουμε πρώτα το network prefix, που για το παράδειγμά μας, είναι το 172.16.5.0, σε δυαδική μορφή:
10101100 00010000 00000101 00000000
Τα τέσσερα bit από δεξιά επιτρέπεται να παίζουν, άρα το πρώτο από δεξιά δυαδικό octet των διευθύνσεων έχει τη γενική μορφή
0000****
κι όλα τ’ άλλα μένουν ως έχουν. Κάθε αστεράκι είναι 0 ή 1, επομένως όλα τα δυνατά host IDs είναι τα ακόλουθα:
00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111
Το πρώτο (00000000) και το τελευταίο (00001111) δεν είναι επιτρεπτά για hosts, επομένως μετατρέποντας στο δεκαδικό παίρνουμε όλες τις διευθύνσεις IP του δικτύου:
172.16.5.1 172.16.5.2 172.16.5.3 172.16.5.4 172.16.5.5 172.16.5.6 172.16.5.7 172.16.5.8 172.16.5.9 172.16.5.10 172.16.5.11 172.16.5.12 172.16.5.13 172.16.5.14
Στο σημείο αυτό γίνεται προφανές πως όταν το δεξιότερο octet του network prefix είναι 0, τότε είναι πολύ εύκολο να βρίσκουμε όλες τις διευθύνσεις IP του subnet: Αρκεί να απαριθμούμε ξεκινώντας από το host ID 1 και προσθέτοντας διαδοχικά μία μονάδα, έως ότου πάρουμε ένα πλήθος διευθύνσεων που ισούται με το μέγιστο επιτρεπτό πλήθος host IDs μείον 2. Ιδού κι ένα γρήγορο παράδειγμα: Το network prefix 192.168.0.0/29 περιλαμβάνει τα ακόλουθα (2^(32-29) – 2 =) 6 host IDs:
192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 192.168.0.6
(Το 192.168.0.0 αντιστοιχεί σ’ ολόκληρο το subnet, ενώ το 192.168.0.7 είναι η διεύθυνση εκπομπής του δικτύου.)
Τώρα, τα πράγματα είναι λίγο πιο περίπλοκα όταν το δεξιότερο octet του network prefix δεν είναι 0. Επίσης, σε μορφή CIDR δεν εκφράζονται μόνο τα subnets, αλλά και μεμονωμένες διευθύνσεις IP. Μην σας φαίνεται παράξενο: Σε προηγούμενο παράδειγμα αναφερθήκαμε στο μηχάνημα με IP το 10.0.8.150, ενός δικτύου με subnet mask το 255.255.255.224. Θα μπορούσαμε να είχαμε γράψει 10.0.8.150/255.255.255.224 ή απλά 10.0.8.150/27 σε μορφή CIDR, αφού αν μετατρέψουμε το subnet mask στο δυαδικό βλέπουμε ότι το πλήθος των άσων είναι 27. Προφανώς, το 10.0.8.150/27 ορίζει μονοσήμαντα ένα μηχάνημα κάποιου subnet, το οποίο subnet από κάποια διεύθυνση αρχίζει, σε κάποια τελειώνει κι έχει συγκεκριμένη χωρητικότητα hosts.
Πώς λοιπόν από μια διεύθυνση σαν την 10.0.8.150/27, βρίσκουμε το δίκτυο “γύρω γύρω”; Κατ’ αρχάς, ξεκινάμε γράφοντας τη διεύθυνση IP και το subnet mask στις αντίστοιχες δυαδικές τιμές:
διεύθυνση IP: 00001010 00000000 00001000 10010110 subnet mask: 11111111 11111111 11111111 11100000 ----------------λογικό AND ανά ζεύγος ομότιμων bit- network prefix: 00001010 00000000 00001000 10000000
Εφαρμόζοντας το λογικό AND στα αντίστοιχα bit, εξάγαμε το network prefix από τη διεύθυνση IP, το οποίο σε μορφή dotted decimal είναι
10.0.8.128
Ουσιαστικά, αυτή είναι η πρώτη διεύθυνση του ζητούμενου subnet. Συνεχίζουμε υπολογίζοντας τη χωρητικότητά του, η οποία με βάση το πλήθος των άσων στο subnet mask (27) είναι 2^(32-27) – 2 = 30. Το δικτυάκι μας, λοιπόν, χωράει 30 μηχανήματα και οι διευθύνσεις τους βρίσκονται προσθέτοντας τα 1, 2, …, 30 στο 128, δηλαδή στο δεξιότερο octet του network prefix. Τελικά, λοιπόν, γράφοντας 10.0.8.150/27 εννοούμε ένα μηχάνημα από ένα δίκτυο με τα ακόλουθα hosts:
10.0.8.129 10.0.8.130 10.0.8.131 10.0.8.132 10.0.8.133 10.0.8.134 10.0.8.135 10.0.8.136 10.0.8.137 10.0.8.138 10.0.8.139 10.0.8.140 10.0.8.141 10.0.8.142 10.0.8.143 10.0.8.144 10.0.8.145 10.0.8.146 10.0.8.147 10.0.8.148 10.0.8.149 10.0.8.150 10.0.8.151 10.0.8.152 10.0.8.153 10.0.8.154 10.0.8.155 10.0.8.156 10.0.8.157 10.0.8.158
Η διεύθυνση δικτύου είναι η 10.0.8.128 (και τα 5 bit του host ID είναι 0), ενώ η διεύθυνση εκπομπής είναι η 10.0.8.159 (και τα 5 bit του host ID είναι 1).
Ιδιωτικές και δημόσιες διευθύνσεις IP
Κάθε υπολογιστής ή γενικότερα συσκευή που συνδέεται απευθείας στο Internet, πρέπει να έχει μια μοναδική διεύθυνση IP. Ο υπολογιστής σας, πάντως, στοιχηματίζουμε ότι δεν συνδέεται απευθείας στο Internet. Το ίδιο κι εκείνος του γράφοντα. Υπάρχουν για την ακρίβεια εκατομμύρια συσκευές, οι οποίες βρίσκονται πίσω από routers και βγαίνουν στο Internet μέσω αυτών. Όλες αυτές δεν χρειάζεται να έχουν μοναδικές, δημόσιες (public) διευθύνσεις IP. Πρέπει, ωστόσο, να έχουν κάποια διεύθυνση IP. Ε, ακριβώς για το σκοπό αυτό έχουν καθοριστεί ορισμένα σύνολα ή μπλοκ ιδιωτικών (private) διευθύνσεων. Είναι αυτά που φαίνονται στον ακόλουθο πίνακα.
Δίκτυο σε μορφή CIDR Subnet mask Εύρος διευθύνσεων ----------------------------------------------------------------------------- 10.0.0.0/8 255.0.0.0 10.0.0.1 - 10.255.255.254 172.16.0.0/12 255.240.0.0 172.16.1.1 - 172.31.255.254 192.168.0.0/16 255.255.0.0 192.168.0.1 - 192.168.255.254
Προφανώς, διαφορετικά τοπικά (ιδιωτικά) δίκτυα επιτρέπεται να έχουν μηχανήματα με τις ίδιες ιδιωτικές διευθύνσεις IP. Ούτως ή άλλως, για τη δρομολόγηση πακέτων μεταξύ μηχανημάτων που έχουν ίδια ιδιωτικά IPs αλλά βρίσκονται σε διαφορετικά ιδιωτικά δίκτυα, υπεύθυνοι είναι οι routers.
Όπως προαναφέραμε, το πώς ακριβώς δουλεύουν οι routers θα μάθουμε σε επόμενο άρθρο της σειράς μας, που θα δημοσιευτεί στο περιοδικό.
Σας άρεσε το άρθρο; Αν ναι, τι θα λέγατε για ένα tip στο PayPal;
27 Responses to “Πώς δουλεύουν τα δίκτυα: Διευθύνσεις IP και δίκτυα μέσα σε δίκτυα (μέρος β’)”
Comment Link
“Τα τέσσερα bit από δεξιά επιτρέπεται να παίζουν, άρα το πρώτο από δεξιά δυαδικό octet των διευθύνσεων έχει τη γενική μορφή
0000****
κι όλα τ’ άλλα μένουν ως έχουν. Κάθε αστεράκι είναι 0 ή 1, επομένως όλα τα δυνατά host IDs είναι τα ακόλουθα:
00000000 00000001 00000010 00000011 00000100
00000101 00000110 00000111 00001000 00001001
00001010 00001011 00001100 00001101 00001111”
ξέχασες το 1110 :P
Comment Link
Έχεις απόλυτο δίκιο — το πρόσθεσα ήδη.
Ευχαριστώ για την επισήμανση!
Comment Link
πες μου μόνο ότι το IPv6 έχει ίδιους ή παρόμοιους κανόνες και δεν είναι καινούριο στόρυ. αυτό.
Comment Link
Δίκτυο σε μορφή CIDR Subnet mask Εύρος διευθύνσεων
—————————————————————————————————-
10.0.0.0/8 255.0.0.0 10.0.0.1 – 10.255.255.254
172.16.0.0/12 255.240.0.0 172.16.1.1 – 172.31.255.254
192.168.0.0/16 255.255.0.0 192.168.0.1 – 192.168.255.254
Comment Link
Ας μου επιτρέψει ο subZraw να σας βάλω και μια άσκηση εδώ λοιπόν :)
Έστω ότι σας έχουν αναθέσει να σχεδιάσετε το εσωτερικό δίκτυο της εταιρείας στην οποία εργάζεστε. Η εταιρεία αυτή έχει στην κατοχή της την network IP 194.100.0.0 και αποτελείται από 4 διαφορετικά τμήματα: το λογιστήριο, το τμήμα πωλήσεων, το τμήμα μάρκετινγκ και το τμήμα ανάπτυξης λογισμικού. Θέλουμε να φτιάξουμε 4 subnets, ώστε κάθε τμήμα της να ανήκει σε διαφορετικό για να είναι διαχωρισμένα μεταξύ τους.
α) Τι subnet mask θα χρειαστούμε; Γράψτε το σε δεκαδική (πχ 255.255.255.0) και CIDR (πχ /24) μορφή.
β) Μέχρι πόσους υπολογιστές (hosts) μπορούμε να έχουμε σε κάθε ένα από αυτά τα subnets; (δηλαδή σε κάθε τμήμα της εταιρείας).
γ) Ποιό θα είναι το εύρος διευθύνσεων σε κάθε subnet; (πχ 1ο: 194.100.0.1-194.100.0.10, 2ο: 194.100.0.50-194.100.0.60, 3ο… κλπ).
Περιμένω τις απαντήσεις σας ;)
Comment Link
http://pastebin.com/nE2A6s6a
Comment Link
Είναι σωστό;
Comment Link
Καταρχην γνωριζω οτι το αρθρο και το σχολιο ειναι αρχαια, αλλα ειμαι ο μονος που βρισκω την ασκηση λαθος; Πρωτα απο ολα για να σχεδιασεις ενα εσωτερικο δικτυο και να υπολογισεις την subnet mask που θα χρησιμοποιησεις, πρεπει να ξερεις ποσες συσκευες hosts θα υπαρχουν σε καθε υποδικτυο πανω κατω. Και επειτα το γεγονος οτι η εταιρια εχει στην κατοχη της μια στατικη ΙΡ 194.100.0.0 δεν παιζει κανενα ρολο αφου αυτη ειναι η εξωτερικη ΙΡ της εταιριας και το εσωτερικο δικτυο με τα υποδικτυα θα εχει διαφορετικες ΙΡ.
Comment Link
Πότε βγαίνει το επόμενο μέρος;
Comment Link
Real soon (I hope :S)
Comment Link
καλησπερα
ψαχνω το μερος Α αλλα δεν το βρισκω..
Comment Link
Όπως γράφει και στην εισαγωγή του παρόντος, το πρώτο μέρος είναι δημοσιευμένο στο τεύχος 005 του deltaHacker (http://deltahacker.gr/2012/02/09/deltahacker005). Ιδού και η εισαγωγή του αντίστοιχου άρθρου:
http://deltahacker.gr/?p=4300
Comment Link
ναι την εισαγωγη την ειχα δει και γω:)
για ολοκληρο το αρθρο πρεπει να αγορασω το τευχος 005?
Comment Link
Βεβαίως. Αρκετά από τα άρθρα που δημοσιεύονται στο site αποτελούν συμπληρώματα άρθρων ή αφιερωμάτων του περιοδικού.
Το περιοδικό είναι συνδρομητικό, βγαίνει 12 φορές το χρόνο και ταχυδρομείται στους αναγνώστες του μέσω ΕΛΤΑ. Περισσότερα για τις διαθέσιμες συνδρομές μπορείς να δεις στο
http://deltahacker.gr/subscriptions
Οι παραγγελίες μεμονωμένων τευχών ή συνδρομών γίνονται αποκλειστικά online, από το
http://deltahacker.gr/order
Για οποιαδήποτε διευκρίνιση ή απορία, μη διστάσεις να μας ρωτήσεις.
Comment Link
οκ ευχαριστω για την βοηθεια!
Comment Link
Καλησπέρα. Βρε παιδιά συγχωρείστε με αλλά από το πολύ διάβασμα έχασα το μυαλό μου!
2^(32-27) – 2 εμένα γιατί μου βγαίνει 23 και όχι 30?
Comment Link
Και πάμε παλι. Υπολόγιζα λάθος, αυτή η μετατροπή στο δυαδικό θέλει λίγο καιρο να τη συνηθίσεις
Comment Link
Καλησπέρα και από εμένα.Σήμερα μπήκα στο site σας πρώτη φορά και ενθουσιάστηκα.Συγχαρητήρια.Θέλω να παραγγείλω το 004 για να δω όλο το άρθρο.Θα ήθελα να μου πει κάποιος αν όχι ο Ion αν υπάρχει κάπου η λύση της άσκησης που έβαλε ή αν ή λύση του giwrg98 είναι σωστή.Ευχαριστώ
Comment Link
Καλησπέρα φίλε μας — και καλωσήρθες στην κοινότητά μας :)
Comment Link
Μπερδεύτηκα το 004 ή το 005 έχει όλο το άρθρο?
Comment Link
Το 1ο μέρος του άρθρου είναι στο τεύχος 004. Αυτό που μόλις διάβασες είναι το 2ο μέρος.
Comment Link
Άρα θέλω και τα δύο.Ευχαριστώ
Comment Link
Χμ, από όσα λες καταλαβαίνω ότι θέλεις μόνο το τεύχος 004. Γενικά, τα περιεχόμενα όλων των τευχών που έχουν κυκλοφορήσει μπορείς να τα βλέπεις στο http://deltahacker.gr/category/magazine-issues. Από εκεί μπορείς να διαβάζεις και τις εισαγωγές των αντίστοιχων άρθρων.
Comment Link
καλησπέρα
μπορεί κάποιος να με βοηθήσει με αυτή την άσκηση;
σπουδάζω ηλεκτρολόγος μηχανικός και δεν έχουμε κάνει μάθημα εδώ και 1.5 μήνα λόγω του ότι δεν υπάρχει καθηγητής. διάβασα το άρθρο αλλά χρειάζομαι λίγη βοήθεια αν είναι δυνατόν.
ευχαριστώ εκ των προτέρων.
Έστω υπολογιστής με διεύθυνση 190.15.85.1 και μάσκα υποδικτύου
265.265.265.192
Ζητείται να βρείτε τη σχέση του υπολογιστή αυτή με τους εξής άλλους υπολογιστές :
(α) 150.120.11.23
(β) 190.15.85.22
(γ) 190.15.85.240
(δ) πόσα υποδίκτυα μπορούν να υπάρχουν σε αυτό το δίκτυο και πόσους υπολογιστές μπορεί να έχει το κάθε υποδίκτυο;
Comment Link
Μου φάνηκαν λάθος τα 265 στη μάσκα υποδικτύου καθώς το 265 δεν μπορεί να παρασταθεί με 8 μόνο Bits.
Comment Link
Προφανώς είναι τυπογραφικό λάθος.
Δοκίμασε με mask 255.255.255.192
Comment Link
Πολύ καλό και κατατοπιστικό άρθρο.
Ξέρω ότι το άρθρο είναι λίγο παλιό αλλά σα γνήσιος και πιστός τεμπέλης νομίζω υπάρχει καλύτερη και ταχύτερη μέθοδος για τον υπολογισμό των υποδικτύων. Η μάσκα υποδικτύου μπορεί να υπολογιστεί ως εξής (αντί του πολύπλοκου ANDing που αναφέρεται στο άρθρο). Έστω ότι έχω ένα υποδίκτυο κλάσης C (δηλ. 256 διευθύνσεις) και θέλω να το χωρίσω σε μικρότερα υποδίκτυα π.χ. 4. Τότε μπορούμε να πούμε 256/4=64. Αυτές θα είναι και διαθέσιμες διευθύνσεις του κάθε υποδικτύου (64). Τώρα στη μάσκα θα πούμε 255.255.255.(256-64) = 255.255.255.192 ! Έτσι αν θέλω να το χωρίσω σε δύο υποδίκτυα 256/2=128 –> Μάσκα 255.255.255.(256-128) = 255.255.255.128 κ.ο.κ. Τέλος σε σχέση με το CIDR notation (/24, /25 κλπ) αρκεί να θυμόμαστε ότι το /24 είναι ένα δίκτυο 256 διευθύνσεων και από κει και πέρα κάθε φορά που αυξάνουμε τον αριθμό κατά 1 μονάδα το δίκτυο υποδιπλασιάζεται (δηλ. 1/2, 1/4, 1/8 κλπ) -subnets- και κάθε φορά που μειώνουμε τον αριθμό κατά μια μονάδα το δίκτυο διπλασιάζεται (2, 4, 8 κλπ) -supernets- μέχρι να φτιάξουμε ένα δίκτυο που θα έχει όλες τις διευθύνσεις που μας επιτρέπεται στην κλάση C (65536!). Επίσης θα πρέπει να πούμε ότι επιτρέπονται και οι συνδυασμοί των δύο αυτών netmasks μας δίνουν τη δυνατότητα να διαιρούμε ή να πολλαπλασιάζουμε τα δίκτυά μας με περισσότερους τρόπους. Επειδή δεν υπάρχει χώρος να τα αραδιάσω εδώ αξίζει κανείς να πειραματιστεί με τα netmasks σε αυτό το link http://jodies.de/ipcalc .