От ЛАА Ответить на сообщение
К mk Ответить по почте
Дата 12.03.2008 14:22:15 Найти в дереве
Рубрики Прочее; Версия для печати

отнюдь

> Незачёт.
>
> Вот смотрите: пара :<порт> однозначно определяет приложение, которому передаются (и от которого принимаются) данные от соединения.

Несколько не так.

По стандарту TCP/IP порт - условное число, позволяющее разным программам совместно работать на одном и том же хосте (то бишь, по одному IP-адресу). При этом распределение номеров портов между этими программами - вообще говоря совершенно произвольное занятие, которое жизненно затрагивает только конкретную пару сервер-клиент в течение одного конкретного сеанса связи.

И лишь для того, чтобы можно было устанавливать сеанс без предварительной договоренности о номерах используемых портов, существуют списки стандартных портов, используемых протоколами верхнего уровня, такими как HTTP (порты 80, 8080, 8008) или NNTP (порт 119). Эти списки достаточно условны, т.к. ничто не мешает разработчику назначать другие порты своим программам, и многие программы заранее рассчитаны на возможность ручной настройки портов.

> Протоколы HTTP и NNTP принципиально различны. Каким образом Ваше приложение при работе по одному порту определит, какой именно протокол их вышеперечисленных оно должно использовать с данным соединением?

Вы правы: чаще всего никаким образом и не узнает! Просто клиент и сервер заранее настроены так, что по такому-то порту будет использоваться такой-то протокол, а по другому - иной. Если произойдет путаница - сеанс связи установлен не будет.

Хотя в некоторых случаях, когда одна и та же программа работает по нескольким протоколам сразу, она может определить тип используемого протокола по первому пакету от клиента, в котором содержится достаточная информация.

В случае HTTP и NNTP именно так и есть - тип протокола можно определить по первой строке запроса и дальше работать с ним по этому протоколу - что и реализовано в движке форума. У каждого клиента есть свой, клиентский порт, назначаемый, в общем случае, произвольно, на время текущего сеанса, и если клиент попробует связаться с движком форума по обоим протоколам, ему будет выделено два сеанса, в каждом из которых клиентский порт будет разным. Соответственно движок будет по одному клиентскому порту передавать данные по протоколу NNTP, а по другому - HTTP.

Использование нестандартного порта бывает весьма полезно. Например для того чтобы скрыть наличие определенного сервиса на данном хосте от всей великой сети со всеми ее хакерами, кроме посвященных. Или наоборот - как в нашем случае 80 вместо 119 для протокола NNTP - для того, чтобы позволить получать новостную рассылку пользователям из корпоративных сетей, в которых если открыт доступ в интернет - то уж по 80-то порту наверняка! А вот по 119-му - как повезет...

Так что эта замечательная и редкостная особенность движка позволяла не ходить таким участникам на поклон к своим локальным администраторам - с неведомым и непредсказуемым итогом беседы.

К сожалению, именно эта особенность движка и не работает.

> Теоретически это можно сделать, практически - не видел ни одного примера.

Отчего же! Далеко ходить не надо. Как Вы наверняка хорошо помните, некоторое время назад наш форум существовал по адресу http://www.referent.ru:2008/nvs/forum . Так вот, число 2008 здесь означает как раз нестандартный номер порта для протокола HTTP. Эта уловка позволяла сосуществовать на Референт.Ру нескольким однотипным форумам: по тому же адресу работал тот же самый движок, но с портами 2003, 2006, и, кажется, еще и другими.

Посему... покорнейше прошу отменить вынесенный мне выше приговор!

С уважением.



Рейтинг@Mail.ru Rambler's Top100