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

Ένας πρόσθιος διακομιστής μεσολάβησης έχει συνήθως δύο συνδέσεις:

client ⇄ TCP connection A ⇄ proxy ⇄ TCP connection B ⇄ origin

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

Τρία όρια που αξίζει να κρατάτε χωριστά

ΌριοΤι το καθορίζει
Τμήμα TCPΗ διαδρομή μεταφοράς και δικτύου
Αποτέλεσμα ανάγνωσης υποδοχήςΤα διαθέσιμα byte ροής και ο προσωρινός χώρος του καλούντος
Μήνυμα ή πλαίσιο HTTPΟι κανόνες πλαισίωσης του πρωτοκόλλου HTTP

Μία ανάγνωση μπορεί να περιέχει μέρος μιας κεφαλίδας, ολόκληρη κεφαλίδα μαζί με byte σώματος ή δεδομένα που διασχίζουν περισσότερα από ένα όρια επιπέδου εφαρμογής. Το TCP δεν συνδέει το «τέλος της απόκρισης HTTP» με το τέλος μιας επιτυχούς ανάγνωσης.

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

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

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

Σχετικά άρθρα