From: chewygumstix <dan...@lm...> - 2008-12-11 22:51:49
|
I've got an application that is communicating via UDP multicast and when I send large messages ~9kb I pretty much always lose packet fragments. I can verify this using wireshark and tcpdump and sure enough the last one or two packets get lost every time if I send a message containing 6 or more fragments. If the message contains only 5 fragments it gets received every time. Yes I know that UDP messages of this size are a bad idea and I plan to rework them, but it's the principle of the matter that this behavior is very repeatable that bothers me. Is there anything I can do as far as system setup/configuration to help prevent lost packets for large fragmented messages? Thanks -- View this message in context: http://www.nabble.com/Losing-Packets-on-Large-UDP-Messages-tp20964977p20964977.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Takashi <ec...@ya...> - 2008-12-13 05:55:00
|
Your problem has little to do with gumstix's hardware, it's more about software. So perhaps this is not the best forum for your question. Anyway, the problem is likely to caused by a buffer overflow problem at the receiving end. Remember that when a packet (or its fragments) is received, it is stored in a recv socket buffer, waiting for the application (i.e. C or Java) to read. If the reading rate is slower than the receving rate, you have a buffer overflow and packets will be lost. What you need to do is - at the receiving end - change the socket buffer size. This should help. However, it does depend on how frequent your sender sends out these large (fragmented) packets, and it also depends on how fast the receiving end is capable of extracting these fragments from its socket buffer. If the sender is sending large packets at a rapid rate that is too much to be coped with by the receiving end, there is nothing that can be done. This is the nature of UDP. For future details, look at: http://www.29west.com/docs/THPM/udp-buffer-sizing.html -- View this message in context: http://www.nabble.com/Losing-Packets-on-Large-UDP-Messages-tp20964977p20987742.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: chewygumstix <dan...@lm...> - 2008-12-16 18:22:44
|
No luck. I'm still losing the last couple of fragments on messages over ~9000 bytes. These large packets are very infrequent. Probably only getting one every couple of minutes. -- View this message in context: http://www.nabble.com/Losing-Packets-on-Large-UDP-Messages-tp20964977p21038753.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Takashi <ec...@ya...> - 2008-12-17 21:50:52
|
Hi chewygumstix, What's actually carried in the packet? Binary data/text data... etc? Could you "break up" the data into small chunks, and send them individually? In this case, you can avoid fragmentation. For example: Originally, UDP packet was 9000 bytes (i.e. byte#0 to byte#8999) Now, break it up and send the chunks in individual UDP packets: UDP packet 1 (ID:#0): byte#0 - byte#1499 UDP packet 2 (ID:#1): byte#1499 to byte#3499 ... and so on, and re-assembly these UDP packets at the application layer at the receiving end. If packet drop is not acceptable but multicast is a must, then you should also have a application-layer checking mechanism that checks the ID number of each received UDP packet, and forces the sender to re-send a missing UDP packet. Theoritically, breaking up data and sending as individual (smaller) UDP packets adds more overhead; but it's not really that important in your case since your large UDP packets are less often. -- View this message in context: http://www.nabble.com/Losing-Packets-on-Large-UDP-Messages-tp20964977p21062168.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Gerhard H. <Ger...@pe...> - 2009-07-10 08:37:36
|
Hi chewygumstix, I am sure you managed it in the meantime, but I would like some other ideas: 1) inceasing the Linux UDP buffer might help (see http://www.29west.com/docs/THPM/udp-buffer-sizing.html) 2) changing to TCP would solve the problem as well, but costs more ressources cheers Gerhard -- View this message in context: http://www.nabble.com/Losing-Packets-on-Large-UDP-Messages-tp20964977p24423656.html Sent from the Gumstix mailing list archive at Nabble.com. |