>про squid...
>у юзера проксей стоит squid:3128 к примеру Если есерьёзно, то... Предположим для начала, что вы знаете, что такое tcp соедиение, http запросы и заголовки оных.
>юзер обращаясь на сайт:80 перенаправляется на squid:3128
>squid дальше от себя перенаправляет на сайт:80
Никакого "перенаправляется". Умные слова, не подкреплённые пониманием, совершенно бесполезны. Предположим, что я не понял, при чём тут какие-то "перенаправления".
>на шлюзе открываем на выход только 80 порт
>3128 закрыт и на вход и на выход(он типа в локалке только
>отрабатывает)
Для начала: обычное соединение с веб-вервером.
---8<--- http-соедиение, издание упрощённое иллюстрированное
пользователь броузеру: www.tram.tam ENTER
броузер: запрос в DNS ip адреса хоста www.tram.tam
"dns": ответ - www.tram.tam IN A 1.1.1.1
броузер: открывает соедиение с ip 1.1.1.1 на его порт 80
б: шлёт запрос :
Host: www.tram.tam
GET / HTTP/1.0
веб-сервер: принимает, обрабатывает, отвечает - допустим html-страницей (+заголовок http)
Header: xxx
<html>
...........
</html>
б: принял текст, отрендерил, показал пользователю
--->8---
Упрощено: одна html страница, никаких редиректов, кук, картинок, NAT-ов, "серых" адресов и проч.
Итого, у клиента: одно tcp соединение "наружу" (+1 dns запрос - не рассматриваем):
#
src=<ip клиента>:<"верхний пользовательский" порт>
dst=<ip веб-сервера, 1.1.1.1>:<порт http, 80>
Когда в броузере включается галочка [x] Использовать прокси и заполняется его, прокси, адрес, обмен проходит по-другому (с тем же внешним результатом для пользователя):
---8<--- http-через-http-прокси соедиение, издание адаптированное
пользователь броузеру: www.tram.tam ENTER
броузер(tcp соединение#1): открывает соедиение с ip прокси-сервера (10.10.10.10, например) на его, прокси-сервиса, порт, например, 3128.
б(#1): шлёт запрос :
Host: www.tram.tam
GET http: / / www.tram.tam/ HTTP/1.0
прокси(#1): принял, работает>>
прокси(#2): запрос в DNS ip адреса хоста www.tram.tam
"dns"(#2): ответ - www.tram.tam IN A 1.1.1.1
прокси(#3): открывает соедиение с ip 1.1.1.1 на его порт 80
прокси(#3): шлёт запрос :
Host: www.tram.tam
GET / HTTP/1.0
веб-сервер(#3): принимает, обрабатывает, отвечает - допустим html-страницей (+заголовок http)
прокси(#3): принимает страницу, обрабатывает (кеширует на диске, добавляет заголовки и др.)
прокси(#1): и отдал её броузеру
б(#1): принял текст, отрендерил, показал пользователю
--->8---
Соединений - два (#2 не считаем, обращение к сист.функции gethostbyname или типа того)
#1:
src=<ip клиента>:<"верхний пользовательский" порт>
dst=<ip прокси, 10.10.10.10>:<порт прокси, 3128>
#2
src=<ip прокси, обычно внешний>:<какой ни то порт>
dst=<ip веб-сервера, 1.1.1.1>:<порт http, 80>
Заметьте, на клиете DNS не используется.