DHCP
Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Με τον όρο DHCP (Dynamic Host Configuration Protocol) αναφερόμαστε σε ένα μηχανισμό διαχείρισης πρωτοκόλλων TCP/IP .
Το πρωτόκολλο είναι ουσιαστικά ένα λογισμικό που τρέχει σε έναν υπολογιστή και κανονίζει όλα τα θέματα επικοινωνίας με αυτόν τον υπολογιστή και άλλους που χρησιμοποιούν αυτό το πρωτόκολλο ως γλώσσα. Για να δουλέψει το ίδιο λογισμικό σε τόσους πολλούς υπολογιστές υπάρχει η ανάγκη να το ξεκινήσουμε σε κάθε υπολογιστή με τις αντίστοιχες παραμέτρους για αυτόν και για τη θέση του στο δίκτυο. Η αρχικοποίηση (initialisation) αυτή μπορεί να γίνει κατά τη διάρκεια του φορτώματος (αν το πρωτόκολλο είναι συγχωνευμένο στο λειτουργικό σύστημα) ή με την κλήση του πρωτοκόλλου από κάποια εφαρμογή (αν το πρωτόκολλο υπάρχει στην εφαρμογή). Οι παράμετροι αυτές μπορούν να οριστούν τοπικά, για κάθε υπολογιστή ξεχωριστά. Κάτι τέτοιο όμως δημιουργεί αρκετά προβλήματα:
- Χρειάζεται πάρα πολύ εργασία από τον διαχειριστή του δικτύου η οποία είναι χρονοβόρα και επιρρεπής σε λάθη.
- Το να διατηρούνται οι παράμετροι ενημερωμένες χρειάζεται συνεχή δουλειά η οποία αυξάνεται γεωμετρικά με τις αλλαγές που συμβαίνουν στο δίκτυο, ειδικά αν υπάρχουν υπολογιστές που αλλάζουν συνεχώς θέση (π.χ. φορητοί Η/Υ).
- Η αλλαγή μίας παραμέτρου κοινής για τους υπολογιστές σε ένα subnet (π.χ. τοπική διεύθυνση ενός router) απαιτεί αλλαγές σε κάθε υπολογιστή.
- Μερικά μηχανήματα μπορεί να λειτουργούν ως τερματικά. Κάτι τέτοιο σημαίνει ότι δεν έχουν αποθηκευτικό χώρο για να κρατήσουν τις ρυθμίσεις.
- Σε περιπτώσεις έλλειψης διευθύνσεων ή ενός δικτύου που αλλάζει συνέχεια είναι χάσιμο χρόνου να δίνουμε σε έναν μη σταθερό υπολογιστή μόνιμη διεύθυνση. Μία καλύτερη προσέγγιση θα ήταν να χρησιμοποιούνται ομάδες διευθύνσεων από ομάδες υπολογιστών. Η «χειροκίνητη» ρύθμιση τέτοιου είδους δεν παρέχει εύκολο τρόπο για να γίνει αυτό.
Όλοι αυτοί οι λόγοι οδήγησαν στην ανάγκη για έναν αυτόματο μηχανισμό διαχείρισης των TCP/IP πρωτοκόλλων. Ο DHCP είναι αυτή τη στιγμή ο πιο προηγμένος μηχανισμός για να γίνεται αυτό.
Πίνακας περιεχομένων |
[Επεξεργασία] Ιστορική Αναδρομή
Παλαιότερα τα περισσότερα βασισμένα σε TCP/IP δίκτυα ήταν μικρά και στατικά. Κάτι τέτοιο έκανε εφικτή την δια χειρός αλλαγή και ρύθμιση των διευθύνσεων οι οποίες αποθηκεύονταν στη μνήμη του υπολογιστή. Αν χρειαζόταν ποτέ ένας υπολογιστής να αλλάξει διεύθυνση τότε αυτό γινόταν από την κονσόλα του και συνήθως απαιτούσε και επανεκκίνηση.
Σχετικά σύντομα, και καθώς άρχισαν να δημιουργούνται όλο και πιο σύνθετα δίκτυα υπήρξε η ανάγκη για κεντρική διαχείριση των διευθύνσεων. Αυτό έγινε γιατί στα δίκτυα αυτά άρχισαν να χρησιμοποιούνται κατά κόρον client workstation που ήταν φτηνοί και δεν είχαν μνήμη για αποθήκευση των διευθύνσεων. Ένα ειδικό πρωτόκολλο, το RARP, δημιουργήθηκε για τέτοιες περιπτώσεις. Επέτρεπε σε ένα μηχάνημα σε ένα τμήμα του δικτύου να «μάθει» τη διεύθυνση του και μετά να ξεκινήσει κανονική λειτουργία στο TCP/IP.
Ένα άλλο πρωτόκολλο, το BOOTP, αναπτύχθηκε επίσης για να επιτρέψει σε αυτά τα workstations να λαμβάνουν τις παραμέτρους του TCP/IP παράλληλα με άλλα δεδομένα του λειτουργικού συστήματος που χρειάζονταν για να ξεκινήσει το workstation να λειτουργεί κανονικά μετά την εκκίνηση του. Αυτό επέτρεπε ρυθμίσεις σε πιο ευρεία δίκτυα καθώς δεν ήταν περιορισμένο σε ένα κομμάτι του δικτύου. Το BOOTP στη συνέχεια εμπλουτίστηκε από το BOOTP extension mechanism, χρησιμοποιώντας στο τελευταίο πεδίο του frame πιο συγκεκριμένα δεδομένα και επιλογές μηνυμάτων. Αυτή η έκδοση του BOOTP έμελλε να είναι ο πρόγονος του DHCP.
Η επόμενη προσθήκη στο BOOTP μας έδωσε το Dynamic Host Configuration Protocol (DCHP). Υπάρχουν δύο κύριες διαφορές μεταξύ των δύο πρωτοκόλλων. Καταρχάς το DHCP ορίζει μηχανισμούς διαμέσου των οποίων μπορούν να μοιραστούν διευθύνσεις στους clients πεπερασμένης χρήσης ώστε να μπορούμε εύκολα να κάνουμε αναδιοργάνωση των διευθύνσεων και να τις δώσουμε σε διαφορετικούς clients. Ακόμα το DCHP παρέχει στον client το μηχανισμό με τον οποίο μόνος του μπορεί να ανασύρει τις πληροφορίες που χρειάζεται για να λειτουργήσει στο δίκτυο.
Το DHCP παρέχει ένα framework για να περνάνε πληροφορίες για τις ρυθμίσεις μέσω ενός TCP/IP δικτύου. Επίσης είναι βασισμένο στο BOOTP, γεγονός που του δίνει τη δυνατότητα για αυτόματο καθορισμό επαναχρησιμοποιήσιμων διευθύνσεων και επιπρόσθετες επιλογές ρυθμίσεων. Ακόμα το DCHP είναι πλήρως συμβατό με το BOOTP. Το DCHP έρχεται με ένα προκαθορισμένο αριθμό από επιλογές που έχει κληρονομήσει από το extension mechanism του BOOTP, προσθέτοντας κάποιες ακόμα πληροφορίες, και είναι ανοιχτό για περαιτέρω επέκταση, κληρονομώντας έτσι την επεκτασιμότητα του BOOTP.
[Επεξεργασία] Εισαγωγή στο πρωτόκολλο
To DCHP παρέχει παραμέτρους ρυθμίσεων για ένα μοντέλο δικτύου [{client-server}] . Οι DHCP server hosts δεσμεύουν τις διευθύνσεις του δικτύου και στέλνουν τις πληροφορίες για αυτές στους client-hosts. Το DHCP αποτελείται από δύο πράγματα. Το πρώτο είναι το πρωτόκολλο που στέλνει παραμέτρους ρυθμίσεων από τον server στον host και το δεύτερο είναι ο μηχανισμός για να αντιστοιχίζει τις διευθύνσεις στους hosts.
[Επεξεργασία] Αντιστοίχηση IP διευθύνσεων
Το DCHP υποστηρίζει 3 μηχανισμούς για να αντιστοιχίζει διευθύνσεις. Αυτοί είναι:
- Αυτόματη αντιστοίχηση (με αντιστοίχηση μόνιμης διεύθυνσης)
- Δυναμική αντιστοίχηση (με διεύθυνση με ημερομηνία λήξης)
- Χειροκίνητη αντιστοίχηση (ο διαχειριστής κανονίζει ότι θεωρεί καλύτερο)
[Επεξεργασία] Αποστολή παραμέτρων ρύθμισης
Ο client στέλνει μήνυμα στον server για να του ζητήσει τις παραμέτρους και ο server ανταποκρίνεται με ένα μήνυμα που τις περιέχει.
[Επεξεργασία] Συμβατότητα με το BOOTP
Η δομή των μηνυμάτων είναι βασισμένη στη δομή των μηνυμάτων του BOOTP. Αυτό γίνεται για τους εξής λόγους:
- Όσον αφορά τον client το DHCP είναι επέκταση του BOOTP. Αυτή η συμπεριφορά επιτρέπει στους BOOTP clients να επικοινωνούν με DCHP servers χωρίς να χρειάζονται αλλαγές.
- Το DHCP υποστηρίζει τη συμπεριφορά του BOOTP relay agent.
- Χρήση των relay agents: Το dchp δεν χρειάζεται server για κάθε τμήμα του δικτύου. Για να έχουμε μεγάλο μέγεθος δικτύου και οικονομία το DHCP μπορεί να λειτουργήσει διαμέσου routers ή relay agents του BOOTP. Έτσι προωθούνται τα μηνύματα και σε άλλα τμήματα του δικτύου. Αυτό εκμηδενίζει την ανάγκη για έναν DCHP server σε κάθε φυσικό δίκτυο.
[Επεξεργασία] Δέσμευση Διευθύνσεων δικτύου
Όπως προαναφέρθηκε το dchp έχει 3 μηχανισμούς για να δεσμεύει και να αντιστοιχίζει διευθύνσεις δικτύου. Ένα δίκτυο μπορεί να χρησιμοποιεί έναν η περισσότερους μηχανισμούς ανάλογα με την απόφαση του διαχειριστή του. Η δυναμική αντιστοίχιση είναι ο μόνος από τους 3 μηχανισμούς που επιτρέπει αυτόματη επαναχρησιμοποίηση μίας διεύθυνσης που δεν χρειάζεται πια από τον client στον οποίο δόθηκε. Έτσι η δυναμική αντιστοίχηση είναι ιδιαιτέρως χρήσιμη για δίκτυα που αποτελούνται από πολλούς clients που συνδέονται προσωρινά , ή σε περιπτώσεις που παρατηρείται έλλειψη IP διευθύνσεων ανάμεσα σε μία ομάδα clients που δεν χρειάζονται μόνιμες διευθύνσεις. Ο βασικός μηχανισμός για τη δυναμική αντιστοίχηση των διευθύνσεων είναι απλός. Ο client ζητά τη χρήση μίας διεύθυνσης για ένα πεπερασμένο χρονικό διάστημα (lease). Ο μηχανισμός εγγυάται να μην αντιστοιχίσει τη διεύθυνση αλλού σε αυτό το διάστημα και προσπαθεί να επιστρέφει την ίδια διεύθυνση κάθε φορά που αυτός ο client ζητά διεύθυνση. O client μπορεί να:
- ζητήσει το lease με άλλες πληροφορίες.
- ρωτήσει αν είναι δυνατή η μόνιμη αντιστοίχιση με ένα αορίστου χρόνου lease.
- στείλει μήνυμα για να απελευθερώσει τη διεύθυνση πίσω στο server όταν δεν τη χρειάζεται άλλο.
Στην χειροκίνητη αντιστοίχηση το DHCP απλά χειρίζεται τον έλεγχο λαθών που μπορεί να προκύψουν από την διαχείριση των διευθύνσεων. Στην αυτόματη αντιστοίχηση το dchp μπορεί να δίνει μόνιμες διευθύνσεις στους hosts χωρίς ανθρώπινη παρέμβαση.
Σαν τελικό έλεγχο ο server ελέγχει αν η διεύθυνση που πάει να δώσει όντως δεν χρησιμοποιείται. Αυτό γίνεται με μία ICMP echo ενώ παράλληλα και ο client ελέγχει την διεύθυνση που έλαβε.
[Επεξεργασία] Αποστολή παραμέτρων ρύθμισης
(Οι dhcp servers έχουν οριστεί βάση των RFCs 1122 – 1123)
Ο client ζητά από τον server να του αποστείλει τις παραμέτρους ρύθμισης. Αυτή η διαδικασία αποτελείται από την αποστολή συγκεκριμένης μορφής μηνυμάτων από τον client που απαντώνται από τις ρυθμίσεις που στέλνει ο server. To μοντέλο της αποθήκευσης των ρυθμίσεων του δικτύου υπάρχει στο server. Η δομή του είναι απλή καθώς αυτό αποτελείται από ζεύγη κλειδιών-αξιών (keys-values). To κλειδί αποτελεί ένα μοναδικό προσδιοριστή ενώ η αξία περιέχει τις ρυθμίσεις για τον συγκεκριμένο client. Δεν χρειάζονται όμως όλοι οι clients αρχικοποίηση με όλες τις παραμέτρους. Δύο τεχνικές χρησιμοποιούνται για να περιοριστεί η αποστολή των παραμέτρων από τον server στον client.
- Οι περισσότερες παράμετροι έχουν προεπιλεγμένες τιμές (Βάση των RFCs). Αν ο client δεν λάβει διαφορετικές πληροφορίες από τον server χρησιμοποιεί αυτές τις τιμές.
- Ο client και ο server μπορούν να διαπραγματευτούν την αποστολή μόνο των απαιτούμενων παραμέτρων. Ο client στο μήνυμα που στέλνει περιέχει την επιλογή parameter request list option για να ενημερώσει για το ποιες παραμέτρους χρειάζεται.
[Επεξεργασία] Μορφές μηνυμάτων
Όπως προαναφέρθηκε τα μηνύματα που στέλνονται ακολουθούν τη μορφή του BOOTP ώστε να είναι συμβατά με τους Bootp relay agents και τους Bootp clients. Η μορφή τους είναι η ακόλουθη ενώ οι αριθμοί δηλώνουν το μέγεθος του κάθε πεδίου:
Πεδίο | Octets | Περιγραφή |
---|---|---|
op | 1 | Μέσον:123654 |
htype | 1 | Διεύθυνση τύπου hardware (π.χ. '1' = 10Mb Ethernet) |
hlen | 1 | Μήκος διεύθυνσης hardware (π.χ.'6' for 10Mb Ethernet) |
hops | 1 | O Client το θέτει μηδέν, χρησιμοποιείται προαιρετικά αν φορτώνουμε το σύστημα από relay agent. |
xid | 4 | ID «δοσοληψίας». Ένας τυχαίος αριθμός που θέτει ο client και χρησιμοποιείται για να αναγνωρίζεται το ζεύγος μηνύματος και απάντησης από client και server. |
secs | 2 | Τα δευτερόλεπτα που πέρασαν μέχρι να απαντηθεί το μήνυμα (το υπολογίζει ο client). |
flags | 2 | Flags |
ciaddr | 4 | Διεύθυνση IP του Client. Συμπληρώνεται από τον client αν ξέρει τη διεύθυνσή του. |
yiaddr | 4 | Η απάντηση του server στον client με τη διεύθυνσή του. |
siaddr | 4 | Η διεύθυνση του server για να επικοινωνεί μαζί του ο client. |
giaddr | 4 | Αν φορτώνουμε μέσω relay agent αυτή είναι η διεύθυνσή του. |
chaddr | 16 | Η διεύθυνση client hardware address. |
sname | 64 | Προαιρετικό host name για τον server. |
file | 128 | Όνομα αρχείου Boot. |
options | Var | Προαιρετικές παράμετροι για το Bootp. |
Σε DHCP μηνύματα τουλάχιστον μία επιλογή (message type) πρέπει να υπάρχει οπότε το πεδίο δεν είναι ποτέ κενό.
Εκτός από αυτές τις επιλογές γεννήθηκε η ανάγκη για να δημιουργηθούν και άλλες. Αυτές χωρίζονται σε 2 κατηγορίες: τις παραμέτρους ρυθμίσεων και τις πληροφορίες για τον έλεγχο μηνυμάτων. Αναλυτικά περιγράφονται στο RFC 2132.
[Επεξεργασία] Μοντέλο Client/Server
O client και ο server εμπλέκονται σε μία ανταλλαγή μηνυμάτων ώστε να πάρει ο client τις ζητούμενες ρυθμίσεις. Αυτές ακολουθούν τα εξής βήματα:
- Ο client μεταδίδει μία
DHCPDISCOVER
. - Ο server απαντά με ένα μήνυμα
DHCPOFFER
. - Ο client λαμβάνει το
DHCPOFFER
και αναμεταδίδει έναDHCPREQUEST
για να ζητήσει ρυθμίσεις. - Αν κάποιοι servers δεν προτιμήθηκαν από τον client (σε δίκτυα με άνω του ενός servers) δηλαδή κατανοούν την
DHCPREQUEST
ως απόρριψή τους. Ο server που επελέγη με τηνDHCPREQUEST
απαντά με το μήνυμαDHCPACK
που περιέχει τις παραμέτρους για τον client. - Ο client λαμβάνει την
DHCPACK
και ρυθμίζεται βάση αυτών. Αν λάβει την εντολήDHCPNAK (απόρριψη)
, ξαναρχίζει τη διαδικασία. - Ο client μπορεί να ελευθερώσει τη διεύθυνσή του με το μήνυμα
DHCPRELEASE
στον server - O server λαμβάνει την
DHCPRELEASE
και σημειώνει το lease ως ελεύθερο.
Υπάρχει η περίπτωση ο client να επαναχρησιμοποιήσει μία διεύθυνση που είχε. Έτσι απλά παρακάμπτει μερικά από τα παραπάνω βήματα.
[Επεξεργασία] Εξωτερικοί σύνδεσμοι
- DHCP Server Security - Άρθρο γύρω από την αφάλεια των DHCP servers.