Recimo, da se odgovor HTTP po prehodu skozi Squid pojavi v več zajetih segmentih TCP. To je lahko običajno vedenje TCP in ne dokaz, da je bil odgovor razdeljen napačno.

Posredniški strežnik forward ima običajno dve povezavi:

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

Vsaka povezava ima svoje stanje TCP, zaporedne številke in paketizacijo. Posrednik lahko bere podatke iz ene povezave in jih piše v drugo, ne da bi ohranil prvotne velikosti segmentov. Medpomnjenje, čas pošiljanja, zastoji in omejitve velikosti poti lahko ustvarijo drugo združevanje.

Tri meje, ki jih velja držati ločeno

MejaKaj jo določa
Segment TCPTransportna in omrežna pot
Rezultat branja iz vtičniceRazpoložljivi bajti toka in medpomnilnik klicatelja
Sporočilo ali okvir HTTPPravila uokvirjanja protokola HTTP

Eno branje lahko vsebuje del glave, celo glavo skupaj z bajti telesa ali podatke, ki prečkajo več kot eno mejo na ravni aplikacije. TCP ne poveže »konca odgovora HTTP« s koncem uspešnega branja.

Zato razčlenjevalnik HTTP/1.1 zbira glave in uporablja veljavna pravila uokvirjanja telesa, vključno z dolžino, prenosnim kodiranjem ali dovoljenim zaprtjem povezave. Okvir HTTP/2 je protokolarna struktura, ki lahko sama prečka segmente TCP; to ni drugo ime za omrežni paket.

Uspešen tunel CONNECT ohrani tunelirani tok bajtov, vendar še vedno uporablja dva odseka TCP. Njegove meje segmentov se lahko razlikujejo tudi takrat, ko posrednik ni spremenil bajtov znotraj tunela.

Pri preiskovanju poškodbe primerjajte znova sestavljene aplikacijske podatke. Primerjanje števila paketov ali pričakovanje enakih dolžin paketov na obeh straneh od TCP zahteva jamstvo mej, ki ga ta ne daje.

Sorodni članki