Πρωτόκολλο Ελέγχου Μεταφοράς: Διαφορά μεταξύ των αναθεωρήσεων

Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
μ Ρομπότ: Προσθήκη: ms:Protokol Kawalan Penghantaran
μ Ρομπότ: Τροποποίηση: fa:قرارداد هدایت انتقال; διακοσμητικές αλλαγές
Γραμμή 1:
Το '''TCP''' '''''(Transmission Control Protocol - Πρωτόκολλο Ελέγχου Μεταφοράς)''''' είναι ένα από τα κυριότερα πρωτόκολλα της [[TCP/IP|Σουίτας Πρωτοκόλλων Διαδικτύου]]. Βρίσκεται πάνω από το [[IP|IP protocol]] ''(πρωτόκολλο IP)''. Οι κύριοι στόχοι του πρωτοκόλλου TCP είναι να επιβεβαιώνεται η αξιόπιστη αποστολή και λήψη δεδομένων, επίσης να μεταφέρονται τα δεδομένα χωρίς λάθη μεταξύ του στρώματος δικτύου (network layer) και του στρώματος εφαρμογής (application layer) και, φτάνοντας στο πρόγραμμα του στρώματος εφαρμογής, να έχουν σωστή σειρά. Οι περισσότερες σύγχρονες [[Κατάλογος των TCP και UDP ports|υπηρεσίες]] στο Διαδίκτυο βασίζονται στο TCP. Για παράδειγμα το [[SMTP]] (port 25), το παλαιότερο (και μη-ασφαλές) [[Telnet]] (port 23), το [[FTP]] και πιο σημαντικό το [[HTTP]] (port 80), γνωστό ως υπηρεσίες World Wide Web (WWW - Παγκόσμιος Ιστός). Το TCP χρησιμοποιείται σχεδόν παντού, για αμφίδρομη επικοινωνία μέσω δικτύου.
 
Αρχικά το '''Transmission''' ήταν '''Transfer''', ένας όρος που προσδιόριζε την μεταβίβαση του ελέγχου στα άκρα του δικτύου '''TCPIP''' πριν αποσπαστεί το '''IP'''.
 
== TCP header ==
 
Τα πακέτα του πρωτοκόλλου TCP καλούνται segments (τομείς)<ref name="packet">Στα αντίστοιχα RFCs η έννοια πακέτο δεν χρησιμοποιείται τόσο γενικευμένα, συγκεκριμένα:
;τα πακέτα IP : καλούνται '''διαγράμματα δεδομένων (IP datagrams)''', ενώ
;τα πακέτα TCP : καλούνται '''τμήματα, τομείς ή τεμάχια (TCP segments)'''.
Για λόγους απλότητας στο παρόν άρθρο αναφέρονται όλα ως πακέτα.</ref>. Ένα από τα κυριότερα μέρη ενός segment είναι η TCP επικεφαλίδα (TCP header), η οποία παρέχει συγκεκριμένες πληροφορίες για το πρωτόκολλο TCP. Το ελάχιστο μέγεθος της επικεφαλίδας είναι 5 words και το μέγιστο 15 words (απουσία ή παρουσία όλων των options αντίστοιχα).
 
{| align="center" width="600"
Γραμμή 55:
 
; Sequence Number : Ο sequence number (αριθμός ακολουθίας) έχει διπλό ρόλο:
:* Εαν υπάρχει η SYN flag (SYN σημαία) τότε είναι ο αρχικός αριθμός ακολουθίας (ISN - initial sequence number) και η πρώτη octet δεδομένων του πακέτου είναι ο ISN+1.
:* Αλλιώς, εαν δεν υπάρχει η SYN flag, τότε η πρώτη octet δεδομένων είναι ο αριθμός ακολουθίας.
 
; Acknowledgment number : Όταν υπάρχει η ACK flag η τιμή αυτού του πεδίου δείχνει τον επόμενο sequence number (αριθμό ακολουθίας) που αναμένει ο αποστολέας.
 
; Data offset : Είναι ο αριθμός από words μεγέθους 32 bit στην επικεφαλίδα TCP (TCP header). Καθορίζει το μέγεθος της επικεφαλίδας (πολλαπλάσιο του 32) και επομένως δείχνει και την αρχή των δεδομένων<ref name="offset">'''Offset'''
# ''(ρήμα)'' αντισταθμίζω <br />
# ''(ουσιαστικό - τυπογραφία)'' οφσετ <br />
</ref>.
 
Γραμμή 95:
;Urgent pointer : Εάν είναι ενεργοποιημένο το URG bit ελέγχου, τότε αυτό το πεδίο δείχνει τον αριθμό ακολουθίας (sequence number)της octet που βρίσκεται αμέσως μετά το τελευταίο byte από τα επείγοντα δεδομένα. Έτσι παρουσιάζει τη θέση του τελευταίου [[byte]] με επείγοντα δεδομένα.
 
== Τρόπος λειτουργίας ==
 
Το πρωτόκολλο ελέγχου μεταφορών (TCP) είναι connection oriented, δηλαδή η μεταφορά δεδομένων γίνεται μέσω σύνδεσης, η οποία οριοθετείται από ένα σήμα έναρξης και ένα σήμα τέλους ή διακοπής.
 
=== Έναρξη - Τριμερής χειραψία / 3-way handshake ===
 
Πριν να προσπαθήσει ένα πρόγραμμα-πελάτης (client) να συνδεθεί με έναν [[εξυπηρετητής|server]], ο server πρέπει πρώτα να δεσμεύσει μια [[θύρα (υπολογιστής)|port]] και να την ανοίξει ώστε να δέχεται συνδέσεις: αυτό καλείται passive open. Όταν γίνει αυτό, ο client μπορεί να αρχίσει τη σύνδεση (active open). Για να γίνει μια σύνδεση, γίνεται μια "χειραψία" ανάμεσα στα συμμετέχοντα μέρη, το λεγόμενο '''three-way handshake''':
 
[[ΕικόναΑρχείο:3-way-handshake.JPG|frame|Έναρξη της σύνδεσης με three-way handshake]]
1.Αρχικά αποστέλεται ένα πακέτο<ref name="packet">Στα αντίστοιχα RFCs η έννοια πακέτο δεν χρησιμοποιείται τόσο γενικευμένα, συγκεκριμένα:
;τα πακέτα IP : καλούνται '''διαγράμματα δεδομένων (IP datagrams)''', ενώ
Γραμμή 117:
Κατά τη διάρκεια του three-way handshake, τα δύο μέρη διαπραγματεύονται επίσης όλες τις ειδικές επιλογές που θα χρησιμοποιηθούν κατά τη διάρκεια της σύνδεσης TCP, όπως ECN κ.α.
 
=== Μεταφορά δεδομένων ===
 
Μόλις ανταλλαχθούν οι ISNs, οι εφαρμογές μπορούν να διαβιβάσουν δεδομένα η μια στην άλλη. H ανάλυση του τρόπου με τον οποίο γίνεται η μεταφορά δεδομένων, απαιτεί εξέταση για
Γραμμή 129:
Εάν δεν υπάρχουν δεδομένα για να σταλούν, ο αποστολέας θα βρίσκεται σε αδράνεια αναμένοντας την εφαρμογή να βάλει δεδομένα στο byte stream ή να παραλάβει δεδομένα από το άλλο άκρο της σύνδεσης.
 
==== ''Έλεγχος ροής'' ====
 
Ο έλεγχος ροής απαιτεί την επιβεβαίωση λήψης (acknowledgment) κάθε πακέτου από τον απόμακρο host πριν να σταλεί το επόμενο. Οι [[αλγόριθμος|αλγόριθμοι]] για το [[Sliding Window Protocol|sliding window]] <ref name=window>'''Sliding window'''<br />ολίσθαίνον/συρόμενο παράθυρο</ref>, που χρησιμοποιούνται από το TCP, επιτρέπουν σε πολλαπλά πακέτα δεδομένων να μεταφέρονται ταυτόχρονα για να χρησιμοποιείται αποδοτικότερα η [[εύρος ζώνης|bandwidth]] (εύρος ζώνης) ενός δικτύου.
 
Για παράδειγμα, εαν ένας υπολογιστής A στείλει 4 byte με αριθμό ακολουθίας (sequence number) 100 - συνεπώς, τα 4 bytes έχουν αριθμό ακολουθίας 100, 101, 102 και 103 - τότε ο παραλήπτης πρέπει να απαντήσει με επιβεβαίωση (acknowledgement) που φέρει sequence number 104. Αυτό πρόκειται να είναι το επόμενο byte που περιμένει στο επόμενο πακέτο. Εαν για κάποιο λόγο, τα τελευταία δύο bytes περιέχουν σφάλματα τότε η τιμή της επιβεβαίωσης θα είναι 102, εφόσον τα bytes με αριθμό 100 και 101 έχουν φτάσει με επιτυχία.
 
==== ''Έλεγχος συμφόρησης'' ====
 
Αν και το TCP συνήθως δεν ενδιαφέρεται για όσα συμβαίνουν στο διαδίκτυο (αυτό είναι εργασία που εκτελείται από IP protocol στο 3ο επίπεδο του [[μοντέλο αναφοράς OSI|μοντέλου OSI]]) πρέπει να είναι αρκετά "έξυπνο", ώστε να αντιληφθεί και να χειριστεί κατάλληλα μια συμφόρηση στο δίκτυο. Το TCP δεν μπορεί να αγνοήσει τι συμβαίνει στο διαδίκτυο μεταξύ των δύο συνδεδεμένων άκρων.
Γραμμή 141:
Για αυτόν τον λόγο, το TCP περιλαμβάνει διάφορους συγκεκριμένους αλγορίθμους που έχουν ως σκοπό είτε να αποφύγουν εξ αρχής τη συμφόρηση, είτε να αποκριθούν σε αυτή. Χρησιμοποιούνται διάφοροι μηχανισμοί για να επιτευχθεί υψηλή απόδοση και να μην υπερφορτωθεί το δίκτυο. Αυτοί οι μηχανισμοί περιλαμβάνουν:
 
* τον αλγόριθμο slow-start,
* τον αλγόριθμο congestion avoidance,
* τον αλγόριθμο fast retransmit και
* τον αλγόριθμο fast recovery
 
όπως αναφέρεται στο RFC 2001.
 
=== Τερματισμός ===
 
Η σύνδεση τερματίζεται με ένα '''four-way handshake''', με την κάθε πλευρά να τερματίζει ανεξάρτητα:
 
1.Όταν κάποιο άκρο επιθυμεί να κλεισει τη σύνδεση από πλευράς του, στέλνει ένα πακέτο με το FIN ενεργοποιημένο,<br />
2.Tο πακέτο αυτό επιβεβαιώνει η άλλη πλευρά με ένα ACK και<br />
3.στη συνέχεια, στέλνει το ένα πακέτο FIN<br />
4.Η πλευρά που ξεκίνησε τον τερματισμό, μπορεί να το επιβεβαιώσει στέλνοντας ένα πακέτο ACK.
 
Γραμμή 161:
Τέλος, είναι δυνατό, αν και λιγότερο πιθανό, οι δύο [[host]] να στείλουν ταυτόχρονα ένα πακέτο FIN ο ένας στον άλλο. Στη συνέχεια ο καθένας επιβεβαιώνει το FIN που δέχτηκε με ένα πακέτο ACK. Στο σημείο αυτό και οι δύο διακόπτουν τη σύνδεση.
 
== Λεξιλόγιο ==
<div style="font-size: 95%;">
<references />
</div>
 
== Πηγές ==
Oskar Andreasson, Iptables Tutorial 1.2.1, [http://iptables-tutorial.frozentux.net/ online έκδοση]
 
== Δείτε επίσης ==
* [[IP]]
* [[UDP]]
Γραμμή 176:
* [[TCP/IP]]
 
== Εξωτερικοί σύνδεσμοι ==
;RFCs
* RFC 793
* RFC 2001
 
;Άλλα κείμενα
Γραμμή 207:
[[et:Edastusohje protokoll]]
[[eu:Transmission Control Protocol]]
[[fa:قرارداد کنترلهدایت انتقال]]
[[fi:TCP]]
[[fr:Transmission Control Protocol]]