Το **Πρωτόκολλο Ελέγχου Μετάδοσης/Πρωτόκολλο Διαδικτύου** (Αγγλικά: **Transmission Control Protocol/Internet Protocol (TCP/IP)**, είναι μια συλλογή πρωτοκόλλων επικοινωνίας στα οποία βασίζεται το Διαδίκτυο αλλά και μεγάλο ποσοστό των εμπορικών δικτύων. Η ονομασία *TCP/IP* προέρχεται από τις συντομογραφίες των δυο κυριότερων πρωτοκόλλων της συλλογής: το *Πρωτόκολλο Ελέγχου Μετάδοσης* (Αγγλ. Transmission Control Protocol) και το *Πρωτόκολλο Διαδικτύου* (Αγγλ. Internet Protocol).

Αυτή η συλλογή πρωτοκόλλων είναι οργανωμένη σε επίπεδα (Αγγλικά: layers). Το καθένα τους απαντά σε συγκεκριμένα προβλήματα μεταφοράς δεδομένων και παρέχει μια καθορισμένη υπηρεσία στα υψηλότερα επίπεδα. Τα ανώτερα επίπεδα είναι πιο κοντά στη λογική του χρήστη και εξετάζουν πιο αφηρημένα δεδομένα. Στηρίζονται στα πρωτόκολλα των χαμηλοτέρων επιπέδων για την μετάφραση δεδομένων σε μορφές οι οποίες είναι δυνατόν να διαβιβαστούν με φυσικά μέσα.

Το μοντέλο OSI, το οποίο παραμένει έως σήμερα μόνο θεωρητικό, προτείνει την κατάταξη των πρωτοκόλλων δικτύων σε έναν οργανωμένο σωρό επτά επιπέδων. Συγκρίσεις ανάμεσα στο μοντέλο OSI και τo TCP/IP δείχνουν τη σημασία των πρωτοκόλλων που περιέχονται στην συλλογή IP, από την άλλη πλευρά όμως μπορεί να προκληθεί σύγχυση, καθώς το TCP/IP αποτελείται από μόνο τέσσερα επίπεδα.

Επίπεδα της συλλογής TCP/IP
---------------------------

Παράδειγμα ενθυλάκωσης δεδομένων σ´ένα διάγραμμα UDP μέσα σε ένα πακέτο IP.
Τα πρωτόκολλα Διαδικτύου κάνουν χρήση της ενθυλάκωσης (encapsulation) για να παρέχουν γενικά πρωτόκολλα και υπηρεσίες. Ένα πρωτόκολλο υψηλού στρώματος χρησιμοποιεί τα πρωτόκολλα των κατωτέρων για να λειτουργήσει.

Το παρακάτω σχεδιάγραμμα τοποθετεί τα διάφορα πρωτόκολλα του TCP/IP με βάση τα κριτήρια του μοντέλου OSI:

|  |  |  |
| --- | --- | --- |
| 7 | **Εφαρμογής (Application)** | π.χ. HTTP, SMTP, SNMP, FTP, Telnet, NFS |
| 6 | **Παρουσίασης (Presentation)** | π.χ. XDR, ASN.1, SMB, AFP |
| 5 | **Συνεδρίας (Session)** | π.χ. ISO 8327 / CCITT X.225, RPC, Netbios, ASP |
| 4 | **Μεταφοράς (Transport)** | π.χ. TCP, UDP, RTP, SPX, ATP |
| 3 | **Δικτύου (Network)** | π.χ. IP (IPv4 ή IPv6), ICMP, IGMP, X.25, CLNP, ARP, OSPF, RIP, IPX, DDP |
| 2 | **Συνδέσμου (Link)** | π.χ. Ethernet, Token Ring, PPP, HDLC, Frame relay, ATM |
| 1 | **Φυσικό (Physical)** | π.χ. Ραδιοφωνικό σήμα, Λέϊζερ, Οπτική Ίνα |

Τα τρία ανώτερα επίπεδα του μοντέλου OSI (Εφαρμογής, Παρουσίασης και Συνεδρίας) αποτελούν ένα ενιαίο στρώμα στο TCP/IP, το επίπεδο Εφαρμογής. Τα χαρακτηριστικά του στρώματος Συνεδρίας αναλαμβάνονται από τις ίδιες εφαρμογές ή απλώς αγνοούνται. Ένα απλουστευμένο σχεδιάγραμμα της στοίβας του μοντέλου TCP/IP είναι το εξής:

|  |  |  |
| --- | --- | --- |
| 4 | **Εφαρμογής** | π.χ. HTTP, FTP, DNS *(πρωτόκολλα δρομολόγησης, όπως το RIP, τα οποία βασίζονται στο πρωτόκολλο UDP, μπορούν επίσης να ταξινομηθούν στο στρώμα Δικτύου).* |
| 3 | **Μεταφοράς** | π.χ. TCP, UDP, RTP *(πρωτόκολλα δρομολόγησης, όπως το OSPF, που λειτουργούν πάνω από το IP, μπορούν επίσης να καταχωρηθούν στο στρώμα Δικτύου).* |
| 2 | **Δικτύου** | Για το TCP/IP, χρησιμοποιείται μόνο το IP*(Τα πρωτόκολλα ICMP και IGMP, παρ'όλο που βασίζονται πάνω στο IP για την λειτουργία τους, καταχωρούνται στο στρώμα Δικτύου. Το ARP αποτελεί μια από τις ολιγάριθμες εξαιρέσεις, εφ'όσον είναι ανεξάρτητο του IP)* |
| 1 | **Συνδέσμου** | π.χ. Ethernet, Token Ring, κλπ. |

Αυτά τα 4 επίπεδα, συναποτελούν το **Μοντέλο Διαστρωμάτωσης (ή Αναφοράς) του Internet**.

Ανάλυση των επιπέδων
--------------------

### Εφαρμογής

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

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

### Μεταφοράς

Το στρώμα μεταφοράς είναι υπεύθυνο για την μεταφορά μηνυμάτων, ανεξαρτήτως του υποκείμενου δικτύου, με έλεγχο σφαλμάτων (error control), κατάτμηση (fragmentation) και ρύθμιση ροής (flow control). Η μετάδοση μηνυμάτων μεταξύ δυο οντοτήτων μπορεί να κατηγοριοποιηθεί ως εξής:

1. connection-oriented, π.χ. TCP
2. connectionless, π.χ. UDP

Η λειτουργία του στρώματος αυτού μπορεί να συγκριθεί με αυτή οποιουδήποτε μηχανισμού/μέσου μεταφοράς, π.χ. ένα όχημα που πρέπει να εξασφαλίζει την πλήρη και ασφαλή διακίνηση του φορτίου του.
Το στρώμα μεταφοράς παρέχει αυτή την υπηρεσία σύνδεσης εφαρμογών μεταξύ τους, κάνοντας χρήση θυρών (ports). Καθώς το IP προσφέρει μόνο παράδοση *όσο το δυνατόν καλύτερα* (best effort delivery), το στρώμα μεταφοράς είναι το πρώτο επίπεδο όπου λαμβάνεται υπόψιν το θέμα της αξιοπιστίας.

Παραδείγματος χάρη, σε μια προσπάθεια αξιόπιστης μετακίνησης δεδομένων, το TCP που είναι ένα connection-oriented πρωτόκολλο, έχει τα εξής χαρακτηριστικά:

* τα δεδομένα έρχονται στην ίδια σειρά με την οποία στάλθηκαν
* ελάχιστος έλεγχος σφαλμάτων
* ανεπιθύμητα αντίγραφα απορρίπτονται
* χαμένα/απορριφθέντα πακέτα ξαναστέλνονται
* έλεγχος κυκλοφοριακής συμφόρησης (congestion control)

Τα πρωτόκολλα δυναμικής δρομολόγησης (dynamic routing), που κανονικά θα έπρεπε να βρίσκονται σε αυτό το στρώμα του TCP/IP (αφού λειτουργούν πάνω από το IP) αντιμετωπίζονται συχνά ως τμήματα του επίπεδου δικτύου (π.χ. το OSPF).

Το νέο SCTP είναι επίσης ένας "αξιόπιστος", connection-oriented μηχανισμός μεταφοράς. Είναι stream-oriented, όχι byte-oriented όπως το TCP, και προσφέρει την δυνατότητα multiplexing πολλών ρευμάτων (stream) σε μια μόνο σύνδεση. Προτείνει υποστήριξη multi-homing, την δυνατότητα δηλαδή για μια οντότητα να μπορέσει, στα πλαίσια μιας συγκεκριμένης σύνδεσης, να χρησιμοποιεί πολλαπλές (εφόσον υπάρχουν) διευθύνσεις IP που αντιπροσωπεύουν πολλαπλές interfaces (διασυνδετικές διατάξεις), έτσι ώστε αν κάποια παρουσιάσει βλάβη, να μη χαθεί η σύνδεση.

Το UDP είναι ένα connectionless πρωτόκολλο διαγραμμάτων δεδομένων (datagrams). Όπως και το IP, είναι ένα best effort ή "αναξιόπιστο" πρωτόκολλο: ο έλεγχος σφαλμάτων είναι αδύναμος (απλό checksum). Χρησιμοποιείται κυρίως σε εφαρμογές streaming μέσων (ήχος, βίντεο, κλπ.) όπου η έγκαιρη άφιξη των δεδομένων είναι πιο σημαντική από την ακεραιότητα τους. Ο χρόνος που κερδίζεται σε σχέση με τα connection-oriented πρωτόκολλα, που πρέπει να καθιερώσουν μια αξιόπιστη σύνδεση, το καθιστά ιδανικό για απλές ερώτημα/απάντηση εφαρμογές (π.χ. DNS).

Το TCP και το UDP εκμεταλλεύονται από εφαρμογές που διακρίνονται (στο επίπεδο του δικτύου) από την θύρα TCP ή UDP τους. Ορισμένοι αριθμοί θυρών είναι κλειστοί και αναφέρονται σε πολύ συγκεκριμένες εφαρμογές (βλ. well known port numbers).

Το RTP είναι ένα πρωτόκολλο διαγραμμάτων δεδομένων σχεδιασμένο για στοιχεία πραγματικού χρόνου (real-time) όπως τα *streaming audio* και *video*. Αν και παρουσιάζεται στο στρώμα μεταφοράς (αντί για το επίπεδο συνεδρίας), βασίζεται στο UDP για τη λειτουργία του.

### Δικτύου

Ο σκοπός του στρώματος δικτύου είχε αρχικά καθοριστεί ως η μεταφορά πακέτων μέσω ενός ενιαίου δικτύου.

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

Στην σουίτα πρωτοκόλλων Διαδικτύου, το IP μεταφέρει τα πακέτα δεδομένων από τον αποστολέα στον παραλήπτη. Το IP μπορεί να εξυπηρετήσει διάφορα πρωτόκολλα ανωτέρων επιπέδων (upper layer protocols) ˙ το καθένα τους προσδιορίζεται με έναν αποκλειστικό αριθμό πρωτοκόλλου: π.χ. το ICMP και το IGMP έχουν τους αριθμούς 1 και 2 αντίστοιχα.

Μερικά πρωτόκολλα που στηρίζονται στο IP, π.χ. το ICMP (χρησιμοποιείται για την διάδοση διαγνωστικών πληροφοριών σχετικά με την μεταφορά πακέτων μέσω IP) παρουσιάζονται πάνω από το IP αλλά παρέχουν υπηρεσίες επιπέδου διαδικτύου, απεικονίζοντας έτσι την ασυμβατότητα μεταξύ του Διαδικτύου, των πρωτοκόλλων Διαδικτύου και του μοντέλου OSI. Όλα τα πρωτόκολλα δρομολόγησης (π.χ. BGP, OSPF, RIP, κλπ.) ανήκουν επίσης στο στρώμα δικτύου, αν και θα μπορούσαν να τοποθετηθούν σε ανώτερα επίπεδα.

### Διασύνδεσης Δικτύου

Το στρώμα αυτό, ρόλος του οποίου είναι η διακίνηση πακέτων του επιπέδου δικτύου μεταξύ δυο οντοτήτων, δεν είναι στην ακρίβεια μέρος της σουίτας πρωτοκόλλων Διαδικτύου, διότι το IP λειτουργεί με διάφορα στρώματα συνδέσμου. Η διαδικασία διαβίβασης (αντ. λήψης) πακέτων σε (αντ. από) ένα συγκεκριμένο επίπεδο συνδέσμου μπορεί να ελέγχεται είτε από τον οδηγό του interface, είτε το firmware ή σύνολο εξειδικευμένων κυκλωμάτων (chipsets), είτε τέλος από ένα συνδυασμό των προ-αναφερθέντων. Αυτά θα εκτελέσουν τις λειτουργίες σύνδεσης δεδομένων (data link), όπως π.χ. την πρόσθεση επικεφαλίδας (packet header) πριν την αποστολή, την ίδια τη διαβίβαση του πλαισίου (frame) με τη χρήση ενός φυσικού μέσου.

Για συνδέσεις μέσω μόντεμ (σε γραμμή τηλεφώνου), τα πακέτα IP μεταφέρονται συνήθως χρησιμοποιόντας το PPP. Σε ευρυζωνικές συνδέσεις (π.χ. ADSL) συναντάμε το PPPoE. Σε τοπικά δίκτυα, τα πρωτόκολλα Ethernet ή IEEE 802.11 (για ενσύρματα ή ασύρματα δίκτυα αντίστοιχα) είναι πιο κοινά. Για δίκτυα ευρείας περιοχής (WAN) χρησιμοποιούνται συχνά το PPP πάνω σε γραμμές T-carrier ή E-carrier, το Frame relay, το ATM ή το Packet over SONET/SDH (POS).

Το στρώμα συνδέσμου είναι επίσης το επίπεδο όπου τα πακέτα μπορούν να αναχαιτιστούν για να σταλθούν σ'ένα Εικονικό Ιδιωτικό Δίκτυο (Virtual Private Network, VPN). Σ'αυτήν την περίπτωση, τα δεδομένα του επιπέδου αυτού αντιμετωπίζονται ως δεδομένα εφαρμογής, και "ξανακατεβαίνουν" τη στοίβα πρωτοκόλλων Διαδικτύου για να σταλθούν. Στη λαμβάνουσα πλευρά, τα δεδομένα ανεβαίνουν δυο φορές τη στοίβα (μια για το VPN και μια δεύτερη για τη δρομολόγηση).

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

Υλοποιήσεις
-----------

Η πλειονότητα των λειτουργικών συστημάτων (Unix, Linux, οι διάφορες παραλλαγές BSD, Mac OS X, Microsoft Windows και οι εκδόσεις Windows Server) περιλαμβάνουν την στοίβα TCP/IP εξ ορισμού ˙ η αναζήτηση υλοποιήσεων αφορά μόνο ένα μικρό ποσοστό χρηστών.

Το Lightweight TCP/IP, είναι μια υλοποίηση ανοιχτού κώδικα (open source) ειδικά σχεδιασμένη για ενσωματωμένα συστήματα (embedded systems), ενώ το KA9Q NOS είναι διαμορφωμένο για ερασιτεχνικά ραδιοφωνικά συστήματα πακέτων (packet radio systems) ή υπολογιστών συνδεδεμένων μέσω σειριακών (serial) γραμμών.

Σημειώσεις
----------

1. ↑  το RFC 1122, το οποίο ορίζει την συλλογή πρωτοκόλλων Διαδικτύου, δεν είναι σαφές ως προς τον αριθμό των επιπέδων στρωμάτων. Οι απόψεις διαφέρουν στο αν πρέπει να παρουσιαστεί το φυσικό επίπεδο ή όχι.
2. ↑  τα δεδομένα χωρίζονται σε πακέτα που μπορούν να δρομολογηθούν από δυο διαφορετικά μονοπάτια στο δίκτυο, και να φτάσουν στον παραλήπτη σε διαφορετική σειρά. Το TCP τα ξανατοποθετεί σωστά και τα παραδίνει στο υψηλότερο στρώμα

Βιβλιογραφία
------------

* Andrew S. Tanenbaum, ***Computer Networks, Fourth edition***, ISBN 0-13-066102-3
* James F. Kurose, Keith W. Ross, ***Computer Networking: A Top-Down Approach Featuring the Internet (3rd Edition)***, ISBN 0-321-22735-2
* W. Richard Stevens, ***The Protocols (TCP/IP Illustrated, Volume 1)***, ISBN 0-201-63346-9

Εξωτερικοί σύνδεσμοι
--------------------

* Βρείτε την τοποθεσία και άλλες χρήσιμες πληροφορίες οποιασδήποτε διεύθυνσης IP v4 - στα ελληνικά
* Βρείτε την τοποθεσία μίας IP διεύθυνσης. Πολύ χρήσιμο στα μηνύματα ηλεκτρονικού ταχυδρομείου και στο chatting
* Το πρωτόκολλο επικοινωνίας TCP