Претпоставимо да се HTTP одговор појави у неколико снимљених TCP сегмената након проласка кроз Squid. То може бити уобичајено TCP понашање, а не доказ да је одговор погрешно подељен.

Предњи прокси обично има две везе:

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

Свака веза има сопствено TCP стање, редне бројеве и пакетизацију. Прокси може читати податке са једне везе и писати их на другу без чувања изворних величина сегмената. Баферисање, време слања, загушење и ограничења величине пута могу произвести другачије груписање.

Три границе које ваља држати одвојено

ГраницаШта је одређује
TCP сегментТранспортни и мрежни пут
Резултат читања сокетаДоступни бајтови тока и бафер позиваоца
HTTP порука или оквирПравила уоквиравања HTTP протокола

Једно читање може садржати део заглавља, цело заглавље заједно са бајтовима тела или податке који прелазе више од једне границе апликационог нивоа. TCP не везује „крај HTTP одговора“ за крај успешног читања.

Зато HTTP/1.1 парсер накупља заглавља и примењује важећа правила уоквиравања тела, укључујући дужину, преносно кодирање или дозвољено затварање везе. HTTP/2 оквир је протоколна структура која и сама може прећи TCP сегменте; то није други назив за мрежни пакет.

Успешан CONNECT тунел чува тунелирани ток бајтова, али и даље користи две TCP деонице. Његове границе сегмената могу се разликовати чак и када прокси није променио бајтове унутар тунела.

Када истражујете оштећење, упоредите поново састављене апликационе податке. Поређење броја пакета или очекивање једнаких дужина пакета са обе стране тражи од TCP-а гаранцију граница коју он не пружа.

Повезани чланци