Re: Re: connection is broken - держаться больше нету сил!

От: Iliya Peregoudov <CGatePro_at_mx_ru>
Дата: Sat 24 Dec 2005 - 15:07:27 MSK

Maxim Cherniavsky wrote:
>>>
>>> Т.е приходит подряд два ответа, что на мой вгляд ничему не
>>> противоречит (rfc 2821)
>>>
>>> An SMTP server MUST NOT intentionally close the connection except:
>>>
>>> - After receiving a QUIT command and responding with a 221 reply.
>>>
>>> - After detecting the need to shut down the SMTP service and
>>> returning a 421 response code. This response code can be issued
>>> after the server receives any command or, if necessary,
>>> asynchronously from command receipt (on the assumption that the
>>> client will receive it after the next command is issued).
>>> ключевое слово asynchronously что на самом деле и происходит, и по
>>> логам CGP мы видим как будто 421 вернулся на RSET, что на самом деле
>>> не так.

>>
>> Вчитайтесь внимательнее. Это как раз тот самый пример, мягко говоря, 
>> неквалифицировнности - у авторов всяко разных "расширений протоколов".
> 
> Ну какое расширение то? В 821ой тоже было про 421 вообще на любую 
> команду, в разделе sequence of commands
> 

На стр. 36 [RFC822] написано: 421 <domain> Service not available, closing transmission channel [This may be a reply to any command if the service knows it must shut down]

На стр. 37 [RFC822] (SEQUENCING OF COMMANDS AND REPLIES) написано: The communication between the sender and receiver is intended to be an alternating dialogue, controlled by the sender. As such, the sender issues a command and the receiver responds with a reply. The sender must wait for this response before sending further commands.

Т.е. автор RFC822 понимал (конечно, понимал, на то он и Postel), что у любого протокола стоит задача корреляции запроса с ответом. Вот про это и комментарий со стр. 37: SMTP -- чёткий диалог, причём сервер в нём -- пассивная сторона. И отвечать сервер должен одним ответом на один запрос. Если уж так хочется ответить 421, будь добр дождаться запроса. Но не любого, поскольку на QUIT и TURN отвечать 421 нельзя (согласно стр. 38).

Почему так важна чёткая корреляция запросов с ответами? Пример:

C: MAIL, RCPT, RCPT
S: 250, 451, 421

Какой из адресов-реципиентов отлупляет сервер своим третьим ответом? По привычной логике -- второго, и тут привычная логика совпадает с RFC822. По логике RFC2822 -- первого. На самом деле, не так уж важно, закрыл сервер сессию молча, или плюнул перед этим 421, он её закрыл. Причём не по команде клиента. И клиент это должен расценивать однозначно -- сервер не хочет с ним говорить, зазорным считает.

В вашем случае надо просто добиться того, чтобы SMTP сервер не закрывал сессию.

Если SMTP сервер закрывает сессию из-за того, что в сессии слишком много отлупов, надо найти способ заставить клиент организовывать сессии покороче. Есть ли в CGP настройки для ограничения количества MAIL/RCPT, выдаваемых в одной сессии?

Если SMTP сервер закрывает сессию из-за того, что словил 1 письмо с вирусом, в топку такой сервер. Если же он делает это только после ловли N писем с вирусами в одной сесии -- решение опять же в укорочении сессий с этим сервером.

Iliya Peregoudov <iperegudov at cboss dot ru> Получено Sat Dec 24 12:07:29 2005

Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:14:39 MSK