Το προφίλ μας στο Google Plus
27

Πώς δουλεύουν τα δίκτυα: Διευθύνσεις IP και δίκτυα μέσα σε δίκτυα (μέρος β’)

Στο τεύχος 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 στην πραγματική της μορφή, που στο συγκεκριμένο παράδειγμα είναι ο δυαδικός αριθμός

<br />
11000000 10101000 00111001 01100101<br />

τότε η απόφαση για το πού τελειώνει το 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 του παραδείγματός μας, όμως δεν μπορεί να γενικευτεί. Και δεν μπορεί να γενικευτεί γιατί πλέον η λογική της κατηγοριοποίησης των διευθύνσεων σε τρεις κλάσεις έχει εγκαταλειφθεί!

Σήμερα έχουμε πολύ μεγαλύτερη ευελιξία στον ορισμό του μεγέθους των δικτύων. Για παράδειγμα, ακόμη και σ’ ένα τυπικό, οικιακό δίκτυο ή στο δίκτυο μιας μικρής εταιρείας, είναι δυνατόν να έχουμε επιμέρους δίκτυα ή αλλιώς υποδίκτυα, δηλαδή δίκτυα μέσα σε δίκτυα.

Μπερδευτήκατε; Συνεχίστε το διάβασμα.

Το IP ενός Windows box που ανήκει σ' ένα τυπικό δίκτυο κλάσης C (subnet mask 255.255.255.0).

(επιστροφή στην αρχή)

Δίκτυα μέσα σε δίκτυα

Όπως εξηγήσαμε στο σχετικό άρθρο του 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:

<br />
192.168.70.0/24<br />

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 ή αλλιώς το

<br />
11111111 11111111 11111111 00000000<br />

στο δυαδικό. Για την ακρίβεια το 255.255.255.0 δεν είναι subnet mask αλλά ένα απλοϊκό netmask, αφού ορίζει ένα τυπικό δίκτυο κλάσης C κι όχι κάποιο υποδίκτυο. Ας δούμε τώρα ένα παράδειγμα αληθινού subnet netmask: 255.255.255.224. Το μέγεθος του δικτύου που ορίζει, το βρίσκουμε μετατρέποντας στο δυαδικό:

<br />
11111111 11111111 11111111 11000000<br />

Βλέπουμε λοιπόν ότι έχουμε έξι μόνο μηδενικά στα δεξιά, επομένως το συγκεκριμένο subnet mask καθορίζει ένα υποδίκτυο με 2^6 – 2 = 62 το πολύ μηχανήματα. Προφανώς, πρόκειται για ένα subnet ενός παλιομοδίτικου δικτύου κλάσης C (με χωρητικότητα 2^8 – 2 = 254 μηχανήματα).

Ας δούμε κι άλλο ένα παράδειγμα subnet mask: το 255.255.252.0 ή αλλιώς

<br />
11111111 11111111 11111100 00000000<br />

στο δυαδικό. Αυτή τη φορά, τα μηδενικά στα δεξιά είναι αρκετά: Περισσότερα από τα 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 δουλεύει ως εξής:

<br />
0 AND 0 = 0<br />
1 AND 0 = 0<br />
0 AND 1 = 0<br />
1 AND 1 = 1<br />

Ας δούμε ένα παράδειγμα. Ο 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. Ακολούθως φαίνεται ξεκάθαρα η μεθοδολογία του:

<br />
Διεύθυνση IP σε dotted decimal:         192.168.1.25<br />
Subnet mask σε dotted decimal:          255.255.255.0</p>
<p>Διεύθυνση IP στο δυαδικό:               11000000 10101000 00000001 00011001<br />
Subnet mask στο δυαδικό:                11111111 11111111 11111111 00000000<br />
----------------------------------------λογικό AND ανά ζεύγος ομότιμων bit-<br />
network prefix στο δυαδικό:             11000000 10101000 00000001 00000000</p>
<p>network prefix σε dotted decimal:       192.168.1.0<br />

Το παράδειγμα που μόλις είδαμε ήταν βγαλμένο από ένα οικιακό δίκτυο και μ’ αυτά είμαστε λίγο πολύ εξοικειωμένοι. Αν τώρα αρχίσουμε να εξετάζουμε πιο “ιδιαίτερα” δίκτυα, τότε με το που θα βλέπουμε κάποιο IP δεν θα είναι εύκολο να καταλαβαίνουμε με την πρώτη ποιο είναι το network prefix. Όμως ο router ενός τέτοιου δικτύου δεν θα χρειάζεται κάτι περισσότερο από το subnet mask για να βγάζει άκρη. Δείτε, π.χ., το δίκτυο που ορίζει το subnet mask 255.255.255.224 και πόσο εύκολα ξεχωρίζει ο router το network prefix από τη διεύθυνση 10.0.8.150:

<br />
Διεύθυνση IP σε dotted decimal:         10.0.8.150<br />
Subnet mask σε dotted decimal:          255.255.255.224</p>
<p>Διεύθυνση IP στο δυαδικό:               00001010 00000000 00001000 10010110<br />
Subnet mask στο δυαδικό:                11111111 11111111 11111111 11100000<br />
----------------------------------------λογικό AND ανά ζεύγος ομότιμων bit-<br />
network prefix στο δυαδικό:             00001010 00000000 00001000 10000000</p>
<p>network prefix σε dotted decimal:       10.0.8.128<br />

Αλήθεια, μπορούσατε εσείς να καταλάβετε με μια ματιά ότι όταν το 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 υπάρχουν εννέα μόνο πιθανές τιμές. Είναι ακριβώς αυτές που παρατίθενται στον ακόλουθο πίνακα:

<br />
Α/Α	Δυαδική οκτάδα	Δεκαδική τιμή<br />
---------------------------------<br />
1	00000000		0<br />
2	10000000		128<br />
3	11000000		192<br />
4	11100000		224<br />
5	11110000		240<br />
6	11111000		248<br />
7	11111100		252<br />
8	11111110		254<br />
9	11111111		255<br />

Ορισμός της διεύθυνσης IP για ένα από τα δύο network interfaces ενός router που τρέχει το pfSense. Το συγκεκριμένο network interface βρίσκεται μπροστά από ένα εσωτερικό τοπικό δίκτυο κλάσης C. Παρατηρήστε ότι μάς επιτρέπεται να παίξουμε με το πλήθος των άσων του subnet mask, ορίζοντας έτσι πολύ πιο ευέλικτα το μέγεθος του τοπικού δικτύου πίσω από το network interface.

(επιστροφή στην αρχή)

Καταγραφή όλων των διευθύνσεων ενός υποδικτύου

Ένας βολικός τρόπος να φανταζόμαστε τα 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, σε δυαδική μορφή:

<br />
10101100 00010000 00000101 00000000<br />

Τα τέσσερα bit από δεξιά επιτρέπεται να παίζουν, άρα το πρώτο από δεξιά δυαδικό octet των διευθύνσεων έχει τη γενική μορφή

<br />
0000****<br />

κι όλα τ’ άλλα μένουν ως έχουν. Κάθε αστεράκι είναι 0 ή 1, επομένως όλα τα δυνατά host IDs είναι τα ακόλουθα:

<br />
00000000	00000001	00000010	00000011	00000100<br />
00000101	00000110	00000111	00001000	00001001<br />
00001010	00001011	00001100	00001101	00001110<br />
00001111<br />

Το πρώτο (00000000) και το τελευταίο (00001111) δεν είναι επιτρεπτά για hosts, επομένως μετατρέποντας στο δεκαδικό παίρνουμε όλες τις διευθύνσεις IP του δικτύου:

<br />
172.16.5.1		172.16.5.2		172.16.5.3		172.16.5.4<br />
172.16.5.5		172.16.5.6		172.16.5.7		172.16.5.8<br />
172.16.5.9		172.16.5.10		172.16.5.11		172.16.5.12<br />
172.16.5.13		172.16.5.14<br />

Στο σημείο αυτό γίνεται προφανές πως όταν το δεξιότερο 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:

<br />
192.168.0.1		192.168.0.2		192.168.0.3<br />
192.168.0.4		192.168.0.5		192.168.0.6<br />

(Το 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 στις αντίστοιχες δυαδικές τιμές:

<br />
διεύθυνση IP:   00001010 00000000 00001000 10010110<br />
subnet mask:    11111111 11111111 11111111 11100000<br />
----------------λογικό AND ανά ζεύγος ομότιμων bit-<br />
network prefix: 00001010 00000000 00001000 10000000<br />

Εφαρμόζοντας το λογικό AND στα αντίστοιχα bit, εξάγαμε το network prefix από τη διεύθυνση IP, το οποίο σε μορφή dotted decimal είναι

<br />
10.0.8.128<br />

Ουσιαστικά, αυτή είναι η πρώτη διεύθυνση του ζητούμενου subnet. Συνεχίζουμε υπολογίζοντας τη χωρητικότητά του, η οποία με βάση το πλήθος των άσων στο subnet mask (27) είναι 2^(32-27) – 2 = 30. Το δικτυάκι μας, λοιπόν, χωράει 30 μηχανήματα και οι διευθύνσεις τους βρίσκονται προσθέτοντας τα 1, 2, …, 30 στο 128, δηλαδή στο δεξιότερο octet του network prefix. Τελικά, λοιπόν, γράφοντας 10.0.8.150/27 εννοούμε ένα μηχάνημα από ένα δίκτυο με τα ακόλουθα hosts:

<br />
10.0.8.129	10.0.8.130	10.0.8.131	10.0.8.132	10.0.8.133<br />
10.0.8.134	10.0.8.135	10.0.8.136	10.0.8.137	10.0.8.138<br />
10.0.8.139	10.0.8.140	10.0.8.141	10.0.8.142	10.0.8.143<br />
10.0.8.144	10.0.8.145	10.0.8.146	10.0.8.147	10.0.8.148<br />
10.0.8.149	10.0.8.150	10.0.8.151	10.0.8.152	10.0.8.153<br />
10.0.8.154	10.0.8.155	10.0.8.156	10.0.8.157	10.0.8.158<br />

Η διεύθυνση δικτύου είναι η 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) διευθύνσεων. Είναι αυτά που φαίνονται στον ακόλουθο πίνακα.

<br />
Δίκτυο σε μορφή CIDR    Subnet mask             Εύρος διευθύνσεων<br />
-----------------------------------------------------------------------------<br />
10.0.0.0/8              255.0.0.0               10.0.0.1 - 10.255.255.254<br />
172.16.0.0/12           255.240.0.0             172.16.1.1 - 172.31.255.254<br />
192.168.0.0/16          255.255.0.0             192.168.0.1 - 192.168.255.254<br />

Προφανώς, διαφορετικά τοπικά (ιδιωτικά) δίκτυα επιτρέπεται να έχουν μηχανήματα με τις ίδιες ιδιωτικές διευθύνσεις IP. Ούτως ή άλλως, για τη δρομολόγηση πακέτων μεταξύ μηχανημάτων που έχουν ίδια ιδιωτικά IPs αλλά βρίσκονται σε διαφορετικά ιδιωτικά δίκτυα, υπεύθυνοι είναι οι routers.

Όπως προαναφέραμε, το πώς ακριβώς δουλεύουν οι routers θα μάθουμε σε επόμενο άρθρο της σειράς μας, που θα δημοσιευτεί στο περιοδικό.

Άσκηση για το σπίτι: Βρείτε όλες τις διευθύνσεις IP του δικτύου μέσα στο οποίο βρίσκεται το εικονιζόμενο VPS. Hint: Το subnet mask δίνεται σε δεκαεξαδική μορφή (βλ. και http://deltahacker.gr/?p=4192)

(επιστροφή στην αρχή)

Σας άρεσε το άρθρο; Αν ναι, τι θα λέγατε για ένα tip στο PayPal;

27 Responses to “Πώς δουλεύουν τα δίκτυα: Διευθύνσεις IP και δίκτυα μέσα σε δίκτυα (μέρος β’)”

  1. tr3quart1sta | 14/06/2012 at 22:05

    “Τα τέσσερα bit από δεξιά επιτρέπεται να παίζουν, άρα το πρώτο από δεξιά δυαδικό octet των διευθύνσεων έχει τη γενική μορφή
    0000****

    κι όλα τ’ άλλα μένουν ως έχουν. Κάθε αστεράκι είναι 0 ή 1, επομένως όλα τα δυνατά host IDs είναι τα ακόλουθα:
    00000000 00000001 00000010 00000011 00000100
    00000101 00000110 00000111 00001000 00001001
    00001010 00001011 00001100 00001101 00001111”

    ξέχασες το 1110 :P

    • subZraw | 14/06/2012 at 22:18

      Έχεις απόλυτο δίκιο — το πρόσθεσα ήδη.

      Ευχαριστώ για την επισήμανση!

  2. tr3quart1sta | 14/06/2012 at 23:52

    πες μου μόνο ότι το IPv6 έχει ίδιους ή παρόμοιους κανόνες και δεν είναι καινούριο στόρυ. αυτό.

  3. doctor_g | 15/06/2012 at 12:33

    Δίκτυο σε μορφή 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

  4. Ion | 21/06/2012 at 15:17

    Ας μου επιτρέψει ο 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ο… κλπ).

    Περιμένω τις απαντήσεις σας ;)

    • giwrg98 | 21/06/2012 at 17:53

      http://pastebin.com/nE2A6s6a

    • erros | 24/12/2015 at 17:45

      Καταρχην γνωριζω οτι το αρθρο και το σχολιο ειναι αρχαια, αλλα ειμαι ο μονος που βρισκω την ασκηση λαθος; Πρωτα απο ολα για να σχεδιασεις ενα εσωτερικο δικτυο και να υπολογισεις την subnet mask που θα χρησιμοποιησεις, πρεπει να ξερεις ποσες συσκευες hosts θα υπαρχουν σε καθε υποδικτυο πανω κατω. Και επειτα το γεγονος οτι η εταιρια εχει στην κατοχη της μια στατικη ΙΡ 194.100.0.0 δεν παιζει κανενα ρολο αφου αυτη ειναι η εξωτερικη ΙΡ της εταιριας και το εσωτερικο δικτυο με τα υποδικτυα θα εχει διαφορετικες ΙΡ.

  5. tr3quart1sta | 05/10/2012 at 22:25

    Πότε βγαίνει το επόμενο μέρος;

  6. yiannis | 20/02/2013 at 12:36

    καλησπερα
    ψαχνω το μερος Α αλλα δεν το βρισκω..

    • subZraw | 20/02/2013 at 13:06

      Όπως γράφει και στην εισαγωγή του παρόντος, το πρώτο μέρος είναι δημοσιευμένο στο τεύχος 005 του deltaHacker (http://deltahacker.gr/2012/02/09/deltahacker005). Ιδού και η εισαγωγή του αντίστοιχου άρθρου:

      http://deltahacker.gr/?p=4300

      • yiannis | 20/02/2013 at 15:09

        ναι την εισαγωγη την ειχα δει και γω:)
        για ολοκληρο το αρθρο πρεπει να αγορασω το τευχος 005?

        • subZraw | 20/02/2013 at 15:16

          Βεβαίως. Αρκετά από τα άρθρα που δημοσιεύονται στο site αποτελούν συμπληρώματα άρθρων ή αφιερωμάτων του περιοδικού.

          Το περιοδικό είναι συνδρομητικό, βγαίνει 12 φορές το χρόνο και ταχυδρομείται στους αναγνώστες του μέσω ΕΛΤΑ. Περισσότερα για τις διαθέσιμες συνδρομές μπορείς να δεις στο

          http://deltahacker.gr/subscriptions

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

          http://deltahacker.gr/order

          Για οποιαδήποτε διευκρίνιση ή απορία, μη διστάσεις να μας ρωτήσεις.

  7. Rasen_Shurik3n | 18/04/2013 at 21:06

    Καλησπέρα. Βρε παιδιά συγχωρείστε με αλλά από το πολύ διάβασμα έχασα το μυαλό μου!
    2^(32-27) – 2 εμένα γιατί μου βγαίνει 23 και όχι 30?

    • Rasen_Shurik3n | 18/04/2013 at 21:09

      Και πάμε παλι. Υπολόγιζα λάθος, αυτή η μετατροπή στο δυαδικό θέλει λίγο καιρο να τη συνηθίσεις

  8. dimi_acc | 19/03/2014 at 16:58

    Καλησπέρα και από εμένα.Σήμερα μπήκα στο site σας πρώτη φορά και ενθουσιάστηκα.Συγχαρητήρια.Θέλω να παραγγείλω το 004 για να δω όλο το άρθρο.Θα ήθελα να μου πει κάποιος αν όχι ο Ion αν υπάρχει κάπου η λύση της άσκησης που έβαλε ή αν ή λύση του giwrg98 είναι σωστή.Ευχαριστώ

  9. dimi_acc | 19/03/2014 at 17:08

    Μπερδεύτηκα το 004 ή το 005 έχει όλο το άρθρο?

    • subZraw | 19/03/2014 at 17:10

      Το 1ο μέρος του άρθρου είναι στο τεύχος 004. Αυτό που μόλις διάβασες είναι το 2ο μέρος.

      • dimi_acc | 19/03/2014 at 21:30

        Άρα θέλω και τα δύο.Ευχαριστώ

        • subZraw | 19/03/2014 at 22:02

          Χμ, από όσα λες καταλαβαίνω ότι θέλεις μόνο το τεύχος 004. Γενικά, τα περιεχόμενα όλων των τευχών που έχουν κυκλοφορήσει μπορείς να τα βλέπεις στο http://deltahacker.gr/category/magazine-issues. Από εκεί μπορείς να διαβάζεις και τις εισαγωγές των αντίστοιχων άρθρων.

  10. timgr17 | 16/01/2016 at 14:19

    καλησπέρα
    μπορεί κάποιος να με βοηθήσει με αυτή την άσκηση;
    σπουδάζω ηλεκτρολόγος μηχανικός και δεν έχουμε κάνει μάθημα εδώ και 1.5 μήνα λόγω του ότι δεν υπάρχει καθηγητής. διάβασα το άρθρο αλλά χρειάζομαι λίγη βοήθεια αν είναι δυνατόν.
    ευχαριστώ εκ των προτέρων.

    Έστω υπολογιστής με διεύθυνση 190.15.85.1 και μάσκα υποδικτύου

    265.265.265.192

    Ζητείται να βρείτε τη σχέση του υπολογιστή αυτή με τους εξής άλλους υπολογιστές :

    (α) 150.120.11.23

    (β) 190.15.85.22

    (γ) 190.15.85.240

    (δ) πόσα υποδίκτυα μπορούν να υπάρχουν σε αυτό το δίκτυο και πόσους υπολογιστές μπορεί να έχει το κάθε υποδίκτυο;

    • timgr17 | 16/01/2016 at 14:43

      Μου φάνηκαν λάθος τα 265 στη μάσκα υποδικτύου καθώς το 265 δεν μπορεί να παρασταθεί με 8 μόνο Bits.

    • kmellos | 30/01/2016 at 20:05

      Προφανώς είναι τυπογραφικό λάθος.
      Δοκίμασε με mask 255.255.255.192

  11. baldie_ | 06/04/2016 at 14:08

    Πολύ καλό και κατατοπιστικό άρθρο.
    Ξέρω ότι το άρθρο είναι λίγο παλιό αλλά σα γνήσιος και πιστός τεμπέλης νομίζω υπάρχει καλύτερη και ταχύτερη μέθοδος για τον υπολογισμό των υποδικτύων. Η μάσκα υποδικτύου μπορεί να υπολογιστεί ως εξής (αντί του πολύπλοκου 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 .

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων