Πρωτόκολλο Διαδικτύου

Το **Πρωτόκολλο Διαδικτύου (IP)** (*αγγλ.*, **Internet Protocol**), αποτελεί την κυριότερη σύμβαση επικοινωνίας για τη μετάδοση πακέτων δεδομένων σε ένα ***διαδίκτυο***1, και είναι τμήμα της Συλλογής Πρωτοκόλλων Διαδικτύου. Είναι υπεύθυνο για τη δρομολόγηση των πακέτων δεδομένων ανάμεσα στα διάφορα δίκτυα, ανεξάρτητα από την υποδομή τους, και αποτελεί το κύριο πρωτόκολλο πάνω στο οποίο είναι βασισμένο το Διαδίκτυο.

Το πρωτόκολλο ανήκει στο Επίπεδο Δικτύου, στο Μοντέλο Διαστρωμάτωσης TCP/IP. Καθορίζει τη μορφή των πακέτων που στέλνονται μέσω ενός διαδικτύου, καθώς και τους μηχανισμούς που χρησιμοποιούνται για την προώθηση των πακέτων από έναν υπολογιστή προς έναν τελικό προορισμό μέσω ενός ή περισσότερων δρομολογητών. Γι' αυτούς τους σκοπούς, το πρωτόκολλο, χρησιμοποιεί συγκεκριμένες μεθόδους διευθυνσιοδότησης και δομές για την ενθυλάκωση των πακέτων δεδομένων.

Το πρωτόκολλο πρωτοπαρουσιάστηκε από τους Βιντ Σερφ και Μπομπ Καν το 1974. Συνδέεται στενά με το Πρωτόκολλο Ελέγχου Μετάδοσης (**TCP**), με αποτέλεσμα ολόκληρη η συλλογή των πρωτοκόλλων του Διαδικτύου να αναφέρεται απλά ως TCP/IP.

Η πρώτη μεγάλης κλίμακας έκδοση του πρωτόκολλο ήταν η έκδοση 4 (**[[IPv4]]**) η οποία επικρατεί μέχρι και σήμερα σε όλο το Διαδίκτυο. Ωστόσο, λόγω του ότι δεν επαρκούν πλέον οι διαθέσιμες διευθύνσεις, τα τελευταία χρόνια, έχει αναπτυχθεί η διάδοχη έκδοση του πρωτοκόλλου, η έκδοση 6 (**[[IPv6]]**), η οποία είναι εν ενεργεία και χρησιμοποιείται ολοένα και περισσότερο σε όλο τον κόσμο. Οι τελευταίες διευθύνσεις IPv4 παραδόθηκαν σε ειδική τελετή, στις 3 Φεβρουαρίου του 2011, στο Μαϊάμι.

## Υπηρεσίες
Το πρωτόκολλο είναι υπεύθυνο για τη διευθυνσιοδότηση των κόμβων και την δρομολόγηση των πακέτων από έναν υπολογιστή προς έναν τελικό προορισμό, κατά μήκος ενός ή περισσότερων δικτύων. Για το σκοπό αυτό, καθορίζει ένα σύστημα διευθυνσιοδότησης, το οποίο έχει δύο λειτουργίες. Κάθε πακέτο, αποτελείται από μια κεφαλίδα και στη συνέχεια ακολουθούν τα δεδομένα. Στη κεφαλίδα εμπεριέχονται πληροφορίες για τα δεδομένα του πακέτου και οι διευθύνσεις αφετηρίας και προορισμού. Η διαδικασία προσθήκης της κεφαλίδας σε ένα πακέτο δεδομένων ονομάζεται ενθυλάκωση.

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

## Αξιοπιστία
Εκτός από τον ορισμό της μορφής των αυτοδύναμων πακέτων, το πρωτόκολλο ορίζει τη σημασιολογία της επικοινωνίας και χρησιμοποιεί τον όρο βέλτιστη προσπάθεια, για να περιγράψει την υπηρεσία που παρέχει. Ουσιαστικά το πρότυπο αυτό ορίζει, ότι παρ’ όλο που το πρωτόκολλο κάνει τη βέλτιστη δυνατή προσπάθεια για να αποδώσει ένα πακέτο στο προορισμό του, η φυσική υποδομή του εκάστοτε δικτύου που διασχίζει μπορεί να συμπεριφερθεί λανθασμένα. Έτσι, το πρωτόκολλο, δεν εγγυάται ότι θα μπορέσει να αντιμετωπίσει τα παρακάτω προβλήματα:
* Αλλοίωση δεδομένων
* Απώλεια αυτοδύναμου πακέτου
* Επανάληψη αυτοδύναμου πακέτου
* Επίδοση με καθυστέρηση ή εκτός σειράς.

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

Η μόνη διαβεβαίωση που μπορεί να δώσει το πρωτόκολλο στην έκδοση 4 (IPv4), είναι το αν τα δυαδικά ψηφία της κεφαλίδας έχουν υποστεί αλλοίωση ή όχι κατά τη διάρκεια της μεταφοράς. Αυτή η πληροφορία εμπεριέχεται σε ένα πεδίο της κεφαλίδας του πακέτου, που ονομάζεται Άθροισμα Ελέγχου Κεφαλίδας (Αγγλ. Header Checksum). Κάνοντας χρήση του αθροίσματος ελέγχου, μπορεί να διαπιστωθεί εάν η κεφαλίδα έχει μεταφερθεί σωστά ή όχι και, αναλόγως, το πακέτο απορρίπτεται ή γίνεται αποδεκτό.

Στην έκδοση 6 (IPv6) ωστόσο, έχει εγκαταλειφθεί η χρήση του αθροίσματος ελέγχου κεφαλίδας προς όφελος της ταχείας προώθησης μέσω ορισμένων στοιχείων δρομολόγησης στο δίκτυο.

## Σχετικά Διαγράμματα

## Μορφή Πακέτου
Ένα πακέτο αποτελείται από το τμήμα της επικεφαλίδας και το τμήμα δεδομένων.

### Επικεφαλίδα
Η επικεφαλίδα στο IPv4 αποτελείται από 14 πεδία, από τα οποία τα 13 είναι απαραίτητα.  Το δέκατο τέταρτο πεδίο είναι προαιρετικό (με το κόκκινο φόντο στον πίνακα) και ονομάζεται Επιλογές. Τα πεδία στην επικεφαλίδα πακετάρονται με το περισσότερο σημαντικό πεδίο εμπρός και για το διάγραμμα και τη συζήτηση, τα περισσότερο σημαντικά δυαδικά ψηφία βρίσκονται μπροστά. Έτσι το 0 είναι το “περισσότερο σημαντικό bit”  MSB), έτσι ‘ώστε για παράδειγμα το πεδίο «έκδοση» βρίσκεται στα 4 περισσότερο σημαντικά δυαδικά ψηφία του πρώτου Byte.

#### Έκδοση
Το πρώτο πεδίο της επικεφαλίδας σε ένα πακέτο είναι το πεδίο της έκδοσης του πρωτοκόλλου, μήκους τεσσάρων δυαδικών ψηφίων. Για το IPv4 αυτό έχει την τιμή 4 (απ’ όπου και προέρχεται το όνομα IPv4).

#### Μήκος Επικεφαλίδας (IHL)
Το δεύτερο πεδίο (μήκος τεσσάρων δυαδικών ψηφίων) είναι το μήκος της επικεφαλίδας (Αγγλ. IHL, Internet Header Length). Αυτό μας δίνει το μήκος της επικεφαλίδας σε λέξεις των 32 δυαδικών ψηφίων. Επειδή η επικεφαλίδα του  IPv4 μπορεί να περιέχει μεταβλητό αριθμό επιλογών, αυτό το πεδίο παρέχει το μήκος της επικεφαλίδας. Η μικρότερη τιμή του πεδίου είναι 5 (RFC 791), που σημαίνει ότι το μήκος είναι 5×32 = 160 bits = 20 bytes. Επειδή το πεδίο είναι 4 δυαδικά ψηφία,  το μέγιστο μήκος είναι 24-1=15 λέξεις (15×32 bits) ή  480 bits = 60 bytes.

#### Συνολικό Μήκος
Το πεδίο αυτό έχει μήκος 16 δυαδικών ψηφίων. Καθορίζει το συνολικό μήκος του κομματιού (Αγγλ. fragment) σε bytes, συμπεριλαμβανομένων της επικεφαλίδας και των δεδομένων. Το ελάχιστο μήκος του πακέτου είναι 20 bytes (20 bytes επικεφαλίδα +0 bytes δεδομένα) και το μέγιστο μήκος είναι 216-1=65535 bytes, καθότι το μήκος του πεδίου Συνολικό Μήκος είναι 16 bits.

Διάφορες συσκευές, και μερικές φορές τα υποδίκτυα, μπορεί να επιβάλλουν περιορισμούς στο μέγεθος των αυτοδύναμων πακέτων, τα οποία σ’ αυτήν την περίπτωση πρέπει να διασπαστούν σε μικρότερα κομμάτια. Στο IPv4 η διάσπαση μπορεί να γίνει στους σταθμούς εργασίας ή στους δρομολογητές.

#### Αναγνώριση
Το πεδίο αυτό είναι ένα πεδίο ταυτοποίησης και χρησιμεύει για τον μοναδικό προσδιορισμό των κομματιών (αγγλ. fragments) που ανήκουν στο ίδιο αρχικό αυτοδύναμο πακέτο.

#### Σηματοδότες/Σήματα/Δείκτες (Αγγλ. Flags)
Αυτό είναι ένα πεδίο τριών δυαδικών ψηφίων που χρησιμεύει στο να ελέγχει ή να προσδιορίζει τα κομμάτια. Αυτά είναι, με σειρά από το περισσότερο προς το λιγότερο σημαντικό, τα εξής:
* δυαδικό ψηφίο 0: Δεσμευμένο, πρέπει να είναι 0
* δυαδικό ψηφίο 1: Απαγόρευση διάσπασης του αυτοδύναμου πακέτου (Αγγλ. Don’t Fragment (DF))
* δυαδικό ψηφίο 2: Ένδειξη ύπαρξης περισσότερων κομματιών (Αγγλ. More Fragments (MF))
Εάν ο σηματοδότης DF έχει τιμή 1 και για την δρομολόγηση του πακέτου είναι απαραίτητη η διάσπασή του, τότε το πακέτο απορρίπτεται. Αυτό θα μπορούσε να χρησιμοποιηθεί κατά την αποστολή πακέτων σε σταθμούς εργασίας οι οποίοι δεν έχουν επαρκείς πόρους για τον χειρισμό της διάσπασης. Επίσης μπορεί να χρησιμοποιηθεί για την αυτόματη ανίχνευση της Μέγιστης Μονάδας Μεταφοράς κατά Μήκος της Διαδρομής (Path MTU Discovery) είτε αυτόματα από το λογισμικό των σταθμών εργασίας, είτε χειροκίνητα με την χρήση διαγνωστικών εργαλείων, όπως τα ping και traceroute.
Στα πακέτα που δεν έχουν διασπαστεί, ο σηματοδότης MF έχει τιμή 0.  Στα διασπασμένα πακέτα, όλα τα κομμάτια έχουν MF με τιμή 1, εκτός από το τελευταίο πού έχει MF με τιμή 0. Το τελευταίο κομμάτι έχει μη μηδενικό πεδίο Δείκτη Εντοπισμού Τμήματος, το οποίο το διακρίνει από μη διασπασμένα πακέτα.

#### Δείκτης εντοπισμού τμήματος
Ο δείκτης εντοπισμού τμήματος έχει μήκος 13 δυαδικών ψηφίων και απαριθμεί σε οκτάδες Byte. Προσδιορίζει την θέση ενός συγκεκριμένου κομματιού, από την αρχή του αρχικού μη διασπασμένου αυτοδύναμου πακέτου.  Το πρώτο κομμάτι έχει δείκτη εντοπισμού τμήματος 0. Αυτό επιτρέπει έναν μέγιστο αριθμό θέσεων (213 – 1) × 8 = 65,528 bytes, το οποίο και ξεπερνά το μέγιστο μήκος του πακέτου, που είναι 65535 bytes, εάν συμπεριλάβουμε και το μήκος της επικεφαλίδας (65,528 + 20 = 65,548 bytes).

#### Χρόνος Ζωής
Το πεδίο αυτό οριοθετεί το χρόνο ζωής του αυτοδύναμου πακέτου. Έχει μήκος 8 δυαδικών ψηφίων και χρησιμεύει για την  καταστροφή των αυτοδύναμων πακέτων που για διάφορους λόγους περιφέρονται άσκοπα στο Διαδίκτυο. Δίνεται σε δευτερόλεπτα, αλλά χρόνοι μικρότεροι από 1 δλ. στρογγυλεύονται στο 1 δλ.. Στην πράξη, λειτουργεί ως καταμετρητής αναμεταδόσεων: όταν ένα αυτοδύναμο πακέτο φτάσει σε έναν δρομολογητή, ο δρομολογητής μειώνει το πεδίο TTL κατά 1. Όταν μηδενιστεί, ο δρομολογητής απορρίπτει το πακέτο και στέλνει ένα μήνυμα τέλους χρόνου του πρωτοκόλλου μηνυμάτων ελέγχου του Internet (ICMP Time Exceeded) μήνυμα στον αποστολέα. 
Το πρόγραμμα traceroute χρησιμοποιεί το μήνυμα τέλους χρόνου του ICMP για να εκτυπώσει τους δρομολογητές που χρησιμοποιούνται από τα πακέτα στη διαδρομή τους από την πηγή στον προορισμό.

#### Αριθμός πρωτοκόλλου
Το πεδίο αυτό προσδιορίζει την έκδοση του πρωτοκόλλου που χρησιμοποιείται από το αυτοδύναμο πακέτο. Η Αρχή Ανατεθειμένων Αριθμών του Διαδικτύου (Internet Assigned Numbers Authority) διατηρεί έναν κατάλογο αριθμών πρωτοκόλλου IP, ο οποίος αρχικά είχε καθοριστεί στο RFC 790.

#### Άθροισμα ελέγχου επικεφαλίδας
Το άθροισμα ελέγχου της επικεφαλίδας, που έχει μήκος 16 δυαδικών ψηφίων, χρησιμοποιείται για τον έλεγχο σφαλμάτων της επικεφαλίδας. Μόλις ένα πακέτο φτάσει σε έναν δρομολογητή, ο δρομολογητής υπολογίζει το άθροισμα ελέγχου της επικεφαλίδας και το συγκρίνει με το πεδίο αθροίσματος ελέγχου της επικεφαλίδας. Εάν δεν είναι ίσα, τότε ο δρομολογητής απορρίπτει το πακέτο.  Σφάλματα στο πεδίο δεδομένων πρέπει να διαχειρίζονται από το ενθυλακωμένο πρωτόκολλο. Τόσο το UDP όσο και το TCP έχουν πεδία αθροισμάτων ελέγχου.
 
Όταν ένα πακέτο φτάσει σε έναν δρομολογητή, ο δρομολογητής μειώνει  το πεδίο χρόνου ζωής (TTL). Συνεπώς ο δρομολογητής πρέπει να υπολογίσει το νέο άθροισμα ελέγχου. Η RFC 1071  καθορίζει τον τρόπο υπολογισμού του αθροίσματος:
 
: Το πεδίο αθροίσματος ελέγχου είναι το 16 δυαδικά ψηφία συμπλήρωμα ως προς ένα, του αθροίσματος των συμπληρωμάτων ως προς 1 των λέξεων μήκους 16 δυαδικων ψηφίων της επικεφαλίδας. Για τον υπολογισμό του αθροίσματος, το πεδίο άθροισμα ελέγχου επικεφαλίδας θεωρείται 0.

Ας θεωρήσουμε για παράδειγμα την Δεκαεξαδική Επικεφαλίδα: 4500003044224000800600008c7c19acae241e2b (20 bytes IP Επικεφαλίδα):

Βήμα 1) 4500 + 0030 + 4422 + 4000 + 8006 + 0000 + 8c7c + 19ac + ae24 + 1e2b = 2BBCF (16-bit Άθροισμα)

Βήμα 2) 2 + BBCF = BBD1 = 1011101111010001 (Συμπλήρωμα ως προς 1 του 16-bit Αθροίσματος)

Βήμα 3) ~BBD1 = 0100010000101110 = 442E (Συμπλήρωμα ως προς 1 του 16-bit Αθροίσματος)

Για τον έλεγχο αθροίσματος ελέγχου της επικεφαλίδας, μπορεί να χρησιμοποιηθεί ο ίδιος αλγόριθμος: το άθροισμα ελέγχου μιας επικεφαλίδας, που περιέχει ένα σωστό άθροισμα, είναι μηδέν (τιμή 0):

2BBCF + 442E = 2FFFD. 2 + FFFD = FFFF. the 1'S of FFFF = 0.

#### Διεύθυνση πηγής
Αυτό το πεδίο είναι η διεύθυνση IPv4 του αποστολέα του πακέτου. Η διεύθυνση αυτή μπορεί να αλλάξει κατά την διέλευση από μία συσκευή μετάφρασης διεύθυνσης δικτύου (ΝΑΤ)

#### Διεύθυνση προορισμού
Αυτό το πεδίο είναι η διεύθυνση IPv4 του παραλήπτη του πακέτου. Η διεύθυνση αυτή μπορεί να αλλάξει κατά την διέλευση από μία συσκευή μετάφρασης διεύθυνσης δικτύου (ΝΑΤ)

#### Επιλογές
Το πεδίο Επιλογές δεν χρησιμοποιείται συχνά.

#### Διάσπαση και επανασύνδεση
Το πρωτόκολλο καθιστά δυνατό το να επικοινωνεί το ένα δίκτυο με το άλλο. Ο σχεδιασμός προβλέπει την συνύπαρξη δικτύων διαφόρων τύπων. Το πρωτόκολλο είναι ανεξάρτητο από την φύση της υποκείμενης τεχνολογίας μετάδοσης του επιπέδου σύνδεσης. Τα δίκτυα με διαφορετική φυσική υποδομή συνήθως διαφέρουν όχι μόνο στην μέγιστη ταχύτητα μετάδοσης,  αλλά επίσης στη μέγιστη μονάδα μετάδοσης (MTU). Όταν ένα δίκτυο θέλει να στείλει αυτοδύναμα πακέτα σε δίκτυα με μικρότερο MTU, μπορεί να διασπάσει το αυτοδύναμο πακέτο. Στο IPv4 αυτή η λειτουργία είναι τοποθετημένη στο επίπεδο internet και εκτελείται στο IPv4 από τους δρομολογητές. 
Αντίθετα το IPv6, η επόμενη γενιά του Πρωτοκόλλου Διαδικτύου, δεν επιτρέπει στους δρομολογητές να κάνουν διάσπαση. Οι σταθμοί εργασίας πρέπει να προσδιορίσουν το MTU της διαδρομής, προτού αποστείλουν τα αυτοδύναμα πακέτα.

### Δεδομένα
Το τμήμα δεδομένων του πακέτου, δεν συμπεριλαμβάνεται στο Άθροισμα Ελέγχου, το οποίο και γι’ αυτό αποκαλείται Άθροισμα Ελέγχου Επικεφαλίδας. Ο τρόπος αναπαράστασης των περιεχομένων του βασίζεται στην τιμή που υπάρχει στο πεδίο «Αριθμός Πρωτοκόλλου» της επικεφαλίδας.

## Διευκρινήσεις
1 Ο όρος ***διαδίκτυο*** (αγγλ. **internet** *ή* **internetwork**), με πεζό το πρώτο γράμμα, αναφέρεται στη γενικότερη έννοια ενός δικτύου που προκύπτει από τη σύνδεση πολλών φυσικών δικτύων, και όχι στο γνωστό μας Διαδίκτυο (αγγλ. Internet).

## Δείτε Επίσης
Σουίτα TCP/IPΠρωτόκολλο Ελέγχου ΜεταφοράςΚατάλογος των TCP και UDP ports

## Παραπομπές


## Εργαλεία
*Πληροφορίες για οποιαδήποτε διεύθυνση IP (στα ελληνικά)

## Πηγές

1. Douglas E. Comer, ''Computer Networks and Internets with Internet Applications'', 4η Έκδοση