En videresendende proxy bevarer ikke grensene mellom TCP-segmenter
Hold TCP-segmentering, socket-lesing og HTTP-innramming fra hverandre når du gransker trafikk på begge sider av en videresendende proxy.
Se for deg at en HTTP-respons dukker opp i flere innfangede TCP-segmenter etter å ha gått gjennom Squid. Det kan være helt vanlig TCP-oppførsel, og ikke et tegn på at responsen ble delt på feil måte.
En videresendende proxy har som regel to forbindelser:
client ⇄ TCP connection A ⇄ proxy ⇄ TCP connection B ⇄ origin
Hver forbindelse har egen TCP-tilstand, egne sekvensnumre og egen pakking. Proxyen kan lese fra den ene forbindelsen og skrive til den andre uten å ta vare på de opprinnelige segmentstørrelsene. Bufring, tidspunkt for sending, kødanning og størrelsesgrensene i nettet kan gi en annen inndeling.
Tre grenser som bør holdes fra hverandre
| Grense | Hva den styres av |
|---|---|
| TCP-segment | Transportlaget og nettverksveien |
| Resultatet av én socket-lesing | Tilgjengelige bytes i strømmen og bufferet til den som leser |
| HTTP-melding eller HTTP-ramme | Reglene for innramming i HTTP-protokollen |
Én lesing kan romme en del av et headerfelt, et helt headerfelt med body-bytes, eller data som strekker seg over flere enn én grense i applikasjonen. TCP setter ikke «slutt på HTTP-respons» sammen med slutten av en vellykket lesing.
Derfor samler en HTTP/1.1-parser opp headere og bruker reglene for body-innramming som gjelder, blant annet lengde, overføringskoding og tillatt avslutning av forbindelsen. En HTTP/2-ramme er en protokollstruktur som selv kan gå over TCP-segmenter; det er ikke et synonym for en nettverkspakke.
En vellykket CONNECT-tunnel bevarer bytestrømmen gjennom tunnelen, men bruker fortsatt to TCP-strekk. Segmentgrensene kan avvike selv om proxyen ikke har endret bytene inne i tunnelen.
Ved feilsøking av korrupsjon bør du sammenligne applikasjonsdataene etter gjenoppbygging. Å sammenligne antall pakker, eller å forvente like pakkelengder på begge sider, er å be TCP om en grensegaranti den ikke gir.