От mk
К ЛАА
Дата 12.03.2008 12:16:12
Рубрики Прочее;

Re: техническое, про...

> 1. Доступ к NNTP-интерфейсу по порту 80 невозможен. Есть подозрение, что это - изъян текущей конфигурации
> сервера и ситуация не изменится, пока не изменится эта самая конфигурация. Подробности опускаю в силу
> сугубой специфичности предмета.

Незачёт.

Вот смотрите: пара :<порт> однозначно определяет приложение, которому передаются (и от которого
принимаются) данные от соединения. Протоколы HTTP и NNTP принципиально различны. Каким образом Ваше приложение
при работе по одному порту определит, какой именно протокол их вышеперечисленных оно должно использовать с
данным соединением? Теоретически это можно сделать, практически - не видел ни одного примера.

> 2. Тем не менее, сам NNTP-интерфейс прекрасно работает по родному порту 119. Ценность этой работы, видимо,
> невысока,

Ценность этой работы очень высока, ибо есть возможно опять работать с существенной экономией и удобством.

Спасибо!
---
С уважением, Михаил.


От ЛАА
К mk (12.03.2008 12:16:12)
Дата 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, и, кажется, еще и другими.

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

С уважением.

От mk
К ЛАА (12.03.2008 14:22:15)
Дата 12.03.2008 14:43:59

Re: отнюдь

Доброго времени суток!

> В случае HTTP и NNTP именно так и есть - тип протокола можно определить по первой строке запроса и дальше
> работать с ним по этому протоколу - что и реализовано в движке форума.

Дело в том, что стандартный NNTP клиент не посылает запроса до того, как увидит приглашение сервера.
http://nvs.rpf.ru/nvs/forum/2/archive/90/90851.htm

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

Я говорил о реализации HTTP и NNTP с пределах одного приложения и одного порта.

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

Если увижу где-нибудь работающий http-cервер, отвечающий при этом на nntp-запросы - готов отменить.

Ещё раз спасибо!
---
С уважением, Михаил


От ЛАА
К mk (12.03.2008 14:43:59)
Дата 12.03.2008 16:44:03

работа над ошибками

>> В случае HTTP и NNTP именно так и есть - тип протокола можно определить по первой строке запроса и дальше работать с ним по этому протоколу - что и реализовано в движке форума.
>
> Дело в том, что стандартный NNTP клиент не посылает запроса до того, как увидит приглашение сервера.
>
http://nvs.rpf.ru/nvs/forum/2/archive/90/90851.htm

Мда, я поторопился с определениями. Виноват! И тем не менее.

Как показало небольшое расследование, в действительности разделение протоколов в нашем движке происходит несколько иначе. Еще до начала обмена на уровне высоких протоколов HTTP и NNTP, клиент и сервер обмениваются тремя пакетами нижнего протокола TCP для установления сеанса связи. Затем - если клиент инициировал сеанс по протоколу HTTP (другими словами зашел на форум в веб-браузере) - он сразу же вслед за этим посылает запрос "GET /nvs/forum/", инициируя тем самым сеанс HTTP. Если же клиент использует протокол NNTP (нажал кнопочку в почтовой программе), то вслед за установлением сеанса клиент ждет (чувствуете разницу?) строку идентификатора от сервера.

Для различения этих ситуаций движок сервера после установления сеанса ожидает действий клиента в течение 5 секунд. Если за это время от клиента не поступает запрос GET, сервер отправляет ему идентификатор "200 Novik http/news gate ready - posting ok", и это служит началом обмена уже по протоколу NNTP.

Что, в общем, сути дела не меняет.

>>> Теоретически это можно сделать, практически - не видел ни одного примера.
>>
>> Отчего же! Далеко ходить не надо.
>
> Я говорил о реализации HTTP и NNTP с пределах одного приложения и одного порта.
>
>> Посему... покорнейше прошу отменить вынесенный мне выше приговор!
>
> Если увижу где-нибудь работающий http-cервер, отвечающий при этом на nntp-запросы - готов отменить.

Вот, пожалуйста:

http://vif2ne.ru

Там работает почти такой же замечательный движок того же замечательного автора. Вы можете зайти на него по протоколу HTTP через стандартный порт 80, а можете через нестандартный 2003 (тамошние настройки NNTP описаны здесь - http://vif2ne.ru/nvk/forum/0/nntp.htm - соответственно этому документу и используется такой номер порта):

http://vif2ne.ru:80
http://vif2ne.ru:2003

Результат будет (визуально) одинаковый... м-м-м... кроме динамической части страницы.

А потом попробуйте зайти телнетом:

telnet vif2ne.ru 2003

И подождите пять секунд.

...А вот 119 порт там не работает.

С уважением!


От mk
К ЛАА (12.03.2008 16:44:03)
Дата 12.03.2008 17:08:44

Re: работа над...

> Для различения этих ситуаций движок сервера после установления сеанса ожидает действий клиента в течение 5
> секунд.

Вот это - понятно. Но:

>
http://vif2ne.ru:80
> http://vif2ne.ru:2003
>
> Результат будет (визуально) одинаковый... м-м-м... кроме динамической части страницы.

Результат прост: NNTP работает только на порту 2003. На 80-ом - не работает. Дальнейшее (почему) - только
автор скажет.

Взыскание снимается!
---
С уважением, Михаил.


От ЛАА
К mk (12.03.2008 17:08:44)
Дата 13.03.2008 07:39:10

Re: работа над...

> Результат прост: NNTP работает только на порту 2003. На 80-ом - не работает.

Своим примером я хотел показать, что на vif2ne.ru программа движка работает по двум протоколам на одном порту - на 2003. Поскольку номер порта вещь условная и настраиваемая, то ничто не мешает вместо 2003 использовать 80, что до поры до времени и было реализовано у нас и отражено в справке по NNTP.

> Дальнейшее (почему) - только автор скажет.

Можно поковырять ВИФ2НЕ поиском по словам NNTP, 2003 - похоже, причины сложились исторически, от начала тестирования и до сих. Вероятно, пользователей с другими предпочтениями там нашлось немного.

> Взыскание снимается!

Ура!! (прыг, прыг, прыг...)