Τι είναι το πρωτόκολλο udp. Ποια είναι η διαφορά μεταξύ TCP και UDP, με απλά λόγια. Αξιοπιστία και λύσεις σε προβλήματα υπερφόρτωσης

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

Γεια σας, με λένε Glenn Fiedler και σας καλωσορίζω στο πρώτο άρθρο του διαδικτυακού μου βιβλίου, Network Programming for Game Developers.

Σε αυτό το άρθρο θα ξεκινήσουμε με τις πιο βασικές πτυχές προγραμματισμός δικτύου- λήψη και μετάδοση δεδομένων μέσω του δικτύου. Η λήψη και η μετάδοση δεδομένων είναι το κύριο και το πιο σημαντικό απλό μέροςαπό όλο το φάσμα των εργασιών με τις οποίες ασχολούνται οι προγραμματιστές δικτύου, αλλά είναι συχνά δύσκολο να προσδιοριστεί ποιος δρόμος είναι καλύτερος να ακολουθηθεί. Δώστε αρκετή προσοχή σε αυτό το μέρος - εάν σας μείνει μια παρεξήγηση, μπορεί να οδηγήσει σε τρομερές συνέπειες για το παιχνίδι πολλών παικτών αργότερα!

Πιθανότατα έχετε ήδη ακούσει κάτι για τις πρίζες και ίσως γνωρίζετε ότι διατίθενται σε δύο βασικούς τύπους - TCP και UDP. Το πρώτο πράγμα που πρέπει να αποφασίσετε κατά την ανάπτυξη ενός παιχνιδιού για πολλούς παίκτες είναι τι είδους υποδοχές θα χρησιμοποιήσετε - TCP, UDP ή και τα δύο;

Η επιλογή του τύπου υποδοχής εξαρτάται αποκλειστικά από το είδος του παιχνιδιού που αναπτύσσετε. Σε αυτήν τη σειρά άρθρων, θα υποθέσω ότι γράφετε ένα παιχνίδι δράσης - όπως Halo, Battlefield 1942, Quake, Unreal, CounterStrike, Team Fortress κ.λπ.

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

Το TCP σημαίνει "πρωτόκολλο ελέγχου μετάδοσης" και το IP σημαίνει "πρωτόκολλο διαδικτύου". Μαζί υποστηρίζουν σχεδόν οτιδήποτε κάνετε στο διαδίκτυο, από την περιήγηση στον Ιστό έως τις επικοινωνίες IRC και email - όλα εκτελούνται σε TCP/IP.

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

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

Για άλλη μια φορά - όλα είναι τόσο απλά όσο τακτική είσοδοςή ανάγνωση από ένα αρχείο. Elementary Watson!

Αλλά αυτή η ευκολία χρήσης είναι εντελώς διαφορετική από αυτό που συμβαίνει στην πραγματικότητα "κάτω από το καπό", σε ένα χαμηλότερο επίπεδο - το επίπεδο πρωτοκόλλου IP.

Σε αυτό το επίπεδο δεν υπάρχει έννοια σύνδεσης - αντίθετα μεμονωμένα πακέτα μεταδίδονται από τον έναν υπολογιστή στον άλλο. Μπορείτε να σκεφτείτε αυτή τη διαδικασία σαν να περάσετε ένα σημείωμα από το ένα άτομο στο άλλο σε ένα δωμάτιο γεμάτο κόσμο: στο τέλος το σημείωμα φτάνει στο σωστό άτομο, αλλά ταυτόχρονα περνάει από πολλά χέρια.

Ωστόσο, δεν υπάρχει καμία εγγύηση ότι το σημείωμα θα φτάσει στον παραλήπτη. Ο αποστολέας απλώς στέλνει ένα σημείωμα με την ελπίδα ότι θα φτάσει, αλλά δεν γνωρίζει καν εάν το μήνυμα έχει φτάσει ή όχι - έως ότου ο παραλήπτης αποφασίσει να γράψει πίσω.
Φυσικά, στην πραγματικότητα όλα είναι λίγο πιο περίπλοκα, αφού ο υπολογιστής αποστολής δεν γνωρίζει την ακριβή σειρά των υπολογιστών στο δίκτυο μέσω των οποίων πρέπει να μεταδοθεί το πακέτο ώστε να φτάσει όσο το δυνατόν γρηγορότερα. Μερικές φορές το IP μεταδίδει πολλαπλά αντίγραφα του ίδιου πακέτου, τα οποία μπορεί να ακολουθούν διαφορετικές διαδρομές για να φτάσουν στον προορισμό - και είναι πιθανό να φτάσουν σε διαφορετικές ώρες.

Τι γίνεται αν θέλουμε να μεταφέρουμε πληροφορίες μεταξύ υπολογιστών όχι σε στυλ ανάγνωσης/εγγραφής αρχείων, αλλά με απευθείας αποστολή και λήψη μεμονωμένων πακέτων;

Λοιπόν, μπορούμε να το κάνουμε αυτό χρησιμοποιώντας UDP. Το UDP σημαίνει "πρωτόκολλο datagram χρήστη" και τρέχει πάνω από το IP (όπως το TCP), αλλά αντί να προσθέτει έναν τόνο λειτουργικότητας είναι απλώς ένα μικρό πρόσθετο στην IP.

Χρησιμοποιώντας το UDP, μπορούμε να στείλουμε ένα πακέτο σε μια συγκεκριμένη διεύθυνση IP (για παράδειγμα, 112.140.20.10) και θύρα (για παράδειγμα, 52423) και θα μεταδοθεί από υπολογιστή σε υπολογιστή μέχρι να φτάσει στον προορισμό του (ή να χαθεί κατά μήκος του τρόπος).

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

Το πρωτόκολλο UDP δεν εγγυάται την παράδοση δεδομένων. Στην πράξη, τα περισσότερα πακέτα, φυσικά, φτάνουν, αλλά υπάρχει πάντα απώλεια περίπου 1-5%, και μερικές φορές υπάρχουν χρονικές περίοδοι κατά τις οποίες τα πακέτα δεν φτάνουν καθόλου (θυμηθείτε ότι μεταξύ του αποστολέα και του παραλήπτη μπορεί να υπάρξει είναι χιλιάδες υπολογιστές, σε οποιονδήποτε από τους οποίους μπορεί να αποτύχει ή να χαλάσει).

Επίσης, το UDP δεν εγγυάται τη σειρά με την οποία παραδίδονται τα πακέτα. Μπορείτε να στείλετε πέντε πακέτα με τη σειρά - 1, 2, 3, 4, 5 - αλλά μπορεί να φτάσουν με εντελώς διαφορετική σειρά - για παράδειγμα, 3, 1, 2, 5, 4. Και πάλι, στην πράξη, πιθανότατα θα φτάνω V με τη σωστή σειράστις περισσότερες περιπτώσεις, αλλά δεν μπορείτε να βασιστείτε σε αυτό!

Τέλος, ενώ το UDP δεν προσθέτει πολλά στην IP, εγγυάται ένα πράγμα. Εάν προωθήσετε ένα πακέτο, είτε θα φτάσει εντελώς είτε καθόλου. Έτσι, εάν στείλετε ένα πακέτο 256 byte σε άλλον υπολογιστή, τότε δεν μπορεί να λάβει μόνο τα πρώτα 100 byte από το πακέτο - πρέπει να λάβει και τα 256 byte. Αυτό είναι πραγματικά το μόνο πράγμα που εγγυάται το πρωτόκολλο UDP - όλα τα άλλα πέφτουν στους ώμους σας.

Πρέπει λοιπόν να αποφασίσουμε - πρέπει να χρησιμοποιήσουμε υποδοχές TCP ή UDP; Ας ρίξουμε μια ματιά στις ιδιότητες τους:

  • Χρησιμοποιεί την αρχή σύνδεσης
  • Εγγυήσεις παράδοσης και ανάκαμψης
  • Χωρίζει αυτόματα τις πληροφορίες σε πακέτα
  • Διασφαλίζει ότι τα δεδομένα δεν αποστέλλονται πολύ εντατικά (έλεγχος ροής δεδομένων)
  • Εύκολο στη χρήση - όπως η εγγραφή/ανάγνωση από ένα αρχείο
UDP:
  • Δεν χρησιμοποιεί την αρχή σύνδεσης - θα πρέπει να την εφαρμόσετε χειροκίνητα
  • Δεν εγγυάται την παράδοση και τη σειρά παράδοσης των δεμάτων - μπορεί να φτάσουν με λάθος σειρά, με αντίγραφα ή να μην φτάσουν καθόλου!
  • Πρέπει να χωρίσετε χειροκίνητα τα δεδομένα σε πακέτα και να τα στείλετε
  • Πρέπει να προσέχετε να μην στέλνετε δεδομένα πολύ εντατικά
  • Εάν χαθεί ένα πακέτο, πρέπει να το παρακολουθήσετε με κάποιο τρόπο και, εάν χρειάζεται, να το στείλετε ξανά
Με μια τέτοια λίστα, η λύση φαίνεται προφανής - το TCP υλοποιεί όλες τις λειτουργίες που χρειαζόμαστε και είναι πιο εύκολο στη χρήση, ενώ χρησιμοποιώντας UDPυπόσχεται αιμορροΐδες γράφοντας τα πάντα στον κόσμο στο χέρι, από την αρχή. Χρησιμοποιούμε λοιπόν TCP, σωστά;

Αλλά όχι.

Η χρήση του TCP είναι ίσως το χειρότερο λάθος που μπορείτε να κάνετε κατά την ανάπτυξη ενός παιχνιδιού για πολλούς παίκτες. Για να καταλάβουμε γιατί, ας δούμε τι κάνει το TCP τόσο εύκολο στη χρήση!

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

Πώς το κάνει λοιπόν;

Πρώτον, το TCP χρησιμοποιεί μια αφαίρεση ροής δεδομένων - μπορείτε απλά να γράψετε byte δεδομένων σε αυτήν τη ροή και το TCP θα βεβαιωθεί ότι φτάνει στον προορισμό του. Επειδή το IP μεταδίδει δεδομένα σε πακέτα και το TCP εκτελείται πάνω από το IP, το TCP πρέπει να διασπάσει τη ροή εισόδου του χρήστη σε μεμονωμένα πακέτα. Έτσι, μέσα στο TCP, κάποια λογική συλλέγει δεδομένα σε μια ουρά και όταν είναι αρκετά, σχηματίζει ένα πακέτο και τα στέλνει στον προορισμό.

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

Το TCP έχει μια επιλογή για να το διορθώσει - "TCP_NODELAY". Λέει στο πρωτόκολλο να μην περιμένει να συγκεντρωθούν τα δεδομένα στην ουρά αποστολής, αλλά να τα στείλει αμέσως.

Δυστυχώς, ακόμη και με την εγκατάσταση αυτής της επιλογής, το TCP έχει πολλά προβλήματα όταν χρησιμοποιείται διαδικτυακά παιχνίδια.

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

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

Τι γίνεται όμως αν ένα από τα πακέτα δεν φτάσει; Ή αν φτάσουν τα πακέτα εκτός λειτουργίας, ή με αντίγραφα;

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

Το πρόβλημα είναι ότι όταν το TCP «συγχρονίζει» τη ροή δεδομένων με αυτόν τον τρόπο, εάν χαθεί ένα πακέτο, η μετάδοση σταματά μέχρι να σταλεί εκ νέου το χαμένο πακέτο (και να ληφθεί από τον προορισμό). Εάν φτάσουν νέα δεδομένα κατά την αναμονή, θα μπουν στην ουρά και δεν θα μπορείτε να τα διαβάσετε μέχρι να φτάσει το χαμένο πακέτο. Πόσος χρόνος χρειάζεται για να ξαναστείλει ένα πακέτο; Χρειάζεται τουλάχιστον ο χρόνος μετ' επιστροφής του πακέτου (όταν το TCP καθορίζει ποιο πακέτο θα στείλει ξανά), συν το χρόνο για την εκ νέου παράδοση του χαμένου πακέτου. Έτσι, εάν το ping μεταξύ των υπολογιστών είναι 125 ms, η αναμετάδοση του πακέτου θα διαρκέσει περίπου το ένα πέμπτο του δευτερολέπτου, και στη χειρότερη περίπτωση, έως και μισό δευτερόλεπτο (φανταστείτε να χαθεί ξαφνικά και το πακέτο που απεστάλη). Veselukha!

Γιατί δεν πρέπει ποτέ να χρησιμοποιείτε το TCP για παιχνίδια για πολλούς παίκτες
Το πρόβλημα με τη χρήση του TCP σε διαδικτυακά παιχνίδια είναι ότι, σε αντίθεση με τα προγράμματα περιήγησης, ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗκαι άλλες εφαρμογές, τα παιχνίδια βασίζονται στην αλληλεπίδραση σε πραγματικό χρόνο. Για πολλές πτυχές του παιχνιδιού, όπως τα πλήκτρα που πατά ο χρήστης και η θέση των παικτών στο παιχνίδι, δεν έχει σημασία τι συνέβη πριν από ένα δευτερόλεπτο, αλλά μόνο η πιο πρόσφατη κατάσταση κόσμος του παιχνιδιού.

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

Έτσι, στο παιχνίδι μας, εάν ένα πακέτο χαθεί κατά τη μετάδοση μέσω του δικτύου, το παιχνίδι σταματά και περιμένει μέχρι να παραδοθεί εκ νέου το πακέτο. Στην πλευρά του πελάτη, τα αντικείμενα του παιχνιδιού παγώνουν και στον διακομιστή, οι παίκτες δεν μπορούν επίσης να μετακινηθούν ή να πυροβολήσουν επειδή ο διακομιστής δεν μπορεί να δεχτεί νέα πακέτα. Όταν τελικά φτάσει το χαμένο πακέτο, περιέχει ήδη ξεπερασμένες πληροφορίες, το οποίο δεν είναι πλέον σχετικό. Επιπλέον, μετά από αυτό, φτάνουν επίσης όλα εκείνα τα πακέτα που έχουν συσσωρευτεί στην ουρά κατά τη διάρκεια του χρόνου αναμονής και πρέπει όλα να υποβληθούν σε επεξεργασία σε μία επανάληψη του βρόχου. Πλήρης σύγχυση!

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

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

Αλλά περίμενε! Γιατί δεν μπορώ να χρησιμοποιήσω το UDP και το TCP μαζί;

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

Φυσικά, υπάρχει μεγάλος πειρασμός να χρησιμοποιήσετε το UDP για μεταφορά δεδομένων εισαγωγή χρήστηκαι τα κράτη του κόσμου, και το TCP είναι για εκείνα τα δεδομένα που πρέπει να είναι εγγυημένα ότι θα παραδοθούν. Μπορεί ακόμη και να σκέφτεστε ότι θα μπορούσατε να δημιουργήσετε πολλαπλές «νήματα» εντολών - για παράδειγμα, μία για φόρτωση επιπέδων, άλλη για εντολές AI. Σκέφτεστε, "Δεν χρειάζομαι ομάδες τεχνητής νοημοσύνης να περιμένουν στην ουρά εάν χαθεί το πακέτο δεδομένων για τη φόρτωση ενός επιπέδου, επειδή είναι εντελώς άσχετες!" Σε αυτήν την περίπτωση, έχετε δίκιο και μπορείτε να αποφασίσετε να δημιουργήσετε μια υποδοχή TCP για κάθε ροή εντολών.

Με την πρώτη ματιά, αυτό υπέροχη ιδέα. Αλλά το πρόβλημα είναι ότι εφόσον το TCP και το UDP τρέχουν και τα δύο πάνω από το IP, τα πακέτα και των δύο πρωτοκόλλων θα επηρεάσουν το ένα το άλλο - ήδη σε επίπεδο IP. Το πώς ακριβώς θα εκδηλωθεί αυτό το αποτέλεσμα είναι ένα πολύ περίπλοκο ερώτημα και σχετίζεται με τους μηχανισμούς αξιοπιστίας στο TCP. Ωστόσο, σε κάθε περίπτωση, να γνωρίζετε ότι η χρήση TCP συνήθως οδηγεί σε αυξημένη απώλεια πακέτων UDP. Αν θέλετε να μάθετε περισσότερα για αυτό, μπορείτε να διαβάσετε

Όταν μιλάμε για ασφάλεια πληροφοριών, εννοούμε την εμπιστευτικότητα, την ακεραιότητα και τη διαθεσιμότητα των πληροφοριών ανά πάσα στιγμή. Και αν όλα είναι ξεκάθαρα με την εμπιστευτικότητα και τη διαθεσιμότητα, τότε πώς να διασφαλιστεί η ακεραιότητα των πληροφοριών όταν μεταδίδονται μέσω του δικτύου; Για να λύσουμε αυτό το πρόβλημα, θα χρειαστούμε γνώση των πρωτοκόλλων δικτύου. Σε αυτό το άρθρο θα δούμε τα πρωτόκολλα TCP και UDP. Αποτελούν μέρος της στοίβας πρωτοκόλλου TCP/IP, ανήκουν στο επίπεδο μεταφοράς του μοντέλου OSI και χρησιμοποιούνται για τη μεταφορά πληροφοριών από κόμβο σε κόμβο.

Τι είναι καθένα από αυτά τα πρωτόκολλα, ποια είναι η διαφορά τους και πότε είναι πιο σκόπιμο να χρησιμοποιήσετε μια σύνδεση UDP και πότε είναι το TCP.

UDP

Το πρωτόκολλο UDP είναι ένα πρωτόκολλο που παρέχει μετάδοση δεδομένων (datagram) χωρίς προ-δημιουργίασυνδέσεις μεταξύ κεντρικών υπολογιστών. Κατά την αποστολή datagrams, δεν υπάρχει βεβαιότητα για την ύπαρξη του παραλήπτη και την ετοιμότητά του για ανταλλαγή. Πρωτόκολλο δικτύουΤο UDP επίσης δεν παρέχει παραγγελία datagrams κατά την παραλαβή. Χρησιμοποιείται από εφαρμογές για τις οποίες ο χρόνος παράδοσης είναι απαραίτητος, όταν δεν υπάρχει τρόπος να περιμένετε καθυστερημένα ή να ζητήσετε χαμένα πακέτα, για παράδειγμα, σε συστήματα πραγματικού χρόνου. Τα datagrams μπορεί να παραδοθούν εκτός παραγγελίας, να αντιγραφούν ή να μην παραδοθούν καθόλου. Αυτός είναι ο λόγος για τον οποίο το UDP ονομάζεται «Αξιόπιστο Πρωτόκολλο Δεδομένων».

Οι εφαρμογές που χρησιμοποιούν το πρωτόκολλο UDP δεν είναι ευαίσθητες στην απώλεια δεδομένων, το datagram εκτός λειτουργίας και την αντιγραφή. Ταυτόχρονα, μπορούν να χρησιμοποιήσουν μηχανισμούς αξιοπιστίας σε επίπεδο εφαρμογής.

TCP

Πρωτόκολλο μεταφοράς Δεδομένα TCP– ένα πρωτόκολλο που διασφαλίζει αξιόπιστη παράδοση πακέτων δεδομένων· διασφαλίζει τη δημιουργία σύνδεσης μεταξύ δύο κεντρικών υπολογιστών χρησιμοποιώντας τη μέθοδο «χειραψίας», μετά την οποία μπορούν να ανταλλάσσονται δεδομένα.

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

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

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

Διαφορές TCP και UDP

Αυτό σημαίνει ότι το UDP δεν πρέπει να χρησιμοποιείται; Καθόλου. Λόγω της απουσίας «εγγύησης παράδοσης», το πρωτόκολλο UDP παρέχει περισσότερα υψηλή ταχύτηταμετάδοση δεδομένων από το TCP. Για το λόγο αυτό, το UDP είναι βέλτιστο για δίκτυο και διαδικτυακά παιχνίδια, προβολή ροή βίντεο, οργάνωση επικοινωνιών βίντεο και τηλεφωνίας IP.

Μερίδιο ΧΡΗΣΙΜΕΣ ΠΛΗΡΟΦΟΡΙΕΣμε αγαπημένα πρόσωπα.

8 απαντήσεις

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

Το UDP είναι πρωτόκολλο χωρίς σύνδεση. Η επικοινωνία είναι προσανατολισμένη σε datagram. Η ακεραιότητα είναι εγγυημένη μόνο σε ένα datagram. Τα datagrams φτάνουν στον προορισμό τους και μπορεί να αποτύχουν ή να μην φτάσουν καθόλου. Είναι πιο αποτελεσματικό από το TCP επειδή δεν χρησιμοποιεί ACK. Συνήθως χρησιμοποιείται για επικοινωνίες σε πραγματικό χρόνο όπου ένα μικρό ποσοστό απώλειας πακέτων είναι καλύτερο από το γενικό κόστος μιας σύνδεσης TCP.

Σε ορισμένες περιπτώσεις, το UDP χρησιμοποιείται επειδή επιτρέπει τη μετάδοση μετάδοση πακέτων. Αυτό μερικές φορές είναι θεμελιώδες σε περιπτώσεις όπως Πρωτόκολλο DHCP, επειδή η μηχανή πελάτηδεν έχει λάβει ακόμη διεύθυνση IP (αυτό είναι ένα πρωτόκολλο t26 > πρωτόκολλο) και δεν θα υπάρχει τρόπος να δημιουργήσετε μια ροή TCP χωρίς διεύθυνση IP.

Το UDP (User Datagram Protocol) είναι ένα κοινό, ευρέως χρησιμοποιούμενο πρωτόκολλο στο Διαδίκτυο. Ωστόσο, το UDP δεν χρησιμοποιείται ποτέ για την αποστολή ευαίσθητων δεδομένων όπως ιστοσελίδες, πληροφορίες βάσης δεδομένων κ.λπ. Το UDP χρησιμοποιείται συνήθως για ροή ήχου και βίντεο. Ροή πολυμέσων όπως αρχεία ήχου Windows Media(.WMA), Real Player (.RM) και άλλοι χρησιμοποιούν UDP γιατί προσφέρει ταχύτητα! Ο λόγος που το UDP είναι ταχύτερο από το TCP είναι επειδή δεν υπάρχει έλεγχος ροής ή διόρθωση σφαλμάτων. Τα δεδομένα που αποστέλλονται μέσω του Διαδικτύου επηρεάζονται από συγκρούσεις και θα υπάρχουν σφάλματα. Θυμηθείτε ότι το UDP αφορά μόνο την ταχύτητα. Αυτός είναι ο κύριος λόγος ροή πολυμέσωνδεν είναι υψηλής ποιότητας.

1) Το TCP είναι προσανατολισμένο στη σύνδεση και αξιόπιστο, όπου το UDP είναι λιγότερο σύνδεση και αναξιόπιστο.

2) Το TCP απαιτεί πρόσθετη επεξεργασία σε επίπεδο διεπαφή δικτύου, όπου, όπως στο UDP, αρ.

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

4) Το UDP χρησιμοποιείται κυρίως σε περιπτώσεις όπου η καθυστέρηση πακέτων είναι πιο σοβαρή από την απώλεια πακέτων.

Σκεφτείτε το TCP ως πακέτα προγραμματισμού UPS/FedEx μεταξύ δύο τοποθεσιών, ενώ το UDP ισοδυναμεί με την αποστολή μιας ταχυδρομικής κάρτας σε ένα γραμματοκιβώτιο.

Η UPS/FedEx θα κάνει ό,τι είναι δυνατό για να βεβαιωθεί ότι το πακέτο που στέλνετε θα φτάσει εκεί και θα παραληφθεί εγκαίρως. Με μια καρτ ποστάλ, είστε τυχεροί αν φτάσει καθόλου, και μπορεί να αποτύχει ή να αργήσει (πόσες φορές έχετε λάβει μια κάρτα από κάποιον ΑΦΟΥ έχει γυρίσει σπίτι από τις διακοπές του;)

Το TCP είναι τόσο κοντά σε ένα εγγυημένο πρωτόκολλο παράδοσης όσο μπορείτε με το UDP - είναι απλά η "καλύτερη προσπάθεια".

Λόγοι που το UDP χρησιμοποιείται για DNS και DHCP:

Το DNS - TCP απαιτεί περισσότερους πόρους από τον διακομιστή (που ακούει για συνδέσεις) παρά από τον πελάτη. Συγκεκριμένα, όταν μια σύνδεση TCP είναι κλειστή, ο διακομιστής πρέπει να θυμάται τα δεδομένα σύνδεσης (διατηρώντας τα στη μνήμη) για δύο λεπτά κατά τη διάρκεια μιας κατάστασης γνωστής ως TIME_WAIT_2. Αυτή είναι μια δυνατότητα που προστατεύει από λανθασμένα διπλότυπα πακέτα από προηγούμενη σύνδεση που ερμηνεύονται ως μέρος της τρέχουσας σύνδεσης. Η διατήρηση του TIME_WAIT_2 χρησιμοποιεί μνήμη πυρήνα στον διακομιστή. Ερωτήματα DNSμικρό και συχνά προέρχεται από διαφορετικούς πελάτες. Αυτό το μοντέλο χρήσης δίνει μεγαλύτερη πίεση στον διακομιστή σε σύγκριση με τους πελάτες. Θεωρήθηκε ότι η χρήση του UDP, το οποίο είναι χωρίς σύνδεση και χωρίς κατάσταση στον πελάτη ή τον διακομιστή, θα βελτίωνε αυτό το πρόβλημα.

DHCP - Το DHCP είναι μια επέκταση του BOOTP. Το BOOTP είναι ένα πρωτόκολλο που υπολογιστές-πελάτεςχρησιμοποιείται για τη λήψη πληροφοριών διαμόρφωσης από τον διακομιστή κατά την εκκίνηση του προγράμματος-πελάτη. Για την εύρεση ενός διακομιστή, αποστέλλεται μια εκπομπή με ένα αίτημα σε διακομιστές BOOTP (ή DHCP). Η μετάδοση μπορεί να σταλεί μόνο μέσω πρωτοκόλλου χωρίς σύνδεση, όπως το UDP. Επομένως, το BOOTP απαιτούσε τουλάχιστον ένα πακέτο UDP να μεταδοθεί στον διακομιστή. Επίσης, δεδομένου ότι το BOOTP εκτελείται ενώ ο υπολογιστής-πελάτης... εκκινεί, και αυτή είναι μια χρονική περίοδος κατά την οποία ο υπολογιστής-πελάτης ενδέχεται να μην έχει φορτώσει και να εκτελείται ολόκληρη η στοίβα TCP/IP του, το UDP μπορεί να είναι το μόνο πρωτόκολλο που είναι διατεθειμένος να χειριστεί κατά τη διάρκεια εκείνη τη φορά. Τέλος, ορισμένοι πελάτες DHCP/BOOTP διαθέτουν μόνο UDP. Για παράδειγμα, ορισμένοι θερμοστάτες IP εφαρμόζουν μόνο UDP. Ο λόγος είναι ότι έχουν κατασκευαστεί με τόσο μικροσκοπικούς επεξεργαστές και λίγη μνήμη που δεν μπορούν να κάνουν TCP, αλλά πρέπει να λάβουν μια διεύθυνση IP κατά την εκκίνηση.

Όπως αναφέρθηκε, το UDP είναι επίσης χρήσιμο για ροή πολυμέσων, ειδικά ήχου. Οι συνομιλίες ακούγονται καλύτερα με βάση την καθυστέρηση δικτύου, εάν απλώς απορρίψετε καθυστερημένα πακέτα. Μπορείτε να το κάνετε αυτό με το UDP, αλλά με το TCP το μόνο που λαμβάνετε κατά τη διάρκεια της καθυστέρησης είναι μια παύση ακολουθούμενη από τον ήχο, ο οποίος θα καθυστερεί πάντα για όσο διάστημα έχει ήδη διακοπεί. Για διπλής όψης τηλεφωνικές συνομιλίεςαυτό είναι απαράδεκτο.

Μία από τις διαφορές είναι η μείωση

UDP. Στείλτε ένα μήνυμα και μην κοιτάξετε πίσω εάν φτάσει στο στόχο, πρωτόκολλο χωρίς σύνδεση
TCP: στείλτε ένα μήνυμα και βεβαιωθείτε ότι έχετε φτάσει στον προορισμό, πρωτόκολλο προσανατολισμένο στη σύνδεση

Πρωτόκολλο User Datagram - UDP

Πρωτόκολλο UDPείναι ένα από τα δύο πρωτόκολλα επιπέδου μεταφοράς που χρησιμοποιούνται στη στοίβα πρωτοκόλλων TCP/IP. Το UDP επιτρέπει σε ένα πρόγραμμα εφαρμογής να μεταδίδει τα μηνύματά του μέσω ενός δικτύου με ελάχιστη επιβάρυνση που σχετίζεται με τη μετατροπή πρωτοκόλλων επιπέδου εφαρμογής σε IP. Ωστόσο, την ίδια στιγμή, πρόγραμμα εφαρμογήςη ίδια πρέπει να φροντίσει να επιβεβαιώσει ότι το μήνυμα παραδόθηκε στον προορισμό του. Η κεφαλίδα UDP datagram (μηνύματος) μοιάζει με αυτή που φαίνεται στην Εικόνα 2.10.

Ρύζι. 2.10. Δομή κεφαλίδας μηνύματος UDP

Η μονάδα δεδομένων πρωτοκόλλου UDP ονομάζεται πακέτο UDP ή datagram χρήστη. Ένα πακέτο UDP αποτελείται από μια κεφαλίδα και ένα πεδίο δεδομένων που περιέχει το πακέτο επιπέδου εφαρμογής. Η κεφαλίδα έχει απλή μορφή και αποτελείται από τέσσερα πεδία δύο byte:

    Θύρα πηγής UDP - αριθμός θύρας της διαδικασίας αποστολής,

    Θύρα προορισμού UDP - αριθμός θύρας της διαδικασίας παραλήπτη,

    Μήκος μηνύματος UDP - μήκος του πακέτου UDP σε byte,

    Άθροισμα ελέγχου UDP - άθροισμα ελέγχουΠακέτο UDP

Δεν πρέπει να συμπληρωθούν όλα τα πεδία ενός πακέτου UDP. Εάν το σταλμένο datagram δεν αναμένει απάντηση, τότε μπορούν να τοποθετηθούν μηδενικά στη θέση της διεύθυνσης του αποστολέα. Μπορείτε επίσης να αρνηθείτε τον υπολογισμό του αθροίσματος ελέγχου, αλλά σημειώστε ότι το πρωτόκολλο IP υπολογίζει το άθροισμα ελέγχου μόνο για την κεφαλίδα του πακέτου IP, αγνοώντας το πεδίο δεδομένων

Οι θύρες στην κεφαλίδα ορίζουν το πρωτόκολλο UDP ως πολυπλέκτη που επιτρέπει τη συλλογή και αποστολή μηνυμάτων από εφαρμογές στο επίπεδο πρωτοκόλλου. Σε αυτήν την περίπτωση, η εφαρμογή χρησιμοποιεί μια συγκεκριμένη θύρα. Οι εφαρμογές που επικοινωνούν μέσω του δικτύου ενδέχεται να χρησιμοποιούν διαφορετικές θύρες, κάτι που αντικατοπτρίζεται στην κεφαλίδα του πακέτου. Συνολικά, μπορούν να οριστούν 216 διαφορετικές θύρες. Οι πρώτες 256 θύρες εκχωρούνται στις λεγόμενες "γνωστές υπηρεσίες", οι οποίες περιλαμβάνουν, για παράδειγμα, τη θύρα UDP 53, η οποία έχει εκχωρηθεί στην υπηρεσία DNS.

Πεδίο Μήκοςκαθορίζει το συνολικό μήκος του μηνύματος. Πεδίο Άθροισμα ελέγχουχρησιμεύει στον έλεγχο της ακεραιότητας των δεδομένων. Μια εφαρμογή που χρησιμοποιεί το πρωτόκολλο UDP πρέπει να φροντίζει για την ακεραιότητα των δεδομένων αναλύοντας τα πεδία Checksum και Length. Επιπλέον, κατά την ανταλλαγή δεδομένων μέσω UDP, το ίδιο το πρόγραμμα εφαρμογής πρέπει να φροντίζει για την παρακολούθηση της παράδοσης των δεδομένων στον παραλήπτη. Αυτό συνήθως επιτυγχάνεται με την ανταλλαγή επιβεβαιώσεων παράδοσης μεταξύ προγραμμάτων εφαρμογής.

Οι πιο γνωστές υπηρεσίες που βασίζονται σε UDP είναι η υπηρεσία ονομάτων τομέα BIND και το σύστημα αρχείων NFS Distributed. Επιστρέφοντας στο παράδειγμα traceroute, αυτό το πρόγραμμα χρησιμοποιεί επίσης μεταφορά UDP. Στην πραγματικότητα, είναι το μήνυμα UDP που αποστέλλεται στο δίκτυο, αλλά χρησιμοποιεί μια θύρα που δεν έχει υπηρεσία, γι' αυτό δημιουργείται ένα πακέτο ICMP, το οποίο ανιχνεύει την έλλειψη υπηρεσίας στο μηχάνημα λήψης όταν το πακέτο φτάσει τελικά στο μηχανή προορισμού.

Transfer Control Protocol - TCP

Εάν η παρακολούθηση της ποιότητας της μετάδοσης δεδομένων μέσω του δικτύου είναι σημαντική για μια εφαρμογή, τότε σε αυτήν την περίπτωση χρησιμοποιείται το πρωτόκολλο TCP. Αυτό το πρωτόκολλο ονομάζεται επίσης αξιόπιστο, προσανατολισμένο στη σύνδεση και προσανατολισμένο στη ροή πρωτόκολλο. Πριν συζητήσουμε αυτές τις ιδιότητες του πρωτοκόλλου, ας εξετάσουμε τη μορφή του datagram που μεταδίδεται μέσω του δικτύου (Εικόνα 2.11). Σύμφωνα με αυτή τη δομή, το TCP, όπως και το UDP, έχει θύρες. Οι πρώτες 256 θύρες εκχωρούνται στο WKS, οι θύρες 256 έως 1024 εκχωρούνται σε υπηρεσίες Unix και οι υπόλοιπες μπορούν να χρησιμοποιηθούν κατά την κρίση σας. Στο χωράφι Αριθμός ακολουθίαςο αριθμός πακέτου ορίζεται στην ακολουθία των πακέτων που συνθέτει ολόκληρο το μήνυμα, ακολουθούμενο από ένα πεδίο επιβεβαίωσης Αριθμός Γνώσηςκαι άλλες πληροφορίες ελέγχου.

Ρύζι. 2.11. Δομή πακέτων TCP

    Η θύρα πηγής (SOURS PORT) καταλαμβάνει 2 byte, προσδιορίζει τη διαδικασία αποστολής.

    Η θύρα προορισμού (DESTINATION PORT) καταλαμβάνει 2 byte, προσδιορίζει τη διαδικασία παραλήπτη.

    Ο αριθμός ακολουθίας (ΑΡΙΘΜΟΣ SEQUENCE) καταλαμβάνει 4 byte, υποδεικνύει τον αριθμό byte, ο οποίος καθορίζει τη μετατόπιση του τμήματος σε σχέση με τη ροή των δεδομένων που αποστέλλονται.

    Ο επιβεβαιωμένος αριθμός (ΑΡΙΘΜΟΣ ΕΠΙΒΕΒΑΙΩΣΗΣ) καταλαμβάνει 4 byte, περιέχει τον μέγιστο αριθμό byte στο ληφθέν τμήμα, αυξημένο κατά ένα. Είναι αυτή η τιμή που χρησιμοποιείται ως απόδειξη.

    Το μήκος κεφαλίδας (HLEN) έχει μήκος 4 bit και υποδεικνύει το μήκος της κεφαλίδας του τμήματος TCP, μετρημένο σε λέξεις 32 bit. Το μήκος της κεφαλίδας δεν είναι σταθερό και μπορεί να ποικίλλει ανάλογα με τις τιμές που ορίζονται στο πεδίο Επιλογές.

    Το Reserve (RESERVED) καταλαμβάνει 6 bit, το πεδίο δεσμεύεται για μελλοντική χρήση.

    Τα bit κώδικα (CODE BITS) καταλαμβάνουν 6 bit και περιέχουν πληροφορίες υπηρεσίας σχετικά με τον τύπο αυτό το τμήμα, καθορίζεται ορίζοντας τα αντίστοιχα bit αυτού του πεδίου σε ένα:

    URG - επείγον μήνυμα.

    ACK - απόδειξη για το ληφθέν τμήμα.

    PSH - αίτημα για αποστολή μηνύματος χωρίς αναμονή για πλήρωση του buffer.

    RST - αίτημα για επαναφορά της σύνδεσης.

    SYN - μήνυμα που χρησιμοποιείται για το συγχρονισμό των μετρητών των μεταδιδόμενων δεδομένων κατά τη δημιουργία μιας σύνδεσης.

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

    Ένα παράθυρο (WINDOW) καταλαμβάνει 2 byte, περιέχει τη δηλωμένη τιμή του μεγέθους του παραθύρου σε byte.

    Το άθροισμα ελέγχου (CHECKSUM) παίρνει 2 byte και υπολογίζεται ανά τμήμα.

    Ο δείκτης επείγουσας ανάγκης (URGENT POINTER) καταλαμβάνει 2 byte, χρησιμοποιείται σε συνδυασμό με το bit κώδικα URG, υποδεικνύει το τέλος των δεδομένων που πρέπει να ληφθούν επειγόντως, παρά την υπερχείλιση buffer.

    ΕΠΙΛΟΓΕΣ - αυτό το πεδίο έχει μεταβλητό μήκος και μπορεί να απουσιάζει εντελώς, το μέγιστο μέγεθος πεδίου είναι 3 byte. χρησιμοποιείται για την επίλυση βοηθητικών προβλημάτων, για παράδειγμα, κατά την επιλογή του μέγιστου μεγέθους τμήματος.

    Το PADDING, μια συμπλήρωση μεταβλητού μήκους, είναι ένα εικονικό πεδίο που χρησιμοποιείται για να μεταφέρει το μέγεθος της κεφαλίδας σε έναν ακέραιο αριθμό λέξεων 32 bit.

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

Ο προσανατολισμός της σύνδεσης καθορίζεται από το γεγονός ότι πριν από την αποστολή ενός τμήματος δεδομένων, οι μονάδες TCP προέλευσης και προορισμού ανταλλάσσουν πληροφορίες ελέγχου. Αυτή η ανταλλαγή ονομάζεται χειραψία(κυριολεκτικά «χειραψία»). Το TCP χρησιμοποιεί μια τριφασική χειραψία:

    Η πηγή δημιουργεί μια σύνδεση με τον προορισμό στέλνοντάς του ένα πακέτο με τη σημαία Synchronize Sequence Numbers (SYN). Ο αριθμός στην ακολουθία προσδιορίζει τον αριθμό πακέτου στο μήνυμα της εφαρμογής. Δεν χρειάζεται να είναι 0 ή ένα. Αλλά όλοι οι άλλοι αριθμοί θα το χρησιμοποιούν ως βάση, η οποία θα επιτρέψει τη συλλογή των πακέτων με τη σωστή σειρά.

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

    Η πηγή επιβεβαιώνει ότι έχει αποδεχτεί το τμήμα προορισμού και στέλνει το πρώτο τμήμα δεδομένων.

Γραφικά αυτή η διαδικασία παρουσιάζεται στο Σχήμα 2.12.

Ρύζι. 2.12. Εγκατάσταση Συνδέσεις TCP

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

Η φύση ροής του πρωτοκόλλου καθορίζεται από το γεγονός ότι το SYN καθορίζει τον αριθμό έναρξης για την καταμέτρηση των μεταδιδόμενων byte, όχι των πακέτων. Αυτό σημαίνει ότι εάν το SYN ορίστηκε στο 0 και μεταδόθηκαν 200 byte, τότε ο αριθμός που ορίστηκε στο επόμενο πακέτο θα είναι 201, όχι 2.

Είναι σαφές ότι η φύση ροής του πρωτοκόλλου και η απαίτηση επιβεβαίωσης της λήψης δεδομένων δημιουργούν το πρόβλημα της ταχύτητας μεταφοράς δεδομένων. Για να λύσετε αυτό το πρόβλημα, χρησιμοποιήστε ένα "παράθυρο" - ένα πεδίο - παράθυρο. Η ιδέα της χρήσης του παραθύρου είναι αρκετά απλή: μετάδοση δεδομένων χωρίς να περιμένετε την επιβεβαίωση της παραλαβής τους. Αυτό σημαίνει ότι η πηγή μεταδίδει έναν ορισμένο όγκο δεδομένων ίσο με το παράθυρο χωρίς να περιμένει την επιβεβαίωση της παραλαβής του και μετά σταματά τη μετάδοση και περιμένει για επιβεβαίωση. Εάν λάβει επιβεβαίωση μόνο για ένα μέρος των μεταδιδόμενων δεδομένων, θα αρχίσει να μεταδίδει ένα νέο τμήμα από τον αριθμό που ακολουθεί τον επιβεβαιωμένο. Αυτό φαίνεται γραφικά στο Σχήμα 2.13.

Ρύζι. 2.13. TCP μηχανισμός μετάδοσης δεδομένων

ΣΕ σε αυτό το παράδειγματο παράθυρο έχει ρυθμιστεί σε πλάτος 250 byte. Αυτό σημαίνει ότι το τρέχον τμήμα είναι ένα τμήμα με μετατόπιση SYN 250 byte. Ωστόσο, μετά τη μετάδοση ολόκληρου του παραθύρου, η μονάδα TCP πηγής έλαβε μια επιβεβαίωση ότι λαμβάνει μόνο τα πρώτα 100 byte. Επομένως, η μεταφορά θα ξεκινήσει από 101 byte και όχι από 251.

Έτσι, εξετάσαμε όλες τις βασικές ιδιότητες του πρωτοκόλλου TCP. Απομένει μόνο να αναφέρουμε τις πιο διάσημες εφαρμογές που χρησιμοποιεί το TCP για ανταλλαγή δεδομένων. Αυτό είναι κυρίως TELNET και FTP, καθώς και Πρωτόκολλο HTTPπου είναι η καρδιά ΠαγκόσμιοςΙστός.

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

Πρωτόκολλο UDP

Πρωτόκολλο User Datagram (UDP)είναι ένα απλό πρωτόκολλο χωρίς σύνδεση, προσανατολισμένο σε datagram που παρέχει γρήγορη, αλλά όχι απαραίτητα αξιόπιστη υπηρεσία μεταφοράς. Υποστηρίζει αλληλεπιδράσεις ένα προς πολλά και επομένως χρησιμοποιείται συχνά για μετάδοση και μετάδοση δεδομένων γραμμάτων πολλαπλής εκπομπής.

Πρωτόκολλο ΔιαδικτύουΤο (IP) είναι το κύριο πρωτόκολλο του Διαδικτύου. Το Πρωτόκολλο Ελέγχου Μετάδοσης (TCP) και το UDP είναι πρωτόκολλα επιπέδου μεταφοράς χτισμένα πάνω από ένα υποκείμενο πρωτόκολλο.

Το TCP/IP είναι ένα σύνολο πρωτοκόλλων, που ονομάζεται επίσης Internet Protocol Suite, που αποτελείται από τέσσερα επίπεδα. Να θυμάστε ότι το TCP/IP δεν είναι μόνο ένα πρωτόκολλο, αλλά μια οικογένεια ή σύνολο πρωτοκόλλων που αποτελείται από άλλα πρωτόκολλα χαμηλότερου επιπέδου όπως IP, TCP και UDP. Το UDP βρίσκεται στο επίπεδο μεταφοράς πάνω από το IP (πρωτόκολλο επίπεδο δικτύου). Το επίπεδο μεταφοράς παρέχει επικοινωνία μεταξύ των δικτύων μέσω πυλών. Χρησιμοποιεί διευθύνσεις IP για την αποστολή πακέτων δεδομένων μέσω του Διαδικτύου ή άλλου δικτύου χρησιμοποιώντας μια ποικιλία προγραμμάτων οδήγησης συσκευών.

Πριν αρχίσουμε να μαθαίνουμε πώς λειτουργεί το UDP, ας δούμε κάποια βασική ορολογία που πρέπει να γνωρίζετε καλά. Παρακάτω θα ορίσουμε εν συντομία τους κύριους όρους που σχετίζονται με το UDP:

Πακέτα

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

Datagrams

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

MTU (Μέγιστη μονάδα μετάδοσης)

MTU χαρακτηρίζει στρώμα συνδέσμουκαι αντιστοιχεί στον μέγιστο αριθμό byte που μπορούν να μεταδοθούν σε ένα πακέτο. Με άλλα λόγια, το MTU είναι το πιο μεγάλο πακέτο, το οποίο μπορεί να μεταφερθεί από ένα δεδομένο περιβάλλον δικτύου. Για παράδειγμα, το Ethernet έχει ένα σταθερό MTU 1500 byte. Στο UDP, εάν το μέγεθος του datagram είναι μεγαλύτερο από το MTU, το πρωτόκολλο IP εκτελεί κατακερματισμό σπάζοντας το datagram σε μικρότερα κομμάτια (θραύσματα) έτσι ώστε κάθε τμήμα να είναι μικρότερο από το MTU.

λιμάνια

Για να αντιστοιχίσετε τα εισερχόμενα δεδομένα σε μια συγκεκριμένη διαδικασία που εκτελείται σε έναν υπολογιστή, το UDP χρησιμοποιεί θύρες. Το UDP προωθεί το πακέτο στην κατάλληλη θέση χρησιμοποιώντας τον αριθμό θύρας που καθορίζεται στην κεφαλίδα UDP του datagram. Οι θύρες αντιπροσωπεύονται από αριθμούς 16-bit και επομένως λαμβάνουν τιμές που κυμαίνονται από 0 έως 65.535. Οι θύρες, οι οποίες ονομάζονται επίσης λογικά τελικά σημεία σύνδεσης, χωρίζονται σε τρεις κατηγορίες:

    Γνωστές θύρες - από 0 έως 1023

    Εγγεγραμμένες θύρες - από 1024 έως 49151

    Δυναμικές/ιδιωτικές θύρες - 49152 έως 65535

Σημειώστε ότι οι θύρες UDP μπορούν να λαμβάνουν περισσότερα από ένα μηνύματα ανά πάσα στιγμή. Σε ορισμένες περιπτώσεις, οι υπηρεσίες TCP και UDP ενδέχεται να χρησιμοποιούν τους ίδιους αριθμούς θύρας, όπως 7 (Echo) ή 23 (Telnet).

Το UDP χρησιμοποιεί τις ακόλουθες γνωστές θύρες:

Η λίστα των θυρών UDP και TCP διατηρείται από την IANA (Internet Assigned Numbers Authority).

διευθύνσεις IP

Ένα datagram IP αποτελείται από διευθύνσεις IP πηγής και προορισμού 32 bit. Η διεύθυνση IP προορισμού καθορίζει τελικό σημείογια ένα datagram UDP και η διεύθυνση IP προέλευσης χρησιμοποιείται για τη λήψη πληροφοριών σχετικά με το ποιος έστειλε το μήνυμα. Στον προορισμό, τα πακέτα φιλτράρονται και εκείνα των οποίων οι διευθύνσεις πηγής δεν περιλαμβάνονται στο έγκυρο σύνολο διευθύνσεων απορρίπτονται χωρίς ειδοποίηση στον αποστολέα.

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

TTL

Η τιμή time-to-live ή TTL (time-to-live) σάς επιτρέπει να ορίσετε ένα ανώτερο όριο στον αριθμό των δρομολογητών από τους οποίους μπορεί να περάσει ένα datagram. Η τιμή TTL εμποδίζει τα πακέτα να φτάσουν ατελείωτες θηλιές. Αρχικοποιείται από τον αποστολέα και μειώνεται κατά ένα από κάθε δρομολογητή που επεξεργάζεται το datagram. Όταν η τιμή TTL γίνει μηδέν, το datagram απορρίπτεται.

Ομαδική αλληλογραφία

Η Multicast είναι μια ανοιχτή, βασισμένη σε πρότυπα μέθοδος για τη διανομή πανομοιότυπων πληροφοριών σε πολλούς χρήστες ταυτόχρονα. Η Multicast είναι το κύριο χαρακτηριστικό του πρωτοκόλλου UDP· δεν είναι δυνατό με το πρωτόκολλο TCP. Η πολλαπλή μετάδοση επιτρέπει την αλληλεπίδραση ένα προς πολλά, για παράδειγμα κάνοντας πιθανές χρήσεις, όπως αποστολή ειδήσεων και αλληλογραφίας σε πολλούς παραλήπτες, διαδικτυακό ραδιόφωνο ή προγράμματα επίδειξης σε πραγματικό χρόνο. Η Multicast δεν φορτώνει το δίκτυο τόσο όσο η μετάδοση μετάδοσης, καθώς τα δεδομένα αποστέλλονται σε πολλούς χρήστες ταυτόχρονα:

Πώς λειτουργεί το UDP

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

Το προηγούμενο σχήμα δείχνει ότι το συνολικό μήκος της κεφαλίδας UDP είναι οκτώ byte. Θεωρητικά μέγιστο μέγεθοςΈνα datagram IP είναι 65.535 byte. Με 20 byte κεφαλίδας IP και 8 byte κεφαλίδας UDP, το μήκος δεδομένων χρήστη μπορεί να είναι έως και 65.507 byte. Ωστόσο, τα περισσότερα προγράμματα λειτουργούν με δεδομένα μικρότερο μέγεθος. Έτσι, για τις περισσότερες εφαρμογές, το προεπιλεγμένο μήκος είναι περίπου 8192 byte, καθώς αυτός είναι ο όγκος των δεδομένων που διαβάζονται και γράφονται από το δίκτυο σύστημα αρχείων(NFS). Μπορείτε να ορίσετε τα μεγέθη των buffer εισόδου και εξόδου.

Το άθροισμα ελέγχου απαιτείται για να ελεγχθεί εάν τα δεδομένα παραδόθηκαν στον προορισμό τους σωστά ή ήταν κατεστραμμένα. Καλύπτει τόσο την κεφαλίδα του UDP όσο και τα δεδομένα. Ένα byte πλήρωσης χρησιμοποιείται εάν ο συνολικός αριθμός οκτάδων στο datagram είναι περιττός. Εάν το λαμβανόμενο άθροισμα ελέγχου είναι μηδέν, ο παραλήπτης καταγράφει ένα σφάλμα αθροίσματος ελέγχου και απορρίπτει το datagram. Αν και ένα άθροισμα ελέγχου είναι μια προαιρετική δυνατότητα, συνιστάται πάντα να συμπεριλαμβάνεται.

Στο επόμενο βήμα, το επίπεδο IP προσθέτει 20 byte κεφαλίδας που περιλαμβάνει το TTL, τις διευθύνσεις IP προέλευσης και προορισμού και άλλες πληροφορίες. Αυτή η ενέργεια ονομάζεται ενθυλάκωση IP.

Όπως αναφέρθηκε προηγουμένως, το μέγιστο μέγεθος πακέτου είναι 65.507 byte. Εάν το πακέτο είναι μεγαλύτερο από το προεπιλεγμένο Μέγεθος MTU, τότε το επίπεδο IP χωρίζει το πακέτο σε τμήματα. Αυτά τα τμήματα ονομάζονται θραύσματα και η διαδικασία διαχωρισμού των δεδομένων σε τμήματα είναι θρυμματισμός. Η κεφαλίδα IP περιέχει όλες τις πληροφορίες τμήματος.

Όταν η εφαρμογή αποστολής "ρίχνει" ένα datagram στο δίκτυο, δρομολογείται στη διεύθυνση IP προορισμού που καθορίζεται στην κεφαλίδα IP. Κατά τη διέλευση από έναν δρομολογητή, η τιμή του χρόνου ζωής (TTL) στην κεφαλίδα IP μειώνεται κατά ένα.

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

Μειονεκτήματα του UDP

Σε σύγκριση με το TCP, το UDP έχει τα ακόλουθα μειονεκτήματα:

    Δεν υπάρχουν σήματα επιβεβαίωσης. Πριν από την αποστολή ενός πακέτου UDP, η πλευρά αποστολής δεν ανταλλάσσει σήματα χειραψίας με την πλευρά λήψης. Επομένως, ο αποστολέας δεν έχει τρόπο να γνωρίζει εάν το datagram έχει φτάσει στο σύστημα προορισμού. Ως αποτέλεσμα, το UDP δεν μπορεί να εγγυηθεί ότι τα δεδομένα θα παραδοθούν πραγματικά στον προορισμό (για παράδειγμα, εάν το τελικό σύστημα ή το δίκτυο είναι εκτός λειτουργίας).

    Κατά, Πρωτόκολλο TCPΕίναι προσανατολισμένο στη σύνδεση και επιτρέπει την επικοινωνία μεταξύ κεντρικών υπολογιστών που είναι συνδεδεμένοι στο δίκτυο χρησιμοποιώντας πακέτα. Το TCP χρησιμοποιεί σήματα χειραψίας για να επαληθεύσει ότι τα δεδομένα έχουν μεταφερθεί με επιτυχία.

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

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

    Ασφάλεια. Το TCP είναι πιο ασφαλές από το UDP. Σε πολλούς οργανισμούς, τα τείχη προστασίας και οι δρομολογητές δεν επιτρέπουν τη διέλευση πακέτων UDP. Αυτό συμβαίνει επειδή οι χάκερ μπορούν να εκμεταλλευτούν τις θύρες UDP χωρίς να κάνουν ρητές συνδέσεις.

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

Οφέλη του UDP

Σε σύγκριση με το TCP, το UDP έχει τα ακόλουθα πλεονεκτήματα:

    Δεν έχει δημιουργηθεί σύνδεση. Το UDP είναι ένα πρωτόκολλο χωρίς σύνδεση, επομένως εξαλείφει τα γενικά έξοδα που σχετίζονται με τη δημιουργία συνδέσεων. Εφόσον το UDP δεν χρησιμοποιεί χειραψίες, αποφεύγονται επίσης οι καθυστερήσεις σύνδεσης. Αυτός είναι ο λόγος για τον οποίο το DNS ευνοεί το UDP έναντι του TCP - το DNS θα ήταν πολύ πιο αργό εάν έτρεχε πάνω από το TCP.

    Ταχύτητα. Το UDP είναι ταχύτερο από το TCP. Για το λόγο αυτό, πολλές εφαρμογές προτιμούν το UDP έναντι του TCP. Τα ίδια χαρακτηριστικά που κάνουν το TCP πιο ισχυρό (όπως τα σήματα χειραψίας) το επιβραδύνουν επίσης.

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

    Γενικά έξοδα. Η εργασία με το TCP σημαίνει αυξημένα γενικά έξοδα, τα γενικά έξοδα που επιβάλλονται από το UDP είναι σημαντικά χαμηλότερα. Το TCP χρησιμοποιεί πολύ περισσότερους πόρους σε σύγκριση με το UDP λειτουργικό σύστημα, και κατά συνέπεια, σε περιβάλλοντα όπου οι διακομιστές εξυπηρετούν πολλούς πελάτες ταυτόχρονα, το UDP χρησιμοποιείται ευρέως.

    Μέγεθος κεφαλίδας. Για κάθε πακέτο, η κεφαλίδα UDP έχει μήκος μόνο οκτώ byte, ενώ το TCP έχει κεφαλίδες 20 byte και επομένως το UDP καταναλώνει λιγότερο εύρος ζώνης δικτύου.