Προτού παρουσιάσουμε τα στοιχεία, θα θέλαμε να κάνουμε μια σύντομη περιγραφή των πρωτοκόλλων που θα συναντήσουμε.
Θα ξεκινήσουμε με το TCP. Το TCP (Transmission Control Protocol) είναι το πιο διαδεδομένο πρωτόκολλο μεταφοράς δεδομένων του TCP/IP, που χρησιμοποιείται ευρέως στο διαδίκτυο για αξιόπιστη αποστολή και λήψη δεδομένων μεταξύ δύο άκρων, όπου άκρα μπορεί να είναι 2 υπολογιστές. Πρόκειται για connection-oriented πρωτόκολλο που σημαίνει ότι βασίζεται στη λειτουργία μιας ιδεατής σύνδεσης. Προτού ξεκινήσει η ανταλλαγή δεδομένων, μέσω του TCP πρωτοκόλλου, πρέπει να δημιουργηθεί η σύνδεση μεταξύ των 2 άκρων. Για τη δημιουργία της σύνδεσης αυτής γίνεται μια τριμερής επικοινωνία (3-way handshake) με χρήση των tcp flags 'SYN' (synchronization) και 'ACK' (acknowledgement), ξεκινώντας από το άκρο που επιθυμεί πρώτο τη σύνδεση, όπως φαίνεται στο παρακάτω σχέδιο.
Σχέδιο: τριμερής επικοινωνία TCP
Όταν η μεταφορά δεδομένων ολοκληρωθεί και η σύνδεση πρέπει να κλείσει, γίνεται κανονικά μια τετραμερής επικοινωνία (four-way handshake) με χρήση των tcp flags 'FIN' (finished) και 'ACK'.
Ένα άλλο tcp flag που θα συναντήσουμε αρκετά, είναι το 'RST'. Το RST (reset) χρησιμοποιείται για να ενημερώνεται το άλλο άκρο ότι υπάρχει πρόβλημα σύνδεσης και θα πρέπει να κλείσει τη σύνδεση (ή να την επανεκκινήσει). Συνήθως το βλέπουμε είτε στη φάση της δημιουργίας μίας σύνδεσης, όταν ένα από τα δύο άκρα δεν επιθυμεί ή δεν μπορεί να συνδεθεί, είτε στη πορεία της σύνδεσης για να ενημερωθεί το άλλο άκρο ότι διακόπτεται η σύνδεση (πχ λόγω κάποιου προβλήματος). Στη λήψη αυτού του πακέτου, ο παραλήπτης σταματά αμέσως την αποστολή άλλων πακέτων δεδομένων ή ξεκινά νέα σύνδεση αναλόγως την τρέχουσα κατάστασή του.
Το UDP (User Datagram Protocol) είναι το δεύτερο πιο διαδεδομένο πρωτόκολλο μεταφοράς δεδομένων και το κύριο χαρακτηριστικό του είναι η πλήρης απώλεια οποιασδήποτε μορφής ελέγχου. Σε αντίθεση με το TCP, δε χρειάζεται handshake, δε χρειάζεται να κλείσει συνδέσεις διότι πολύ απλά δεν τις άνοιξε ποτέ. Με το UDP, ο αποστολέας στέλνει, ο παραλήπτης "ακούει" για δεδομένα που πιθανώς να τον ενδιαφέρουν και ελπίζουν ότι όλα λειτουργούν όπως πρέπει. Η έλλειψη ελέγχου το καθιστά ταχύτερο από το TCP (μικρότερο overhead) ενώ δίνει τη δυνατότητα σε προγραμματιστές να υλοποιήσουν δικούς τους μηχανισμούς ελέγχου σε υψηλότερα επίπεδα.
Στη συνέχεια, θα ρίξουμε μια γρήγορη ματιά στο IP. Το IP (Internet Protocol) είναι ένα πρωτόκολλο δικτύου και είναι υπεύθυνο για τη μεταφορά των πακέτων από δίκτυο σε δίκτυο. Συγκεκριμένα, για την παρακάτω ανάλυση, μας ενδιαφέρει το πεδίο TTL (Time To Live). Το συγκεκριμένο πεδίο ορίζει τον μέγιστο αριθμό των routers που μπορούν να μεσολαβήσουν μέχρι να φτάσει στον τελικό του προορισμό το κάθε πακέτο. Για την υλοποίηση αυτής της λειτουργίας κάθε ενδιάμεσος router, που προωθεί το πακέτο, μειώνει την τιμή του πεδίου TTL κατά μια μονάδα.
Το HTTP είναι το πρωτόκολλο που χρησιμοποιείται για την επικοινωνία των browsers με τους web servers, κοινώς για να μπορούμε να βλέπουμε ιστοσελίδες. Το πεδίο που μας ενδιαφέρει εδώ είναι το 'Host', που είναι συνήθως μέρος του http header του HTTP 1.1 (της έκδοσης που χρησιμοποιείται, κυρίως, στις μέρες μας). Το περιεχόμενο αυτού του πεδίου είναι το όνομα της σελίδας που μας ενδιαφέρει. Η κύρια χρήση του είναι για να ενημερώσει ο browser τον web server ποια σελίδα θέλουμε να επισκεφθούμε, καθώς υπάρχει περίπτωση να έχουμε πολλές σελίδες πάνω σε μια διεύθυνση IP (virtual hosting).
Το BitTorrent είναι ένα ιδιαίτερα δημοφιλές πρωτόκολλο που αποτελεί, σύμφωνα με στατιστικές, το 27-55% της κίνησης του διαδικτύου (αναλόγως την γεωγραφική θέση). Χρησιμοποιείται για μεταφορές αρχείων μεταξύ χρηστών (peer to peer), χωρίς την μεσολάβηση κεντρικού διακομιστή (server) κατά τη μεταφορά δεδομένων και λειτουργεί ως εξής. Το αρχείο ή τα αρχεία προς μεταφορά χωρίζονται σε μικρά κομμάτια και το κάθε κομμάτι διαθέτει ένα hash κωδικό, που βοηθά στην επιβεβαίωση ορθής μεταφοράς. Ο αρχικός κάτοχος των αρχείων δημιουργεί ένα αρχείο torrent που περιέχει τον αριθμό των κομματιών, το hash του κάθε κομματιού (που δημιουργείται κατά τον αρχικό διαχωρισμό) καθώς και τις διευθύνσεις των trackers. Οι trackers απλά κρατάνε αρχείο για την κατάσταση του συνόλου των χρηστών. Συγκεκριμένα, γνωρίζουν ποια κομμάτια διαθέτει κάθε χρήστης και ενημερώνουν τους χρήστες για το που μπορούν να βρουν τα κομμάτια που τους λείπουν. Για την επικοινωνία χρηστών και trackers, χρησιμοποιείται σε επίπεδο εφαρμογής (application layer) το HTTP πρωτόκολλο ενώ σε επίπεδο μεταφοράς δεδομένων (transport layer) το TCP ή το UDP. Επίσης, για την παραπάνω επικοινωνία, μπορεί να χρησιμοποιηθεί και κρυπτογράφηση.
Μήνυμα