Edelleenvälittävä välityspalvelin ei säilytä TCP-segmenttien rajoja
Erottele TCP-segmentointi, socket-luennaat ja HTTP-kehystys, kun tutkit liikennettä edelleenvälittävän välityspalvelimen molemmin puolin.
Oletetaan, että HTTP-vastaus näkyy useassa kaapatussa TCP-segmentissä Squidin läpikulun jälkeen. Se voi olla tavallista TCP-käyttäytymistä eikä todiste siitä, että vastaus jaettiin väärin.
Edelleenvälittävällä välityspalvelimella on yleensä kaksi yhteyttä:
client ⇄ TCP connection A ⇄ proxy ⇄ TCP connection B ⇄ origin
Jokaisella yhteydellä on oma TCP-tilansa, järjestysnumeronsa ja paketointinsa. Välityspalvelin voi lukea dataa yhdestä yhteydestä ja kirjoittaa sen toiseen säilyttämättä alkuperäisiä segmenttikokoja. Puskurointi, lähetysajankohta, ruuhka ja polun kokorajat voivat tuottaa toisenlaisen ryhmittelyn.
Kolme rajaa, jotka kannattaa pitää erillään
| Raja | Mikä sen määrää |
|---|---|
| TCP-segmentti | Kuljetus- ja verkkopolku |
| Socket-luennan tulos | Käytettävissä olevat virran tavut ja kutsujan puskuri |
| HTTP-viesti tai -kehys | HTTP-protokollan kehyssäännöt |
Yksi luenta voi sisältää osan otsakkeesta, kokonaisen otsakkeen ja runko-osan tavut tai dataa, joka ylittää useamman kuin yhden sovellustason rajan. TCP ei liitä “HTTP-vastauksen loppua” onnistuneen luennan loppuun.
Siksi HTTP/1.1-jäsennin kerää otsakkeita ja soveltaa asianmukaisia rungon kehyssääntöjä, mukaan lukien pituus, siirtokoodaus tai sallittu yhteyden sulkeminen. HTTP/2-kehys on protokollarakenne, joka voi itse ylittää TCP-segmenttejä; se ei ole verkkopaketin toinen nimi.
Onnistunut CONNECT-tunneli säilyttää tunneloidun tavuvirran mutta käyttää silti kahta TCP-osuutta. Sen segmenttirajat voivat poiketa, vaikka välityspalvelin ei olisi muuttanut tunnelin sisäisiä tavuja.
Kun tutkit vioittumista, vertaa uudelleen koottua sovellusdataa. Pakettimäärien vertaaminen tai samojen pakettipituuksien odottaminen molemmilla puolilla pyytää TCP:ltä rajantakausta, jota se ei anna.