Урдчилсан прокси TCP сегментийн хил хязгаарыг хадгалдаггүй
Урдчилсан прокси хоёр талын урсгалыг шалгахдаа TCP сегментчлэл, сокетын уншилт, HTTP хүрээлэлтийг тусгаарлаарай.
Squid-ээр дамжсаны дараа HTTP хариу хэд хэдэн бичигдсэн TCP сегментэд харагдана гэж бодъё. Энэ нь 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-ээс тэр өгдөггүй хилийн баталгааг шаардах юм.