reliabilty of sending data revisited (was: [jdev] tcp acknowledged sequence number)
Tijl Houtbeckers
thoutbeckers at splendo.com
Tue Oct 12 13:58:53 CDT 2004
(Crossposted to SJIG, since this involves protocol dev, orginal thread at:
https://www.jabber.org/jdev/2004-October/019398.html )
On Tue, 12 Oct 2004 20:17:40 +0200, Jacek Konieczny <jajcus at bnet.pl> wrote:
>
> On Tue, Oct 12, 2004 at 09:31:46PM +0400, Alexey Nezhdanov wrote:
>> When time out will be hit - connection will broke so I need to know
>> wich packet was delivered last and wich were just dropped by tcp/ip
>> stack to
>> re-send them later when client come back online.
>
> You may always use one of the JEPs providing delivery notifications
> (JEP-12 or JEP-79) provided the recipient client supports the extension.
I assume you mean JEP-22 instead of 12. I've read JEP-79 a few more times
when it was in last call, and it doesn't seem to me like it's meant to
provide delivery notifications. It's only meant to provide notifications
when your delivery condition is NOT matched. AMP is also meant just for
servers, not clients and AMP SHOULD give an error (and drop your packet)
or notification (and route your packets) -depending on what you specified
with AMP- when a server tries to route your packet to another server that
does not support AMP.
So AMP will just make sure your message is treated correctly (doesn't go
to the wrong resource or storage etc.) and you'll get a notification or
error when it's not. But even when one AMP server sends a message to
another AMP server the message can still get lost, or indeed the
notification/error itself can get lost. You'll still need hop to hop
reliability or use and end-to-end solution like JEP-22. But such an
end-to-end solution is a lot more work for a client to implement, and only
works for messages. The advantage being it will work anywhere anytime no
matter what your server version is. Also JEP-22 is not standards-track
(yet?). And I wonder how many clients that use JEP-22 for "composing" also
support also support delivery notifications (that might make disco a
little hard)
What I think would be usefull start is a hop-to-hop mechanism like JEP-ACK
(securing every stanza) and a new AMP delivery condition that will notify
you / give an error when your message is routed onto a path with no
JEP-ACK availiable and one for when delivery fails.
This would covers messages (obviously), IQ queries already have their
mechinism (though this could speed it up a bit), and presence really just
needs to reach your own server so that's just one "hop" (from there on
it's the servers' problems). This way you can still communicate with
everyone and benefit from reliability where it's available, and you'll be
warned when there is a potential "black hole" in the path.
It's no substition for true end-to-end reliability, just once delivery
etc. but it would make the network a lot more robust.
> Any other solution (when the client doesn't notify delivery success)
> will not be 100% reliable. TCP ack doesn't mean the client read the data
> from the socket buffer or its internall IO buffer.
Very true. Plus there is no way to know if the other side on a
bi-directional socket has acces to / uses simuliar techniques.
More information about the JDev
mailing list