we are having a server application with app. 150 clients connected. The server application sends out small packets using the TCP/Ip protocol on high speed. We number every packet ourselves and we see the following behaviour : Server sends out : Packet 1 Packet 2 Packet 3 Packet 4 Packet 5 Packet 6 Packet 7 Packet 8
On the tcp/ip protocol, we set the USE_NAGGLE option so that the server sends out packets without waiting on the ACK of the previous packet. What we see in a busy situation at the client side is that following packets are received : Packet 1 Packet 2 Packet 3 Packet 5 with error TCP Previous segment lost Packet 6 Packet 7 Packet 8
Packet 5, 6, 7 and 8 are stuck on the TCP stack?? (I suppose) and not delivered to our application. A while later we get a TCP retransmission message with Packet4 (the lost packet) and packet 5, 6, 7 and 8 together. Ussualy this retransmission comes after app. 400 - 1000 milliseconds. This is a disaster for our application.
My questions are : - can we influence tcp/ip so that packets are delivered to our application even if a previous packet is lost? - can we influence the retransmission time? - what can we do to lower the chanche of packet loss?
All these measurements are done with WireShark network sniffer on reasonable good quality DSL lines.
Development of this software was done with Delphi and Indy 10 components.
It helps us little bit but still no definitive solution. I even think the problem can not be solved because TCP is gauranteed order and that's something we want to avoid.