Written by: Internet

Τα Πρωτόκολλα του Internet

Τα Πρωτόκολλα του Internet 1

Μοιραστείτε το άρθρο

Τα Πρωτόκολλα του Internet

Τι Είναι το TCP/IP

Τα Πρωτόκολλα του Internet. Το TCP/IP είναι ένα σύνολο από πρωτόκολλα που αναπτύχθηκαν για να επιτρέπουν σε συνεργαζόμενους υπολογιστές να μοιράζονται πόρους (resources) σ’ ένα δίκτυο υπολογιστών (computer network). Αναπτύχθηκε από μια κοινότητα ερευνητών που είχαν επικεντρωθεί γύρω από το ARPAnet, που είναι και το πιο γνωστό TCP/IP δίκτυο.

Η πιο σωστή ονομασία για το σύνολο των πρωτοκόλλων που περιγράφουμε είναι «σουίτα των πρωτοκόλλων του Internet». Το TCP και το IP είναι δύο από τα πρωτόκολλα σ’ αυτή τη σουίτα και επειδή είναι και τα πιο γνωστά, συχνά χρησιμοποιούμε τον όρο TCP/IP για να αναφερόμαστε σ’ όλη την οικογένεια. Το TCP είναι τα αρχικά των όρων Transmission Control Protocol και το ΙΡ είναι τα αρχικά των όρων Internet Protocol.

Τα Πρωτόκολλα του Internet 2
Τα Πρωτόκολλα του Internet 2

Το Internet είναι ένα σύνολο δικτύων που περιλαμβάνουν το Arpanet, το NSFnet, δίκτυα περιοχής όπως το NYsernet, τοπικά δίκτυα σε πολλά πανεπιστήμια και ερευνητικά ιδρύματα και πολλά στρατιωτικά δίκτυα. Ο όρος «Internet» αναφέρεται σ’ όλο αυτό το σύνολο των δικτύων. Το μέρος αυτών των δικτύων που ελέγχεται από το Υπουργείο Άμυνας των ΗΠΑ αποκαλείται DDN (Defence Data Network). Περιλαμβάνει μερικά δίκτυα με ερευνητικό προσανατολισμό, όπως είναι το Arpanet, και μερικά πιο καθαρά στρατιωτικά δίκτυα.

Όλα αυτά τα δίκτυα συνδέονται μεταξύ τους και οι χρήστες μπορούν να στείλουν μηνύματα από οποιοδήποτε απ’ αυτά σ’ ένα άλλο. Το TCP/IP αποτελεί μια οικογένεια πρωτοκόλλων. Μερικά απ’ αυτά προσφέρουν λειτουργίες «χαμηλού επιπέδου» που χρειάζονται σε πολλές εφαρμογές, όπως τα ΙΡ, TCP και UDP. Μερικά άλλα είναι πρωτόκολλα για να κάνουν συγκεκριμένες εργασίες, όπως μεταφορά αρχείων ανάμεσα σε υπολογιστές, αποστολή ηλεκτρονικού ταχυδρομείου ή να βρουν ποιος έχει συνδεθεί σ’ έναν άλλον υπολογιστή.

Αρχικά, το TCP/IP είχε χρησιμοποιηθεί κυρίως ανάμεσα σε minicomputers ή mainframes, που ήταν μηχανήματα με δικούς τους δίσκους και γενικά αυτάρκη. Έτσι, οι σημαντικότερες «παραδοσιακές» υπηρεσίες του TCP/ IP είναι οι εξής :

  • Μεταφορά αρχείων (file transfer). Το πρωτόκολλο μεταφοράς αρχείων (file transfer protocol, FTP) δίνει τη δυνατότητα στον χρήστη ενός υπολογιστή να κατεβάσει (get) αρχεία από έναν άλλον υπολογιστή ή να στείλει (send) αρχεία σ’ έναν άλλον υπολογιστή. Η ασφάλεια στη διακίνηση των αρχείων εξασφαλίζεται με τη χρήση ενός user name και ενός password.
  • Απομακρυσμένη πρόσβαση (remote login). Το πρωτόκολλο τερματικού δικτύου (TELNET) δίνει τη δυνατότητα σ’ έναν χρήστη να συνδεθεί (log in) σ’ έναν άλλον υπολογιστή του δικτύου. Ξεκινάμε μια μακρινή σύνδεση (remote session) καθορίζοντας το όνομα του υπολογιστή με τον οποίο θα συνδεθούμε και ό,τι γράφουμε στέλνεται στον άλλον υπολογιστή.
  • Ταχυδρομείο υπολογιστή (computer mail). Μας δίνει τη δυνατότητα να στέλνουμε μηνύματα σε χρήστες σε άλλους υπολογιστές. Τα μηνύματα που ανταλλάσσονται ανάμεσα στους χρήστες τα χειρίζεται ένα μεγάλο σύστημα, όπου υπάρχει ένας διακομιστής αλληλογραφίας (mail server) που παραμένει συνέχεια σε λειτουργία.

Αυτές οι υπηρεσίες πρέπει να υπάρχουν σε κάθε εγκατάσταση του TCP/IP και παίζουν ακόμη έναν πολύ σημαντικό ρόλο σε δίκτυα που βασίζονται στο TCP/IP. Σήμερα, όμως, η τάση είναι να χρησιμοποιούμε συστήματα δικτύων του τύπου πελάτη/διακομιστή (client/server),  όπου ο server είναι ένα σύστημα που παρέχει μια υπηρεσία για το υπόλοιπο δίκτυο και ο client είναι ένα άλλο σύστημα που χρησιμοποιεί αυτή την υπηρεσία. Ο server και ο client μπορεί να είναι και διαφορετικά προγράμματα που τρέχουν στον ίδιο υπολογιστή.

Παρουσιάζονται παρακάτω τα είδη των servers που υπάρχουν συνήθως σ’ ένα σύγχρονο σύστημα υπολογιστή και που μπορούν να υποστηριχθούν από το περιβάλλον του TCP/IP.

  • network file system. Επιτρέπει σ’ ένα σύστημα να έχει πρόσβαση σε αρχεία ενός άλλου υπολογιστή και δίνει την εντύπωση ότι δίσκοι ή άλλες συσκευές από το ένα σύστημα συνδέονται απευθείας σε άλλα συστήματα. Ο υπολογιστής μας απλά νομίζει ότι διαθέτει μερικούς έξτρα οδηγούς δίσκων. Μπορούμε έτσι να εγκαταστήσουμε μεγάλους δίσκους σε λίγους υπολογιστές και να παρέχουμε πρόσβαση και σε άλλους χρήστες. Εκτός από τα προφανή οικονομικά οφέλη, διάφοροι χρήστες μπορούν να χρησιμοποιούν τα ίδια αρχεία. Ένα άλλο πλεονέκτημα είναι ότι δεν χρειάζεται να κάνουμε ενημέρωση και να κρατάμε αντίγραφα ασφαλείας σε πολλά διαφορετικά μηχανήματα.
  • remote printing. Μπορούμε να κάνουμε εκτυπώσεις σε εκτυπωτές που είναι συνδεδεμένοι σε άλλους υπολογιστές σαν να ήταν συνδεδεμένοι απευθείας στον δικό μας.
  • remote execution. Μπορούμε να τρέξουμε ένα πρόγραμμα σ’ έναν άλλον υπολογιστή. Αυτό είναι χρήσιμο όταν μπορούμε να κάνουμε την περισσότερη δουλειά σ’ έναν μικρό υπολογιστή, αλλά κάποιες εργασίες απαιτούν τους πόρους ενός μεγαλύτερου συστήματος.
  • name servers. Στις μεγάλες εγκαταστάσεις, υπάρχει ένα πλήθος διαφόρων συλλογών ονομάτων που πρέπει να διαχειριστούμε. Αυτά είναι οι χρήστες και τα συνθηματικά τους (passwords), τα ονόματα και οι διευθύνσεις δικτύων για τους υπολογιστές και οι λογαριασμοί (accounts). Υπάρχουν βάσεις δεδομένων που περιέχουν τα στοιχεία αυτά και οι οποίες κρατούνται ενήμερες σε λίγους υπολογιστές.
  • terminal servers. Πολλές εγκαταστάσεις δεν συνδέουν πλέον τα τερματικά (terminals) κατευθείαν στους υπολογιστές, αλλά σε terminal servers. Ένας terminal server είναι ένας μικρός υπολογιστής που χρειάζεται μόνο να ξέρει πώς να τρέχει το telnet ή κάποιο άλλο πρωτόκολλο για να έχει μακρινή πρόσβαση (remote login). Αν το τερματικό μας είναι συνδεδεμένο μ’ έναν τέτοιο, γράφουμε απλά το όνομα ενός υπολογιστή και συνδεόμαστε σ’ αυτόν. Είναι δυνατό να είμαστε συνδεδεμένοι ταυτόχρονα σε περισσότερους από έναν υπολογιστές.
  • network-oriented window systems. Επιτρέπουν σ’ ένα πρόγραμμα να χρησιμοποιεί την οθόνη ενός άλλου υπολογιστή.

Γενική Περιγραφή των Πρωτοκόλλων TCP/IP

Το TCP/IP είναι ένα διαστρωμένο σύνολο πρωτοκόλλων και είναι υπεύθυνο για τη σωστή αποστολή των εντολών στο άλλο άκρο. Παρακολουθεί αυτά που στέλνονται και ξαναστέλνει ο,τιδήποτε δεν στάλθηκε με επιτυχία. Αν κάποιο μήνυμα είναι πολύ μεγάλο για ένα datagram, το TCP θα το χωρίσει σε πολλά datagrams και θα εξασφαλίσει ότι όλα θα αποσταλούν σωστά.

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

Παρόμοια, το TCP καλεί τις υπηρεσίες του ΙΡ. Αν και οι υπηρεσίες που παρέχει το TCP χρειάζονται από πολλές εφαρμογές, υπάρχουν πάντα κάποιες κατηγορίες εφαρμογών που δεν τις χρειάζονται. Παρ’ όλα αυτά, υπάρχουν μερικές υπηρεσίες που είναι απαραίτητες σ’ όλες τις εφαρμογές. Αυτές οι υπηρεσίες τοποθετούνται μαζί στο ΙΡ.

Όπως με το TCP, μπορούμε να φανταστούμε το ΙΡ σαν μια βιβλιοθήκη από ρουτίνες που καλεί το TCP, αλλά που είναι διαθέσιμες και σε εφαρμογές που δεν χρησιμοποιούν το TCP. Αυτή η στρατηγική της δημιουργίας αρκετών επιπέδων ή στρώσεων (levels) πρωτοκόλλων ονομάζεται διαστρωμάτωση (layering). Το TCP και το IP αποτελούν ξεχωριστά στρώματα, το καθένα από τα οποία καλεί τις υπηρεσίες του στρώματος που βρίσκεται από κάτω του.

Σε γενικές γραμμές, οι εφαρμογές του TCP/IP χρησιμοποιούν 4 στρώματα :

  • Ένα πρωτόκολλο εφαρμογής, όπως είναι το mail.
  • Ένα πρωτόκολλο όπως είναι το TCP που παρέχει υπηρεσίες που χρειάζονται από πολλές εφαρμογές.
  • Το ΙΡ, που παρέχει τις βασικές υπηρεσίες για να φθάσουν τα datagrams στον προορισμό τους.
  • Τα πρωτόκολλα που χρειάζονται για να διαχειριστούμε ένα ειδικό φυσικό μέσο, όπως είναι το Ethernet.

Το TCP/IP βασίζεται στο «catenet model», που είναι ένα μοντέλο που προϋποθέτει ότι υπάρχουν πολλά ανεξάρτητα δίκτυα που συνδέονται μεταξύ τους με πύλες (gateways). Ο χρήστης πρέπει να μπορεί να έχει πρόσβαση σε υπολογιστές ή σ’ άλλους πόρους σ’ οποιοδήποτε από αυτά τα δίκτυα.

Τα datagrams συνήθως περνάνε από πολλά διαφορετικά δίκτυα πριν φθάσουν στον τελικό τους προορισμό. Η δρομολόγηση (routing) που χρειάζεται για να γίνει αυτό πρέπει να είναι τελείως αόρατη για τον χρήστη. Όσον αφορά τον χρήστη, αυτό που χρειάζεται να γνωρίζει για να έχει πρόσβαση σ’ ένα άλλο σύστημα είναι μια «διεύθυνση Internet».

Αυτή είναι μια διεύθυνση που έχει τη μορφή 128.6.4.194, δηλ. ένας 32 bit αριθμός, που γράφεται κανονικά σαν 4 δεκαδικοί αριθμοί, όπου ο καθένας αντιπροσωπεύει 8 bits της διεύθυνσης. Στη βιβλιογραφία του Internet χρησιμοποιείται ο όρος octet γι’ αυτά τα κομμάτια των 8 bits και όχι ο όρος byte, γιατί το TCP/IP υποστηρίζεται και από υπολογιστές που έχουν μέγεθος byte διαφορετικό από 8 bits.

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

Για παράδειγμα, το 128.6.4 μπορεί να είναι ένα δίκτυο που χρησιμοποιείται από τη σχολή Υπολογιστών. Το τελευταίο octet μάς δίνει τη δυνατότητα να έχουμε μέχρι 254 συστήματα σε κάθε δίκτυο και αυτό γιατί το 0 και το 255 δεν επιτρέπονται, για λόγους που θα δούμε αργότερα. Έτσι, το 128.6.4.194 και το 128.6.5.194 αποτελούν διαφορετικά συστήματα.

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

Το TCP/IP είναι δομημένο πάνω σε μια τεχνολογία «χωρίς συνδέσεις». Οι πληροφορίες μεταφέρονται σαν μια σειρά από datagrams, όπου το datagram είναι μια συλλογή δεδομένων που στέλνεται σαν ένα ατομικό, ανεξάρτητο μήνυμα. Το καθένα από αυτά τα datagramsστέλνεται στο δίκτυο ανεξάρτητα.

Τα δεδομένα που αποστέλλονται διασπώνται σε datagrams και αυτά τα datagrams αντιμετωπίζονται από το δίκτυο σαν ξεχωριστές οντότητες. Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να στείλουμε ένα αρχείο που αποτελείται από 15.000 octets. Τα περισσότερα δίκτυα δεν μπορούν να διαχειριστούν ένα τόσο μεγάλο αρχείο και έτσι τα πρωτόκολλα θα το διασπάσουν σε περίπου 30 datagrams των 500 octets.

Το καθένα απ’ αυτά τα datagrams θα σταλεί στο άλλο άκρο και εκεί θα ανασυνθέσουν το αρχικό αρχείο των 15.000 octets. Όμως, ενώ αυτά τα datagrams αποστέλλονται, το δίκτυο δεν γνωρίζει ότι υπάρχει κάποια σχέση μεταξύ τους. Δεν είναι καθόλου απίθανο ότι το datagram 16 θα φθάσει πριν από το datagram 15 και είναι εξίσου πιθανό ότι κάπου στο δίκτυο θα συμβεί ένα λάθος και μερικά datagrams δεν θα φθάσουν στον προορισμό τους. Σ’ αυτή την περίπτωση αυτά τα datagrams θα πρέπει να σταλούν πάλι.

Οι όροι datagram και packet (πακέτο) ακούγονται συχνά σαν ίδιοι. Από τεχνική άποψη, το datagram είναι η σωστή λέξη που πρέπει να χρησιμοποιούμε όταν περιγράφουμε το TCP/IP. Το datagram είναι μια μονάδα δεδομένων, που είναι αυτό με το οποίο ασχολούνται τα πρωτόκολλα.

Το πακέτο είναι ένα φυσικό πράγμα, που εμφανίζεται σε κάποιο δίκτυο Ethernet ή σε κάποιο καλώδιο. Στις περισσότερες περιπτώσεις ένα πακέτο περιέχει απλά ένα datagram, έτσι υπάρχει πολύ μικρή διαφορά μεταξύ τους. Μπορούν, όμως, και να διαφέρουν.

Όταν το TCP/IP χρησιμοποιείται στην κορυφή του Χ.25, το Χ.25 διασπάει τα datagrams σε πακέτα των 128 bytes. Αυτό δεν γίνεται αντιληπτό από το ΙΡ, επειδή τα πακέτα ανασυνδέονται στο ίδιο datagram στην πλευρά του παραλήπτη πριν τα επεξεργαστεί το TCP/IP. Σ’ αυτή λοιπόν την περίπτωση, ένα ΙΡ datagram μεταφέρεται από πολλά πακέτα. Στα περισσότερα όμως συστήματα, υπάρχουν προφανή πλεονεκτήματα όταν στέλνουμε ένα datagram ανά πακέτο και έτσι η διαφορά μεταξύ τους είναι μηδαμινή.

Το Επίπεδο TCP

Δύο ξεχωριστά πρωτόκολλα υπεισέρχονται στον χειρισμό των datagrams του TCP/IP. Το TCP είναι υπεύθυνο για τον χωρισμό του μηνύματος σε datagrams, για τη συναρμολόγησή τους στον παραλήπτη, για να ξαναστείλει κάποιο που χάθηκε και για να τα ξαναβάλει στη σωστή σειρά. Το ΙΡ είναι υπεύθυνο για τη δρομολόγηση (routing) των αυτόνομων datagrams. Ίσως να φαίνεται ότι το TCP κάνει όλη τη δουλειά. Αυτό ισχύει μόνο για τα μικρά δίκτυα. Όμως στο Internet, το να φθάσει ένα datagram στον προορισμό του ίσως αποδειχθεί μια δύσκολη δουλειά.

Μια σύνδεση μπορεί να απαιτεί από το datagram να περάσει από πολλά δίκτυα. Το να παρακολουθεί τις διαδρομές προς όλους τους προορισμούς και το να αντιμετωπίζει τις ασυμβατότητες ανάμεσα σε διαφορετικά μέσα μεταφοράς αποδεικνύεται ότι είναι μια δύσκολη δουλειά. Η σύνδεση (interface) ανάμεσα στο TCP και το IP είναι αρκετά απλή. Το TCP απλά παραδίδει στο ΙΡ ένα datagram μ’ έναν προορισμό και το ΙΡ δεν γνωρίζει πώς αυτό το datagram συσχετίζεται μ’ ένα άλλο datagram που του παραδόθηκε νωρίτερα ή αργότερα.

Ξεκινάμε με μια ροή δεδομένων (data stream), για παράδειγμα ένα αρχείο που θέλουμε να στείλουμε σ’ έναν άλλον υπολογιστή. Το TCP το χωρίζει σε κομμάτια ή μπλοκς (chunks) που μπορεί να χειριστεί. Για να γίνει αυτό, το TCP πρέπει να γνωρίζει πόσο μεγάλα datagrams μπορεί να χειριστεί το δίκτυό μας. Τα TCP/IP και στα δύο άκρα μιας επικοινωνίας γνωρίζουν ποιο είναι αυτό το μέγεθος και επιλέγουν το μικρότερο.

Το TCP τοποθετεί μια επικεφαλίδα (header) στο μέτωπο (front) κάθε datagram. Αυτή η επικεφαλίδα περιέχει τουλάχιστον 20 octets, από τα οποία τα σημαντικότερα είναι οι αριθμοί θύρας (port numbers) του αποστολέα (source) και του παραλήπτη (destination) και ο αριθμός σειράς (sequence number). Οι αριθμοί θύρας χρησιμοποιούνται για να παρακολουθούνται διάφορες συνομιλίες.

Το κάθε datagram έχει έναν αριθμό σειράς, που χρησιμοποιείται έτσι ώστε ο παραλήπτης να είναι σίγουρος ότι λαμβάνει τα datagrams με τη σωστή σειρά και ότι δεν του λείπει κάποιο. Το TCP δεν αριθμεί τα datagrams αλλά τα octets, έτσι ώστε αν υπάρχουν 500 octetsδεδομένων σε κάθε datagram, το πρώτο datagram θα έχει τον αριθμό 0, το δεύτερο 500, το επόμενο 1000, το επόμενο 1500 κοκ.

Το checksum είναι ένας αριθμός που υπολογίζεται προσθέτοντας όλα τα octets ενός datagram και το αποτέλεσμα τοποθετείται στην επικεφαλίδα. Το TCP στην πλευρά του παραλήπτη υπολογίζει ξανά το checksum και αν βρεθεί διαφορά, αυτό σημαίνει ότι κάτι έχει συμβεί στο datagram κατά την εκπομπή και πρέπει να αποσταλεί ξανά.

Το διάγραμμα έχει την εξής μορφή :

Source PortDestination Port
Αριθμός Σειράς
Αριθμός Αναγνώρισης
DataOffsetReservedURGACKPSHRSTSYNFINΠαράθυρο (Window)
ChecksumUrgent Pointer
Δεδομένα … τα επόμενα 500 octets… 

Αν συμβολίσουμε την επικεφαλίδα του TCP με το Τ, το αρχείο θα έχει την εξής μορφή :

            Τ….      Τ….      Τ….      Τ….      Τ….      Τ….      Τ….

Για να είμαστε σίγουροι ότι το datagram έχει φθάσει στον προορισμό του, ο παραλήπτης πρέπει να στείλει πίσω μια αναγνώριση ή επιβεβαίωση (acknowledgement). Αυτό είναι το datagram του οποίου είναι συμπληρωμένο το πεδίο Αριθμός Αναγνώρισης και έτσι αν έχει σταλεί ένα πακέτο με αριθμό αναγνώρισης 1500 αυτό σημαίνει ότι έχουμε λάβει όλα τα δεδομένα μέχρι και το octet με αριθμό 1500.

Αν ο αποστολέας δεν λάβει μια αναγνώριση μέσα σ’ ένα λογικό χρονικό διάστημα, στέλνει τα δεδομένα ξανά. Δεν είναι πρακτικό να περιμένουμε να γίνει αναγνώριση για το κάθε datagram πριν στείλουμε το επόμενο. Έτσι θα είχαμε μεγάλη καθυστέρηση. Από την άλλη πλευρά, δεν μπορούμε να στέλνουμε συνέχεια δεδομένα, γιατί μπορεί να μην είναι σε θέση να τα απορροφήσει ο παραλήπτης. Έτσι, το κάθε άκρο, αποστολέας και παραλήπτης, φανερώνει πόσα πολλά καινούργια δεδομένα είναι σε θέση να απορροφήσει, αναφέροντας τον αριθμό των octets στο πεδίο Window.

Καθώς λαμβάνει δεδομένα, ελαττώνεται ο ελεύθερος χώρος που του έχει απομείνει στο Window. Όταν πλησιάζει στο μηδέν, ο αποστολέας πρέπει να σταματήσει να στέλνει. Καθώς ο παραλήπτης επεξεργάζεται τα δεδομένα, αυξάνει το δικό του Window, αναφέροντας έτσι ότι είναι έτοιμος να δεχθεί περισσότερα δεδομένα. Το πεδίο Urgent Pointer μάς δίνει τη δυνατότητα να ενημερώσουμε το άλλο άκρο ώστε να αγνοήσει ένα συγκεκριμένο octet.

Το Επίπεδο ΙΡ

Το TCP στέλνει όλα αυτά τα datagrams στο ΙΡ και φυσικά πρέπει να αναφέρει στο ΙΡ τη διεύθυνση Internet του υπολογιστή στο άλλο άκρο, που είναι και το μόνο που ενδιαφέρει το ΙΡ. Το ΙΡ δεν ενδιαφέρεται για το τι περιέχεται στο datagram ή και στην επικεφαλίδα του TCP. Η δουλειά του είναι να βρει μια διαδρομή (route) για το datagram και να το στείλει στο άλλο άκρο.

Για να επιτρέψει στις πύλες (gateways) ή σ’ άλλα ενδιάμεσα συστήματα να προωθήσουν το datagram, προσθέτει τη δική του επικεφαλίδα (header). Τα κυριότερα στοιχεία σ’ αυτή την επικεφαλίδα είναι οι διευθύνσεις Internet αποστολέα και παραλήπτη, ο αριθμός πρωτοκόλλου και ένα άλλο checksum.

Ο αριθμός πρωτοκόλλου λέει στο ΙΡ του άλλου άκρου να στείλει το datagram στο TCP και αυτό γιατί υπάρχουν και άλλα πρωτόκολλα που χρησιμοποιούν το ΙΡ, εκτός από το TCP/IP. Το checksum δίνει τη δυνατότητα στο ΙΡ του άλλου άκρου να επιβεβαιώσει ότι η επικεφαλίδα δεν αλλοιώθηκε κατά την εκπομπή. Σημειώστε ότι το TCP και το IP έχουν διαφορετικά checksums.

Το μήνυμα μετά την προσθήκη της επικεφαλίδας του ΙΡ έχει την εξής μορφή :

VersionIHLΕίδος ΥπηρεσίαςΣυνολικό Μήκος
ΑναγνώρισηΣημαίεςFragment Offset
Χρόνος ΖωήςΠρωτόκολλοChecksum Επικεφαλίδας
Διεύθυνση Αποστολέα
Διεύθυνση Παραλήπτη
Επικεφαλίδα του TCP, ìåôά τα δεδομένα …

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

            ΙΤ….     ΙΤ….     ΙΤ….     ΙΤ….     ΙΤ….     ΙΤ….     ΙΤ….

Οι Σημαίες και το Fragment Offset χρησιμοποιούνται για να παρακολουθούνται τα κομμάτια όταν ένα datagram πρέπει να χωριστεί. Αυτό μπορεί να συμβεί όταν τα datagrams προωθούνται μέσω ενός δικτύου για το οποίο είναι πάρα πολύ μεγάλα. Ο Χρόνος Ζωής είναι ένας αριθμός που ελαττώνεται κάθε φορά που το datagram περνάει από ένα σύστημα. Όταν φθάσει στο μηδέν, το datagram απορρίπτεται.

Το Επίπεδο Ethernet

Τα περισσότερα από τα υπάρχοντα δίκτυα χρησιμοποιούν το Ethernet και θα πρέπει να περιγράψουμε τις επικεφαλίδες (headers) του Ethernet. Δυστυχώς, το Ethernet διαθέτει τις δικές του διευθύνσεις και αυτό γιατί εκείνοι που το σχεδίασαν ήθελαν να είναι σίγουροι ότι δεν θα υπάρχουν δύο μηχανήματα με την ίδια διεύθυνση Ethernet. Επιπλέον, δεν ήθελαν να απασχολούν τον χρήστη με την εκχώρηση των διευθύνσεων. Έτσι, ο κάθε ελεγκτής (controller) του Ethernet διαθέτει μια ενσωματωμένη διεύθυνση από το εργοστάσιο. Για να είναι σίγουροι ότι δεν πρόκειται να χρησιμοποιηθούν ξανά οι ίδιες διευθύνσεις, οι σχεδιαστές του Ethernet διέθεσαν 48 bits για τη διεύθυνση του Ethernet.

Όσοι κατασκευάζουν μηχανήματα με το Ethernet, πρέπει να κάνουν εγγραφή σε μια κεντρική υπηρεσία, για να είναι σίγουροι ότι οι αριθμοί που εκχωρούνται δεν είναι ίδιοι μ’ αυτούς άλλων κατασκευαστών. Το Ethernet είναι ένα «μέσο διάδοσης». Δηλαδή, είναι στην ουσία σαν μια παλιά τηλεφωνική γραμμή πάρτι. Όταν στέλνουμε ένα πακέτο στο Ethernet, το βλέπουν όλα τα μηχανήματα που βρίσκονται στο δίκτυο.

Έτσι, κάτι πρέπει να κάνουμε για να βεβαιωθούμε ότι θα το λάβει το σωστό μηχάνημα. Όπως ίσως φαντάζεστε, αυτό έχει να κάνει με την επικεφαλίδα (header) του Ethernet. Το κάθε πακέτο του Ethernet περιέχει μια επικεφαλίδα με 14 octets, που περιλαμβάνει τις διευθύνσεις του αποστολέα και του παραλήπτη και έναν κωδικό. Το κάθε μηχάνημα ενδιαφέρεται μόνο για τα πακέτα που περιέχουν τη δική του διεύθυνση στο πεδίο προορισμού (παραλήπτη).

Πρέπει να έχουμε υπόψη μας ότι δεν υπάρχει κάποια σχέση ανάμεσα στις διευθύνσεις του Internet και του Ethernet. Το κάθε μηχάνημα πρέπει να έχει μια λίστα με το ποια διεύθυνση Ethernet αντιστοιχεί σε ποια διεύθυνση Internet. Εκτός από τις διευθύνσεις, η επικεφαλίδα περιέχει και έναν κωδικό (type code), ο οποίος δίνει τη δυνατότητα σε πολλά διαφορετικά πρωτόκολλα να χρησιμοποιηθούν στο ίδιο δίκτυο. Έτσι, μπορούμε να χρησιμοποιούμε το TCP/IP, το DECnet, το XEROX NS κ.ά. την ίδια στιγμή.

Το καθένα από τα πρωτόκολλα αυτά θα δώσει μια διαφορετική τιμή στο πεδίο type. Στο τέλος, υπάρχει ένα checksum. Ο ελεγκτής του Ethernet υπολογίζει ένα checksum για ολόκληρο το πακέτο. Όταν ληφθεί το πακέτο στο άλλο άκρο, υπολογίζει ξανά το checksum και απορρίπτει το πακέτο αν το αποτέλεσμα δεν είναι το ίδιο με το αρχικό. Το checksum τοποθετείται στο τέλος του πακέτου και όχι στην επικεφαλίδα.

Το μήνυμα έχει την εξής τελική μορφή :

Διεύθυνση Προορισμού του Ethernet
(τα πρώτα 32 bits)
Προορισμός του Ethernet(τελευταία 16 bits)Προέλευση του Ethernet(πρώτα 16 bits)
Διεύθυνση Αποστολής του Ethernet(τα τελευταία 32 bits)
Type code 
Επικεφαλίδα ΙΡ, μετά επικεφαλίδα TCP, μετά τα δεδομένα…τέλος των δεδομένων
Checksum του Ethernet

Αν συμβολίσουμε την επικεφαλίδα του Ethernet με το Ε και το checksum με το C, το αρχείο θα έχει τώρα την εξής μορφή :

            ΕΙΤ….C           ΕΙΤ….C           ΕΙΤ….C           ΕΙΤ….C           ΕΙΤ….C

Όταν αυτά τα πακέτα λαμβάνονται στο άλλο άκρο, απομακρύνονται όλες οι επικεφαλίδες. Το interface του Ethernet απομακρύνει την επικεφαλίδα του Ethernet και το checksum και ελέγχει το type code. Αν το type code έχει εκχωρηθεί στο ΙΡ, το πρόγραμμα οδήγησης (device driver) του Ethernet περνάει το datagram στο ΙΡ. Το ΙΡ απομακρύνει την επικεφαλίδα του ΙΡ και ελέγχει το πεδίο πρωτοκόλλου του ΙΡ.

Αν το είδος πρωτοκόλλου είναι TCP, περνάει το datagram στο TCP, το οποίο τώρα ελέγχει τον αριθμό σειράς και χρησιμοποιεί τους αριθμούς σειράς και άλλες πληροφορίες για να συνδυάσει όλα τα datagrams και να σχηματίσει το αρχικό αρχείο.

Τα Γνωστά Sockets και το Επίπεδο Εφαρμογών

Μέχρι τώρα έχουμε περιγράψει πώς ένα ρεύμα δεδομένων διασπάται σε datagrams, στέλνεται σ’ έναν άλλον υπολογιστή και ξανασυναρμολογείται εκεί. Όμως, κάτι ακόμα χρειάζεται για να μπορέσουμε να επιτύχουμε κάτι χρήσιμο. Πρέπει να υπάρχει ένας τρόπος για να μπορέσουμε να ανοίξουμε μια σύνδεση προς έναν συγκεκριμένο υπολογιστή, να εισέλθουμε σ’ αυτόν (log in), να του πούμε ποια αρχεία χρειαζόμαστε και να ελέγχουμε την εκπομπή των αρχείων.

Αυτό γίνεται με τα πρωτόκολλα εφαρμογής (application protocols), τα οποία τρέχουν πάνω από το TCP/IP. Δηλαδή, όταν θέλουν να στείλουν ένα μήνυμα, παραδίδουν το μήνυμα στο TCP, το οποίο βεβαιώνει ότι παραδίδεται σωστά από το άλλο άκρο. Επειδή το TCP και το IP  φροντίζουν για όλες τις λεπτομέρειες της δικτύωσης, τα πρωτόκολλα εφαρμογής μπορούν να φροντίσουν μια σύνδεση δικτύου σαν να ήταν μια απλή ροή από bytes, όπως μια γραμμή τερματικού ή τηλεφώνου.

Πριν μπούμε σε περισσότερες λεπτομέρειες για τα προγράμματα εφαρμογής, πρέπει να περιγράψουμε πώς βρίσκουμε μια εφαρμογή. Ας υποθέσουμε ότι θέλουμε να στείλουμε ένα αρχείο σ’ έναν υπολογιστή του οποίου η διεύθυνση στο Internet είναι 128.6.4.7. Πρέπει να συνδεθούμε στον FTP server στο άλλο άκρο. Σε γενικές γραμμές, τα προγράμματα δικτύων είναι εξειδικευμένα για ένα συγκεκριμένο σύνολο εργασιών. Τα περισσότερα συστήματα έχουν ξεχωριστά προγράμματα για τις μεταφορές αρχείων, πρόσβαση σε απομακρυσμένα τερματικά, ταχυδρομείο (mail) κ.ά.

Όταν συνδεθούμε στον 128.6.4.7, πρέπει να διευκρινίσουμε ότι θέλουμε να συνομιλήσουμε με τον FTP server. Αυτό γίνεται διαθέτοντας «γνωστά sockets» για τον κάθε server. Οι servers πρέπει να διαθέτουν γνωστούς αριθμούς, έτσι ώστε να μπορούν οι χρήστες να δημιουργήσουν συνδέσεις μαζί τους και να αρχίσουν να τους στέλνουν εντολές.

Σημειώστε ότι μια σύνδεση περιγράφεται ουσιαστικά από ένα σύνολο τεσσάρων αριθμών : τη διεύθυνση Internet σε κάθε άκρο και τον αριθμό θύρας (port number) του TCP σε κάθε άκρο. Το κάθε datagram περιέχει και τους τέσσερις αυτούς αριθμούς. Οι διευθύνσεις Internet περιέχονται στην επικεφαλίδα του ΙΡ και οι αριθμοί θύρας του TCP στην επικεφαλίδα του TCP.

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

                        Διευθύνσεις Internet                        Θύρες TCP

σύνδεση 1      128.6.4.194, 128.6.4.7                     1234, 21

σύνδεση 2      128.6.4.194, 128.6.4.7                     1235, 21

Εφόσον πρόκειται για τα ίδια μηχανήματα, οι διευθύνσεις Internet είναι ίδιες. Εφόσον και τα δύο κάνουν μεταφορά αρχείων, το ένα άκρο της σύνδεσης περιέχει τον γνωστό αριθμό θύρας για το FTP. Η μόνη διαφορά είναι ο αριθμός θύρας του προγράμματος που τρέχουν οι χρήστες.

Ένα Παράδειγμα Εφαρμογής : SMTP

Για να πάρουμε μια καλύτερη ιδέα για το τι συμβαίνει με τα πρωτόκολλα εφαρμογής, θα δούμε το παράδειγμα του SMTP, που είναι το πρωτόκολλο εισερχόμενης αλληλογραφίας (mail protocol). Τα αρχικά σημαίνουν Simple Mail Transfer Protocol.

Ας υποθέσουμε ότι ένας υπολογιστής με το όνομα TOPAZ.RUT­GERS.EDU θέλει να στείλει το εξής μήνυμα :

Date: Wed, 9 Feb 00 14:23:32 EDT

From: [email protected]

To: [email protected]

Subject: meeting

Let’s meet Monday at 1 pm.

Πρώτα απ’ όλα, πρέπει να σημειώσουμε ότι η μορφή του μηνύματος καθορίζεται από ένα στάνταρτ του Internet, που σημαίνει ότι το μήνυμα πρέπει να σταλεί σαν καθαρό κείμενο ASCII, πρέπει να υπάρχει μια ομάδα με γραμμές επικεφαλίδων, μετά μία κενή γραμμή και τέλος το σώμα του μηνύματος. Οι γραμμές επικεφαλίδων αποτελούνται από μια λέξη-κλειδί (keyword) και μια τιμή.

Το πρόγραμμα που έχει αναλάβει την αποστολή του μηνύματος υποβάλει στον name server αρκετές ερωτήσεις για να μάθει προς τα πού θα δρομολογήσει (route) το μήνυμα. Η πρώτη ερώτηση είναι να βρεθεί ποια μηχανήματα χειρίζονται την αλληλογραφία για το όνομαred.rutgers.edu.

Σ’ αυτή την περίπτωση, ο server απαντάει ότι ο red.rutgers.edu χειρίζεται μόνος του την αλληλογραφία του. Το πρόγραμμα μετά ζητάει τη διεύθυνση του red.rutgers.edu, που είναι η 128.6.4.2. Μετά το πρόγραμμα αλληλογραφίας ανοίγει μια σύνδεση TCP στη θύρα 25 και στη διεύθυνση 128.6.4.2. Η θύρα 25 είναι το γνωστό socket που χρησιμοποιείται για την παραλαβή αλληλογραφίας. Αφότου επιτευχθεί αυτή η σύνδεση, το πρόγραμμα αλληλογραφίας αρχίζει να στέλνει εντολές. Ακολουθεί μια τυπική συνομιλία, την οποία ξεκίνησε ο TOPAZ :

RED                220 RED.RUTGERS.EDU SMTP Service at 10 Feb 00 19:05:17 EDT

TOPAZ            HELO topaz.rutgers.edu

RED                250 RED.RUTGERS.EDU – Hello, TOPAZ.RUTGERS.EDU

TOPAZ            MAIL From:<[email protected]>

RED                250 MAIL accepted

TOPAZ            RCPT To:<[email protected]>

RED                250 Recipient accepted

TOPAZ            DATA

RED                354 Start mail input; end with <CRLF> .<CRLF>

TOPAZ            Date: Wed, 9 Feb 00 14:23:32 EDT

TOPAZ            From: [email protected]

TOPAZ            To: [email protected]

TOPAZ            Subject: meeting

TOPAZ           

TOPAZ            Let’s meet Monday at 1 pm.

TOPAZ            .

RED                250 OK

TOPAZ            QUIT

RED                221 RED.RUTGERS.EDU Service closing transmission channel

Όπως βλέπουμε στο παραπάνω παράδειγμα επικοινωνίας, όλες οι εντολές χρησιμοποιούν κανονικό κείμενο, κάτι που είναι χαρακτηριστικό των στάνταρτς του Internet. Ακόμη, όλες οι απαντήσεις αρχίζουν με αριθμούς, που κι αυτό αποτελεί ένα χαρακτηριστικό των πρωτοκόλλων του Internet. Οι εντολές απλά επιτρέπουν στο πρόγραμμα αλληλογραφίας στο ένα άκρο να ενημερώσει τον mail server με τις πληροφορίες που πρέπει να ξέρει για να μπορέσει να αποστείλει το μήνυμα. Η κάθε συνδιαλλαγή πρέπει να αρχίζει μ’ ένα HELO, το οποίο δίνει το όνομα του συστήματος που ξεκίνησε τη σύνδεση. Μετά καθορίζονται ο αποστολέας και οι παραλήπτες.

Μπορεί να υπάρχουν και περισσότερες από μια εντολές RCPT, αν οι αποδέκτες είναι πολλοί. Τέλος, στέλνονται και τα δεδομένα (DATA). Το κείμενο του μηνύματος τελειώνει με μια γραμμή που περιέχει μια τελεία (.). Αφότου ληφθεί το μήνυμα, ο αποστολέας μπορεί να στείλει κι άλλο μήνυμα ή να τερματίσει τη σύνδεση, όπως παραπάνω. 

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

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

Τα Πρωτόκολλα UDP και ICMP

Μέχρι τώρα περιγράψαμε μόνο συνδέσεις που χρησιμοποιούν το TCP, το οποίο είναι υπεύθυνο για τον διαχωρισμό των μηνυμάτων σε datagrams και τη σωστή ανασυναρμολόγησή τους αργότερα. Σε πολλές, όμως, εφαρμογές, υπάρχουν μηνύματα που θα ταιριάζουν πάντα σ’ ένα μόνο datagram. Ένα παράδειγμα είναι η αναζήτηση ονόματος. Όταν ένας χρήστης προσπαθεί να συνδεθεί μ’ ένα άλλο σύστημα, θα αναφέρεται συνήθως στο σύστημα με το όνομά του, παρά με τη διεύθυνση Internet. Το σύστημά του πρέπει να μεταφράσει το όνομα στην κατάλληλη διεύθυνση πριν μπορέσει να κάνει τη σύνδεση.

Λίγα, όμως, συστήματα διαθέτουν τη βάση δεδομένων για να μετατρέπουν τα ονόματα σε διευθύνσεις. Έτσι, το σύστημα του χρήστη θα πρέπει να στείλει μια ερώτηση σ’ ένα από τα συστήματα που διαθέτει αυτή τη βάση δεδομένων. Αυτή η ερώτηση θα είναι πολύ μικρή και είναι σίγουρο ότι θα χωράει σ’ ένα μόνο datagram, όπως άλλωστε και η απάντηση. Για μια τέτοια ερώτηση που χωράει σ’ ένα μόνο datagram, δεν χρειαζόμαστε όλη την πολυπλοκότητα του TCP. Η πιο κοινή εναλλακτική λύση είναι το UDP (user datagram protocol), που είναι σχεδιασμένο για εφαρμογές όπου δεν χρειάζεται να τοποθετούμε σειρές από datagrams μαζί.

Μοιάζει πολύ με το TCP. Υπάρχει μια επικεφαλίδα (header) UDP. Το λογισμικό του δικτύου τοποθετεί την επικεφαλίδα του UDP στην προμετωπίδα των δεδομένων μας και μετά στέλνει τα δεδομένα στο ΙΡ, το οποίο προσθέτει την επικεφαλίδα ΙΡ, τοποθετώντας τον αριθμό πρωτοκόλλου του UDP στο πεδίο πρωτοκόλλου αντί για τον αριθμό πρωτοκόλλου του TCP. Όμως, το UDP δεν κάνει τόσα πολλά όσα το TCP. Δεν διασπάει τα δεδομένα σε πολλαπλά datagrams και δεν παρακολουθεί αυτά που έχει στείλει. Αυτό που κυρίως παρέχει το UDP είναι οι αριθμοί θυρών (port numbers), που χρησιμοποιούνται παρόμοια με τους αριθμούς θυρών του TCP.

Υπάρχουν γνωστοί αριθμοί θυρών για servers που χρησιμοποιούν το UDP. Η επικεφαλίδα του UDP είναι μικρότερη από την επικεφαλίδα του TCP, γιατί περιέχει μόνο τους αριθμούς θυρών πηγής και προορισμού και το checksum και όχι αριθμούς σειράς, γιατί δεν τους χρειάζεται.

Μια άλλη εναλλακτική λύση είναι το ICMP (Internet control message protocol), που χρησιμοποιείται για μηνύματα λαθών και για άλλα μηνύματα που προορίζονται για το λογισμικό του ίδιου του TCP, παρά για ένα συγκεκριμένο πρόγραμμα χρήστη. Το ICMP μπορεί επίσης να χρησιμοποιηθεί για να βρεθούν κάποιες πληροφορίες για το δίκτυο. Το ICMP είναι παρόμοιο με το UDP στο ότι χειρίζεται μηνύματα που χωράνε σ’ ένα μόνο datagram. Όμως, είναι απλούστερο από το UDP καθώς δεν περιέχει αριθμούς θυρών στην επικεφαλίδα του.

Το Σύστημα Domain

Όπως είδαμε και νωρίτερα, το λογισμικό του δικτύου χρειάζεται μια διεύθυνση Internet των 32 bits για να μπορέσει να ξεκινήσει μια σύνδεση ή να στείλει ένα datagram. Όμως, οι χρήστες προτιμούν να ασχολούνται με ονόματα υπολογιστών παρά με αριθμούς. Έτσι λοιπόν υπάρχει μια βάση δεδομένων που δίνει τη δυνατότητα στο λογισμικό να αναζητήσει ένα όνομα και να βρει τον αντίστοιχο αριθμό. Όταν το Internet ήταν μικρό, αυτό ήταν μια εύκολη δουλειά. Το κάθε σύστημα μπορούσε να έχει ένα αρχείο το οποίο περιείχε όλα τα άλλα συστήματα, με το όνομα και τον αριθμό τους.

Τώρα, όμως, υπάρχουν πάρα πολλοί υπολογιστές για να μπορεί να γίνει κάτι ανάλογο. Έτσι λοιπόν αυτά τα αρχεία έχουν αντικατασταθεί από ένα σύνολο name servers που καταγράφουν τα ονόματα των host υπολογιστών και τις αντίστοιχες διευθύνσεις Internet.Υπάρχουν σήμερα τόσοι πολλοί οργανισμοί που είναι συνδεδεμένοι στο Internet, που δεν θα ήταν πρακτικό γι’ αυτούς να ενημερώνουν μια κεντρική υπηρεσία οποτεδήποτε εγκαθιστούν ή μετακινούν έναν υπολογιστή. Έτσι λοιπόν η χορήγηση ονομάτων έχει παραχωρηθεί σε ανεξάρτητους οργανισμούς.

Οι name servers σχηματίζουν ένα δένδρο, αντίστοιχης δομής μ’ αυτής των οργανισμών. Τα ίδια τα ονόματα ακολουθούν μια παρόμοια δομή. Ένα χαρακτηριστικό παράδειγμα είναι το όνομα BORAX.LCS.MIT.EDU, που είναι ένας υπολογιστής στο Εργαστήριο Υπολογιστών (LCS) στο ΜΙΤ. Για να μπορέσουμε να βρούμε αυτή τη διεύθυνση Internet, ίσως χρειαστεί να επισκεφθούμε τέσσερις διαφορετικούς servers. Πρώτα, θα ρωτούσαμε έναν κεντρικό server (που ονομάζεται root) για το πού βρίσκεται ο server EDU. Ο EDUείναι ένας server που καταγράφει εκπαιδευτικά ιδρύματα (οργανισμούς).

Ο root server θα μας έδινε τα ονόματα και τις διευθύνσεις Internet αρκετών servers του EDU. Θα ρωτούσαμε μετά τον EDU για το πού βρίσκεται ο server του ΜΙΤ. Ξανά, θα μας έδινε τα ονόματα και τις διευθύνσεις Internet αρκετών servers του ΜΙΤ. Μετά, θα ρωτούσαμε τον ΜΙΤ για το πού βρίσκεται ο server του LCS και τελικά θα ρωτούσαμε έναν από τους LCS servers για το πού βρίσκεται ο BORAX. Το τελικό αποτέλεσμα θα ήταν η διεύθυνση Internet του BORAX. LCS.MIT.EDU.

Το καθένα απ’ αυτά τα επίπεδα αναφέρεται σαν ένα domain (τομέας ή χώρος ή περιοχή) και ολόκληρο το όνομα BORAX.LCS.MIT.EDU αποκαλείται έναdomain name (όνομα τομέα ή όνομα χώρου ή όνομα περιοχής). Έτσι αποκαλούνται και τα ονόματα των domainsυψηλότερου επιπέδου, όπως τα LCS.MIT.EDU, MIT.EDU και EDU. Ευτυχώς, δεν χρειάζεται να μπαίνουμε σ’ όλη αυτή τη διαδικασία τις περισσότερες φορές. Πρώτα απ’ όλα, οι root name servers είναι επίσης οι name servers για τα domains υψηλού επιπέδου, όπως είναι το EDU. Έτσι, μια απλή ερώτηση σ’ έναν root server θα μας πάει στο ΜΙΤ.

Δεύτερο, το λογισμικό γενικά θυμάται τις απαντήσεις που έλαβε νωρίτερα. Έτσι, όταν αναζητάμε ένα όνομα σαν το LCS.MIT.EDU, το λογισμικό μας θυμάται πού να βρει τους servers για τα LCS.MIT.EDU, MIT.EDU και EDU. Θυμάται επίσης τη μετάφραση του BORAX.LCS.MIT.EDU. Καθένα απ’ αυτά τα κομμάτια πληροφορίας έχει έναν δικό του χρόνο ζωής, που είναι συνήθως μερικές ημέρες. Μετά, οι πληροφορίες χάνονται και πρέπει να αναζητηθούν ξανά. Αυτό δίνει τη δυνατότητα στους οργανισμούς να αλλάζουν τα πράγματα.

Το σύστημα domain δεν αναζητά μόνο διευθύνσεις στο Internet. Το κάθε domain αποτελεί έναν κόμβο (node) σε μια βάση δεδομένων, που μπορεί να περιέχει εγγραφές (records) που ορίζουν έναν αριθμό από διαφορετικές ιδιότητες. Ένα πρόγραμμα μπορεί να ζητήσει ένα συγκεκριμένο κομμάτι πληροφορίας ή όλες τις πληροφορίες για ένα δεδομένο όνομα. Είναι δυνατό ένας κόμβος σε μια βάση δεδομένων να χαρακτηριστεί σαν alias (ψευδώνυμο) για έναν άλλον κόμβο. Είναι επίσης δυνατό να χρησιμοποιήσουμε το σύστημα domain για να αποθηκεύσουμε πληροφορίες για τους χρήστες, τις mailing lists ή και για άλλα αντικείμενα.

Το σύστημα domain είναι ιδιαίτερα σημαντικό για να χειρίζεται την αλληλογραφία (mail) των υπολογιστών. Υπάρχουν ειδικές καταχωρήσεις που ορίζουν ποιος υπολογιστής χειρίζεται την αλληλογραφία για ένα δεδομένο όνομα, πού λαμβάνει την αλληλογραφία του ένας χρήστης και πού ορίζουν τις mailing lists.

Η Δρομολόγηση (Routing)

Η εργασία που γίνεται για να σταλεί ένα datagram στον προορισμό του αναφέρεται σαν δρομολόγηση (routing). Πρώτα, πρέπει να καταλάβουμε το μοντέλο πάνω στο οποίο βασίζεται το ΙΡ. Το ΙΡ θεωρεί σαν δεδομένο ότι ένα σύστημα είναι συνδεδεμένο σε κάποιο τοπικό δίκτυο. Υποθέτουμε ότι το σύστημα μπορεί να στείλει datagrams σε οποιοδήποτε άλλο σύστημα στο δικό του δίκτυο. Αν πρόκειται για δίκτυο Ethernet, απλά βρίσκει τη διεύθυνση Ethernet του συστήματος προορισμού και στέλνει το datagram στο Ethernet.

Το πρόβλημα προκύπτει όταν ζητείται από ένα σύστημα να στείλει ένα datagram σ’ ένα άλλο σύστημα ενός άλλου δικτύου. Αυτό το πρόβλημα αντιμετωπίζεται με τις πύλες (gateways). Η πύλη (gateway) είναι ένα σύστημα που συνδέει ένα δίκτυο μ’ ένα ή περισσότερα άλλα δίκτυα. Οι πύλες είναι συνήθως κανονικοί υπολογιστές που τυγχάνει να έχουν περισσότερα από ένα interface δικτύου. Για παράδειγμα, έχουμε ένα μηχάνημα Unix που έχει δύο διαφορετικά interfaces στο Ethernet και είναι έτσι συνδεδεμένο στα δίκτυα 128.6.4 και 128.6.3.

Αυτό το μηχάνημα μπορεί να ενεργεί σαν πύλη ανάμεσα στα δύο αυτά δίκτυα και το λογισμικό που είναι εγκατεστημένο πάνω του πρέπει να ρυθμιστεί έτσι ώστε να προωθεί (forward) τα datagrams από το ένα δίκτυο στο άλλο. Τα μεγάλα τηλεπικοινωνιακά κέντρα έχουν συνήθως πύλες που συνδέουν πολλά διαφορετικά δίκτυα. Η δρομολόγηση στο ΙΡ βασίζεται εξ ολοκλήρου στον αριθμό δικτύου της διεύθυνσης προορισμού. Ο κάθε υπολογιστής διαθέτει έναν πίνακα από αριθμούς δικτύου και για κάθε αριθμό δικτύου, υπάρχει μια πύλη. Αυτή είναι η πύλη που θα χρησιμοποιηθεί για να φθάσουμε σ’ αυτό το δίκτυο.

Όταν ένας υπολογιστής θέλει να στείλει ένα datagram, πρώτα ελέγχει για να διαπιστώσει αν η διεύθυνση προορισμού βρίσκεται στο τοπικό δίκτυο του συστήματος. Αν ναι, το datagram μπορεί να σταλεί κατευθείαν. Διαφορετικά, το σύστημα περιμένει να βρει μια καταχώρηση για το δίκτυο στο οποίο βρίσκεται η διεύθυνση προορισμού. Το datagram στέλνεται στην πύλη που υπάρχει σ’ αυτή την καταχώρηση. Αυτός ο πίνακας μπορεί να είναι αρκετά μεγάλος. Για παράδειγμα, το Internet σήμερα περιλαμβάνει αρκετές εκατοντάδες ανεξάρτητα δίκτυα. Έτσι, έχουν αναπτυχθεί διάφορες στρατηγικές για να ελαττωθεί το μέγεθος του πίνακα δρομολόγησης.

Μια στρατηγική είναι να στηριχθούμε σε «default routes». Συνήθως, υπάρχει μία μόνο πύλη σ’ ένα δίκτυο. Αυτή η πύλη μπορεί να συνδέσει ένα τοπικό Ethernet σ’ ένα μεγάλο δίκτυο υποστήριξης (backbone network). Σ’ αυτή την περίπτωση δεν χρειάζεται να έχουμε μια ξεχωριστή καταχώρηση για κάθε δίκτυο που υπάρχει στον κόσμο. Απλά ορίζουμε αυτή την πύλη σαν default (εξ ορισμού). Όταν δεν βρεθεί κάποια συγκεκριμένη διαδρομή (route) για ένα datagram, το datagram στέλνεται στην default πύλη. Μια εξ ορισμού πύλη μπορεί να χρησιμοποιηθεί ακόμη κι όταν υπάρχουν πολλές πύλες σ’ ένα δίκτυο.

Ας υποθέσουμε ότι το δίκτυο 128.6.4 διαθέτει δύο πύλες, τις 128.6.4.59 και 128.6.4.1. Η 128.6.4.59 οδηγεί σε αρκετά άλλα εσωτερικά δίκτυα Rutgers και η 128.6.4.1 οδηγεί έμμεσα στο NSFnet. Ας υποθέσουμε ότι ορίζουμε την 128.6.4.59 σαν την εξ ορισμού πύλη και δεν έχουμε άλλες καταχωρήσεις δρομολόγησης πίνακα (routing table). Τι θα συμβεί τώρα όταν πρέπει να στείλουμε ένα datagram στο ΜΙΤ; Το ΜΙΤ είναι το δίκτυο 18. Εφόσον δεν έχουμε καμία καταχώρηση για το δίκτυο 18, το datagram θα σταλεί στην εξ ορισμού πύλη 128.6.4.59, που είναι μια λάθος επιλογή. Έτσι, αυτή θα προωθήσει (forward) το datagram στην 128.6.4.1, αλλά θα στείλει πίσω και ένα μήνυμα που θα λεει το εξής : «για να πάτε στο δίκτυο 18, χρησιμοποιήστε την 128.6.4.1».

Το πρόγραμμα θα προσθέσει μια καταχώρηση στον πίνακα δρομολόγησης. Όλα τα μελλοντικά datagrams προς το ΜΙΤ θα πηγαίνουν κατευθείαν στην 128.6.4.1. Το μήνυμα λάθους στέλνεται με το πρωτόκολλο ICMP και το είδος του μηνύματος ονομάζεται «ICMPredirect».

Οι περισσότεροι ειδικοί στο ΙΡ συμβουλεύουν ότι οι ανεξάρτητοι υπολογιστές δεν πρέπει να παρακολουθούν ολόκληρο το δίκτυο, αλλά να ξεκινούν default πύλες και να αφήνουν τις πύλες να τους ενημερώνουν για τις διαδρομές (routes), όπως ήδη περιγράψαμε. Όμως, αυτό δεν εξηγεί πώς οι πύλες θα βρουν στοιχεία για τις διαδρομές. Οι πύλες δεν μπορούν να βασιστούν σ’ αυτή τη στρατηγική.

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

Λεπτομέρειες για τις Διευθύνσεις του Internet

Όπως είδαμε νωρίτερα, οι διευθύνσεις του Internet είναι αριθμοί των 32 bits, που γράφονται κανονικά σαν 4 octets (με δεκαδικές τιμές), όπως π.χ. 128.6.4.7. Στην πραγματικότητα υπάρχουν τρία διαφορετικά είδη διεύθυνσης. Το πρόβλημα είναι ότι η διεύθυνση πρέπει να δείξει και το δίκτυο και τον host υπολογιστή που βρίσκεται μέσα στο δίκτυο. Αρχικά υπήρχε η αίσθηση ότι τα 24 bits θα ήταν αρκετά για να παραστήσουν όλα τα ΙΡ δίκτυα και ότι μερικά πολύ μεγάλα δίκτυα θα χρειάζονταν 24 bits για να παραστήσουν όλους τους hostsυπολογιστές που διαθέτουν.

Αυτό θα οδηγούσε σε διευθύνσεις των 48 bits, αλλά οι σχεδιαστές ήθελαν οπωσδήποτε να χρησιμοποιούν διευθύνσεις των 32 bits. Έτσι έκαναν μια συναρμολόγηση. Η αποδοχή που έκαναν είναι ότι τα περισσότερα δίκτυα θα είναι μικρά. Έτσι όρισαν τρεις διαφορετικές περιοχές διευθύνσεων. Οι διευθύνσεις που αρχίζουν από 1 έως 126 χρησιμοποιούν μόνο το πρώτο octet για τον αριθμό δικτύου και τα άλλα τρία octets διατίθενται για τον αριθμό του host. Έτσι τα 24 bits είναι διαθέσιμα για τους hosts υπολογιστές. Αυτοί οι αριθμοί χρησιμοποιούνται για μεγάλα δίκτυα.

Αλλά μπορούν να υπάρχουν μόνο 126 απ’ αυτά τα πολύ μεγάλα δίκτυα. Το Arpanet είναι ένα απ’ αυτά και υπάρχουν λίγα μεγάλα εμπορικά δίκτυα. Αλλά λίγοι οργανισμοί μπορούν να αποκτήσουν μια απ’ αυτές τις διευθύνσεις Α τάξης. Για τους άλλους μεγάλους οργανισμούς, χρησιμοποιούνται διευθύνσεις Β τάξης. Οι διευθύνσεις Β τάξης χρησιμοποιούν τα πρώτα δύο octets για τον αριθμό του δικτύου και έτσι οι αριθμοί δικτύου είναι από 128.1 έως 191.254. Αποφεύγουμε το 0 και το 255, για λόγους που θα τους εξηγήσουμε παρακάτω, όπως επίσης διευθύνσεις που αρχίζουν από το 127, επειδή αυτό χρησιμοποιείται από μερικά συστήματα για ειδικούς σκοπούς.

Τα δύο τελευταία octets διατίθενται για διευθύνσεις host, δίνοντας 16 bits για διευθύνσεις host. Αυτό δίνει τη δυνατότητα για 64.516 υπολογιστές, που πρέπει να είναι αρκετοί για τους περισσότερους οργανισμούς. Τέλος, οι διευθύνσεις C τάξης χρησιμοποιούν τρία octets, από 192.1.1 έως 223.254.254. Αυτό δίνει τη δυνατότητα μόνο για 254 hosts σε κάθε δίκτυο, αλλά μπορούν να υπάρχουν πάρα πολλά τέτοια δίκτυα. Οι διευθύνσεις πάνω από το 223 κρατούνται για μελλοντική χρήση, όπως και οι τάξεις D και E, οι οποίες δεν έχουν οριστεί ακόμα.

Πολλοί μεγάλοι οργανισμοί το βρίσκουν βολικό να διαιρούν τα δίκτυά τους σε υποδίκτυα (subnets). Για παράδειγμα, στο Rutgers έχει εκχωρηθεί μια διεύθυνση Β τάξης, η 128.6. Το βρίσκουμε βολικό να χρησιμοποιούμε το τρίτο octet της διεύθυνσης για να δείχνουμε σε ποιο δίκτυο Ethernet είναι συνδεδεμένος ο host υπολογιστής. Αυτό το τμήμα δεν έχει καμία αξία εκτός του Rutgers. Ένας υπολογιστής σ’ έναν άλλον οργανισμό θα αντιμετώπιζε όλα τα datagrams που κατευθύνονταν στο 128.6 με τον ίδιο τρόπο. Δεν θα κοίταζαν στο τρίτο octet της διεύθυνσης. Έτσι οι υπολογιστές εκτός του Rutgers δεν θα είχαν διαφορετικές διαδρομές για την 128.6.4 ή την 128.6.5.

Αλλά μέσα στο Rutgers, αντιμετωπίζουμε την 128.6.4 και την 128.6.5 σαν ξεχωριστά δίκτυα. Στην πραγματικότητα, οι πύλες εντός του Rutgers έχουν ξεχωριστές καταχωρήσεις για κάθε υποδίκτυο (subnet) του Rutgers, ενώ οι πύλες εκτός του Rutgers έχουν μόνο μία καταχώρηση για την 128.6. Προσέξτε ότι θα μπορούσαμε να κάνουμε ακριβώς το ίδιο χρησιμοποιώντας μια ξεχωριστή διεύθυνση τάξης C για κάθε δίκτυο Ethernet.

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

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

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

Το 255 χρησιμοποιείται για δημόσια εκπομπή (broadcast), που είναι ένα μήνυμα που θέλουμε να το δουν όλα τα συστήματα σ’ ένα δίκτυο. Τα broadcasts χρησιμοποιούνται σε μερικές περιπτώσεις που δεν ξέρουμε με ποιον να επικοινωνήσουμε. Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να ψάξουμε ένα όνομα host και να βρούμε τη διεύθυνσή του στο Internet.

Μερικές φορές δεν γνωρίζουμε τη διεύθυνση του κοντινότερου name server. Σ’ αυτή την περίπτωση, μπορούμε να στείλουμε ένα broadcast. Υπάρχουν επίσης περιπτώσεις όπου ένας αριθμός συστημάτων ενδιαφέρονται για πληροφόρηση. Σ’ αυτή την περίπτωση είναι λιγότερο δαπανηρό να στείλουμε ένα μόνο μήνυμα broadcast παρά να στείλουμε datagrams ατομικά σε κάθε host που ενδιαφέρεται για τις πληροφορίες αυτές.

Για να στείλουμε ένα broadcast, χρησιμοποιούμε μια διεύθυνση που αποτελείται από τη διεύθυνση του δικτύου μας με όλα τα 1 στο μέρος της διεύθυνσης όπου πηγαίνει ο αριθμός του host. Για παράδειγμα, αν είμαστε στο δίκτυο 128.6.4, θα χρησιμοποιούσαμε το 128.6.4.255 για τα broadcasts. Το πώς γίνεται αυτό στην πραγματικότητα εξαρτάται από το μέσο. Δεν είναι δυνατό να στείλουμε broadcasts στο Arpanet ή σε γραμμές point to point, αλλά είναι δυνατό σ’ ένα δίκτυο Ethernet. Αν χρησιμοποιούμε μια διεύθυνση Ethernet μ’ όλα τα bits on (όλα 1), τότε το κάθε μηχάνημα στο Ethernet θα έπρεπε να βλέπει εκείνο το datagram.

Αν και η επίσημη διεύθυνση broadcast για το δίκτυο 128.6.4 είναι τώρα η 128.6.4.255, υπάρχουν μερικές άλλες διευθύνσεις που μπορούμε να τις δούμε σαν broadcasts με συγκεκριμένους πρακτικές. Για ευκολία, το πρότυπο επιτρέπει επίσης να χρησιμοποιηθεί το 255.255.255.255. Αυτό αναφέρεται σ’ όλα τα hosts στο τοπικό δίκτυο. Είναι συχνά απλούστερο να χρησιμοποιούμε το 255.255.255.255 αντί να βρίσκουμε τον αριθμό του δικτύου για το τοπικό δίκτυο και να σχηματίζουμε μια διεύθυνση broadcast σαν την 128.6.4.255. Επιπλέον, μερικές παλιές πρακτικές ίσως να χρησιμοποιούν το 0 αντί του 255 για να σχηματίσουν τη διεύθυνση broadcast. Τέτοιες πρακτικές θα χρησιμοποιούν το 128.6.4.0 αντί του 128.6.4.255 σαν τη διεύθυνση broadcast στο δίκτυο 128.6.4.

Τελικά, μερικές παλιότερες πρακτικές ίσως να μην κατανοούν το τι συμβαίνει με τα υποδίκτυα (subnets) και έτσι να θεωρούν σαν αριθμό δικτύου το 128.6. Σ’ αυτή την περίπτωση, χρησιμοποιούν μια διεύθυνση broadcast σαν την 128.6.255.255 ή την 128.6.0.0. Μέχρις ότου η υποστήριξη για τα broadcasts να ολοκληρωθεί σωστά, ίσως να είναι λίγο επικίνδυνο να τα χρησιμοποιούμε.

Επειδή το 0 και το 255 χρησιμοποιούνται για άγνωστες και διευθύνσεις broadcast, στους κανονικούς hosts δεν θα πρέπει ποτέ να δίνονται διευθύνσεις που περιέχουν 0 ή 255. Οι διευθύνσεις δεν θα πρέπει ποτέ να αρχίζουν με 0, 127 ή με κάποιον αριθμό πάνω από το 223. Οι διευθύνσεις που παραβιάζουν αυτούς τους κανόνες αποκαλούνται μερικές φορές Αρειανοί (Ma­rtians), εξαιτίας φημών ότι το Κεντρικό Πανεπιστήμιο του Άρη (Mars) χρησιμοποιεί το δίκτυο 225.

Διαχωρισμός των Datagrams και Επανασυναρμολόγηση

Το TCP/IP είναι σχεδιασμένο για χρήση με πολλά διαφορετικά είδη δικτύου. Δυστυχώς, οι σχεδιαστές δικτύων δεν μπορούν να συμφωνήσουν για το πόσο μεγάλα μπορούν να είναι τα πακέτα. Τα πακέτα του Ethernet μπορούν να έχουν μήκος έως 1.500 octets, ενώ τα πακέτα του Arpanet έχουν ένα μέγιστο περίπου 1.000 octets. Μερικά πολύ γρήγορα δίκτυα έχουν πολύ μεγαλύτερα μεγέθη πακέτων.

Ίσως αρχικά νομίσουμε ότι το IP πρέπει να έχει το μικρότερο δυνατό μέγεθος. Δυστυχώς, αυτό θα προκαλούσε σοβαρά προβλήματα λειτουργίας. Όταν μεταφέρονται μεγάλα αρχεία, τα μεγάλα πακέτα είναι πολύ περισσότερο αποδοτικά απ’ ό,τι τα μικρά. Έτσι θέλουμε να μπορούμε να χρησιμοποιούμε το μεγαλύτερο δυνατό μέγεθος πακέτου.

Αλλά θέλουμε επίσης να μπορούμε να χειριζόμαστε δίκτυα με μικρά όρια. Υπάρχουν δύο προβλέψεις γι’ αυτό. Πρώτα, το TCP έχει τη δυνατότητα να «διαπραγματεύεται» το μέγεθος του datagram. Όταν μια σύνδεση TCP ανοίγει για πρώτη φορά, και τα δύο άκρα μπορούν να στείλουν το μεγαλύτερο δυνατό μέγεθος datagram που μπορούν να χειριστούν και ο μικρότερος απ’ αυτούς τους αριθμούς χρησιμοποιείται για να γίνει η σύνδεση.

Για παράδειγμα, όταν στέλνουμε δεδομένα ανάμεσα στο Rutgers και το Berkeley, είναι πιθανό ότι και οι δύο υπολογιστές θα είναι σε δίκτυα Ethernet. Έτσι θα είναι και οι δύο έτοιμοι να χειριστούν datagrams των 1.500 octets. Όμως, η σύνδεση θα τελειώσει σε κάποιο σημείο πηγαίνοντας πάνω στο Arpanet, το οποίο δεν μπορεί να χειριστεί πακέτα με τέτοια μεγέθη.

Για το λόγο αυτό, υπάρχει πρόβλεψη να διασπώνται τα datagrams σε κομμάτια, μια διαδικασία που αποκαλείται «fragmentation». Η επικεφαλίδα του IP περιέχει πεδία που δείχνουν αν ένα datagram έχει διασπαστεί και αρκετές πληροφορίες για να ξανασυναρμολογηθούν τα κομμάτια.

Αν μια πύλη συνδέει ένα Ethernet στο Arpanet, πρέπει να είναι έτοιμη να δεχθεί πακέτα Ethernet των 1.500 octets και να τα διασπάσει σε κομμάτια που θα κάνουν για το Arpanet. Επιπλέον, η κάθε πραγματοποίηση ενός host στο TCP/IP πρέπει να είναι έτοιμη να δεχθεί κομμάτια και να τα ξανατοποθετεί μαζί. Αυτό αποκαλείται επανασυναρμολόγηση (reassembly). Οι πραγματοποιήσεις του TCP/IP διαφέρουν στη θέση που παίρνουν για να αποφασίσουν για το μέγεθος του datagram. Είναι αρκετά κοινή πρακτική να χρησιμοποιούν datagrams των 576 bytes οποτεδήποτε δεν μπορούν να επιβεβαιώσουν ότι η πλήρης διαδρομή μπορεί να χειριστεί μεγαλύτερα πακέτα.

Οι κατασκευαστές προσπαθούν συχνά να αποφύγουν ακόμη και αυτή τη διάσπαση (fragmentation). Διάφοροι κατασκευαστές έχουν διαφορετικές προσεγγίσεις στο να αποφασίσουν πότε είναι ασφαλές να χρησιμοποιούν μεγάλα datagrams. Μερικοί τα χρησιμοποιούν μόνο για το τοπικό δίκτυο, ενώ άλλοι τα χρησιμοποιούν για οποιοδήποτε δίκτυο στον ίδιο οργανισμό. Τα 576 bytes είναι ένα «ασφαλές» μέγεθος, που πρέπει να υποστηρίζει η κάθε πραγματοποίηση.

Το ARP (Address Resolution Protocol)

Υπήρξε μια σύντομη συζήτηση νωρίτερα για το τι μοιάζουν τα IP datagrams σ’ ένα δίκτυο Ethernet. Η συζήτηση έδειξε την επικεφαλίδα του Ethernet και το checksum, Όμως, δεν ανέφερε τίποτα για το πώς μπορεί να βρεθεί ποια διεύθυνση Ethernet πρέπει να χρησιμοποιήσουμε όταν θέλουμε να μιλήσουμε με μια συγκεκριμένη διεύθυνση Internet. Στην πραγματικότητα, υπάρχει ένα ξεχωριστό πρωτόκολλο γι’ αυτό τον σκοπό, που αποκαλείται ARP (Address Resolution Protocol). Το ARP δεν είναι ένα πρωτόκολλο IP, δηλ. τα datagrams του ARP δεν περιέχουν επικεφαλίδες.

Ας υποθέσουμε ότι είμαστε στο σύστημα 128.6.4.194 και θέλουμε να συνδεθούμε με το σύστημα 128.6.4.7. Το σύστημά μας θα κάνει πρώτα επιβεβαίωση ότι το 128.6.4.7 βρίσκεται στο ίδιο δίκτυο, έτσι μπορούν να επικοινωνήσουν κατευθείαν μέσω του Ethernet. Μετά θα αναζητήσει το 128.6.4.7 στον πίνακα ARP που διαθέτει, για να διαπιστώσει αν γνωρίζει ήδη τη διεύθυνση Ethernet.

Αν τη γνωρίζει, θα κολλήσει μια επικεφαλίδα Ethernet και θα στείλει το πακέτο. Αλλά ας υποθέσουμε ότι αυτό το σύστημα δεν βρίσκεται στον πίνακα ARP. Δεν υπάρχει τρόπος να σταλεί το πακέτο, επειδή χρειαζόμαστε τη διεύθυνση του Ethernet. Έτσι χρησιμοποιεί το πρωτόκολλο ARP για να στείλει μια αίτηση (request) ARP. Ουσιαστικά, μια αίτηση ARP λεει το εξής : «χρειάζομαι τη διεύθυνση Ethernet του 128.6.4.7».

Το κάθε σύστημα ακούει προσεκτικά  τις αιτήσεις ARP. Όταν ένα σύστημα βλέπει μια αίτηση ARP που απευθύνεται στο ίδιο, πρέπει να απαντήσει. Έτσι το 128.6.4.7 θα δει την αίτηση και θα στείλει μια απάντηση ARP που θα λεει τα εξής : «το 128.6.4.7 είναι 8:0:20:1:56:34». Μην ξεχνάτε ότι οι διευθύνσεις του Ethernet αποτελούνται από 48 bits, δηλ. 6 octets, και παριστάνονται σε 16δική μορφή.

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

Πρέπει να έχουμε υπόψη μας ότι οι αιτήσεις ARP πρέπει να στέλνονται σαν broadcasts. Δεν υπάρχει κάποιος τρόπος να μπορεί να σταλεί μια αίτηση ARP κατευθείαν στο σωστό σύστημα. Έτσι κι αλλιώς, η αποκλειστική αιτία που στέλνουμε μια αίτηση ARP είναι το ότι δεν γνωρίζουμε τη διεύθυνση Etnernet.

Έτσι χρησιμοποιείται μια διεύθυνση Ethernet που αποτελείται μόνο από το ψηφίο 1, δηλ. ff:ff:ff:ff:ff:ff. Όλα τα μηχανήματα του δικτύου πρέπει να δίνουν προσοχή σε πακέτα που έχουν τέτοια διεύθυνση. Έτσι το κάθε σύστημα αναγνωρίζει όλες τις αιτήσεις ARP. Όλα ψάχνουν για να διαπιστώσουν αν η αίτηση αφορά τη δική τους διεύθυνση.

Αν ναι, απαντούν. Αν όχι, μπορούν να την αγνοήσουν. Μερικοί hosts χρησιμοποιούν αιτήσεις ARP για να ενημερωθούν για τους άλλους hosts που υπάρχουν στο δίκτυο, ακόμη κι αν η αίτηση δεν απευθύνεται σ’ αυτούς. Πρέπει να έχουμε υπόψη μας ότι πακέτα των οποίων η IP διεύθυνση δείχνει ότι πρόκειται για εκπομπή broadcast, όπως για παράδειγμα 255.255.255.255 ή 128.6.4.255 στέλνονται επίσης με μια διεύθυνση Ethernet που αποτελείται ολόκληρη από 1.   

Πηγή:

ΠΛΗ.ΝΕ.Τ

Αν βρήκατε το άρθρο μας χρήσιμο, θέλετε να μείνετε ενημερωμένοι για όλα τα νέα στο τομέα της τεχνολογίας καθώς και σε χρηστικά άρθρα, βοηθήστε μας κάνοντας like στην σελίδα μας στο Facebook πατώντας εδώ

(Visited 1.338 times, 1 visits today)

Μοιραστείτε το άρθρο

Ετικέτες: Last modified: 19/10/2019