Proxy forward tidak mempertahankan batas segmen TCP
Pisahkan segmentasi TCP, pembacaan soket, dan pembingkaian HTTP saat memeriksa lalu lintas di kedua sisi proxy forward.
Misalkan sebuah respons HTTP muncul dalam beberapa segmen TCP yang tertangkap setelah melewati Squid. Itu bisa jadi perilaku TCP yang biasa, bukan bukti bahwa respons dipotong secara keliru.
Proxy forward biasanya memiliki dua koneksi:
client ⇄ TCP connection A ⇄ proxy ⇄ TCP connection B ⇄ origin
Setiap koneksi memiliki status TCP, nomor urut, dan pembentukan paketnya sendiri. Proxy dapat membaca data dari satu koneksi dan menuliskannya ke koneksi lain tanpa mempertahankan ukuran segmen asli. Penyanggaan, waktu pengiriman, kemacetan, dan batas ukuran jalur dapat menghasilkan pengelompokan lain.
Tiga batas yang layak dipisahkan
| Batas | Apa yang menentukannya |
|---|---|
| Segmen TCP | Jalur transport dan jaringan |
| Hasil pembacaan soket | Bita aliran yang tersedia dan penyangga pemanggil |
| Pesan atau bingkai HTTP | Aturan pembingkaian protokol HTTP |
Satu pembacaan dapat memuat sebagian header, header utuh beserta bita badan, atau data yang melintasi lebih dari satu batas tingkat aplikasi. TCP tidak menempelkan “akhir respons HTTP” pada akhir pembacaan yang berhasil.
Karena itu pengurai HTTP/1.1 mengumpulkan header dan menerapkan aturan pembingkaian badan yang berlaku, termasuk panjang, pengodean transfer, atau penutupan koneksi yang diizinkan. Bingkai HTTP/2 adalah struktur protokol yang sendirinya dapat melintasi segmen TCP; itu bukan nama lain untuk paket jaringan.
Terowongan CONNECT yang berhasil mempertahankan aliran bita yang diterowongkan sambil tetap memakai dua kaki TCP. Batas segmennya dapat berbeda meskipun proxy tidak mengubah bita di dalam terowongan.
Saat menyelidiki kerusakan, bandingkan data aplikasi yang dirakit ulang. Membandingkan jumlah paket atau mengharapkan panjang paket yang sama di kedua sisi meminta jaminan batas dari TCP yang tidak diberikannya.