ietf-asrg
[Top] [All Lists]

Re: [Asrg] Ban the bounce; improved challenge-response systems

2003-04-08 03:23:40
Vernon Schryver <vjs(_at_)calcite(_dot_)rhyolite(_dot_)com> schrieb/wrote:
It might help to paint the duplicate problem explicitly:

You have to add some steps:

   SMTP client                       SMTP server
1.   send("DATA\r\n"
          msg text
          "\r\n.\r\n")     -->
2.                                      recv(msg)
                                        (delay for spam filtering etc)

                   (network dies, server crashes, whatever)

  2a.                                     (message written
                                          to spool)

                (network between client & server dies)

3.                        <--           send("250 OK")
4.                                      close()
5.         (gets error on recv())       (gets error on close())

At this point, the SMTP server has no idea whether the SMTP client heard
the "250 OK",  and so the SMTP server cannot know whether to deliver or
discard the message.  The SMTP client has no idea whether the server
sent "250 OK", "5yz reject", or crashed, and so the SMTP client cannot
know whether to send again.  No matter what the client and server decide,
there will be cases of duplicate or lost mesages.

Well, you have to err on the safe side: As a client, unless you have  
positivly seen the "250 OK", you have to resend. As a server, you have  
to deliver the message if you sent the "250 OK".
So lost messages should not occur (although they reportedly do due to  
broken servers).

The more time between step #2 and step #3, the more likely this
 problem becomes.

If the problem occurs between #2 and #2a, the method above will not  
result in duplicates: The server has not taken over responsibility for  
the message and the client will just send it again.

Only between #2a and #3 is it impossible to avoid duplicates.

Claus
-- 
http://www.faerber.muc.de/
_______________________________________________
Asrg mailing list
Asrg(_at_)ietf(_dot_)org
https://www1.ietf.org/mailman/listinfo/asrg



<Prev in Thread] Current Thread [Next in Thread>