UDP fragmentation #1058
Replies: 50 comments 1 reply
-
Wie will have multiple server lists in the near future. Each list size can even be further reduced to, e.g., 100 or less servers. This will solve the issue. |
Beta Was this translation helpful? Give feedback.
-
Users reported not long ago that NorthAmerica list worked but not the Default. At that time the NorthAmerica list already had about 100 entries so I assume that this will work. |
Beta Was this translation helpful? Give feedback.
-
IMHO protocol implementation issues shouldn't dictate the size of the server list and force a fragmentation into multiple central servers. This is really a bad design. Before I read this issue I already wondered (as a user who discovered Jamulus) why there is a limit of 200. I don't know the the code and the protocol, so I don't know how hard or easy it is to change it (compatibility to older clients and servers,...). There is also QUIC as an alternative to TCP and plain UDP. QUIC also would make it possible to connect with a web client in the future. |
Beta Was this translation helpful? Give feedback.
-
Well, it worked remarkably well the last 14 years ;-).
The large server list does not only have UDP fragmentation issues but others as well. E.g. the client pings all the servers in the list every some seconds. This is a fundamental thing. It is much better to have multiple small lists. |
Beta Was this translation helpful? Give feedback.
-
I wonder why there is an open issue about it, if it still works well. ;) |
Beta Was this translation helpful? Give feedback.
-
Well, it seems you are a bit impatient ;-) |
Beta Was this translation helpful? Give feedback.
-
I made this comment a couple of days ago on sourceforge but was redirected here. Hi Guys, Help please. I'm in the US, and getting erratic connect lists. Sometimes it's full lists, sometimes partial lists, and most often no lists. Loading with --showallservers the servers with ping times, and not all have them, look a lot like the partial lists, when they show up at all. Most times it works the first time after a boot. Simply closing Jamulus and reopening it does not re-enable server lists. Once it quits giving lists it's done until a reboot. Older 8 core computer @4ghz, 16gb ram, but poky DSL, although far faster than spec minimums. Any suggestions, ports I should look at, etc are appreciated. Other than connection issues I'm a fan, Jamulus has let me keep up with band members and musician friends while we're sequestered. Thank you. ps. a fellow on sourceforge embraced the idea of turning off the stateful packet inspection portion of a users firewall and indicated he was going to add it to the Wiki Jamulus post. Doesn't seem like a great idea. https://sourceforge.net/p/llcon/discussion/533517/thread/0e9aa52428/?page=1 Thanks for your help. |
Beta Was this translation helpful? Give feedback.
-
@lefty665 The forthcoming update (3.5.4) implements a feature designed to help with the issue of seeing fewer servers than you should. This may or may not cure it, but it would be good if you could test it out. Watch out for the release announcement. As to the firewall issue, I see they have replied to that, but essentially you will be safe without SPI unless you are doing something pretty non-standard with your network. In which case you would know whether you need SPI or not. |
Beta Was this translation helpful? Give feedback.
-
Do you always see the full list if you use --showallservers (ignoring that not all servers have a ping time)? |
Beta Was this translation helpful? Give feedback.
-
That's certainly my own experience. Would be interesting to know about others. |
Beta Was this translation helpful? Give feedback.
-
If this is the case, then we are in the wrong Github Issue here. Because if you see the full list with --showallservers, you are not affected by the UDP fragmentation issue (see the title of this Issue) since you can receive the complete list. It is then an issue with the ping messages which are suppressed. |
Beta Was this translation helpful? Give feedback.
-
Ah OK. I thought the two things were connected. |
Beta Was this translation helpful? Give feedback.
-
No, it will show a full list once, occasionally twice, then a blank data list until it is rebooted. If I had to guess it would more likely be a ping issue. Jamulus apparently generates a lot of pings. Could it be overrunning a buffer or exceeding a threshold? But, that's just guesses from what I can see, not an informed opinion from getting my nose in the code. Thank you for your response, and for Jamulus. |
Beta Was this translation helpful? Give feedback.
-
I'll look for 3.54, thank you. In reference to the firewall issue, I don't see that response, please be kind enough to direct me to it. - I found your response on sourceforge. My response is "horsefeathers". Your explanation of web threats is naïve at best. Having both hardware/router and software/os firewalls is entry level web security. I do see from the wiki that recommending disabling SPI is now included. SPI is a fundamental feature of many better router firewalls. It is concerning that you would recommend disabling it to a user community that is often not well versed in web threats. In addition to potential damage to user computers your recommendation to trusting users creates potential liability for damages they may incur. I encourage you to remove that recommendation. Tell me please, is Jamulus "doing something pretty non-standard with your network" traffic that would run afoul of SPI? Thanks. https://en.wikipedia.org/wiki/Stateful_firewall |
Beta Was this translation helpful? Give feedback.
-
That discussion isn't relevant to this ticket. Please continue it on the forum thread. |
Beta Was this translation helpful? Give feedback.
-
If the mouse pointer is located over the table, the list is not sorted. So you have to move the mouse pointer away from the list so that it is getting sorted. |
Beta Was this translation helpful? Give feedback.
-
Thanks, guess I've been too compulsive with the mouse, scrolling up and
down the unsorted table cursing and looking for low ping times. ;-)
…On 10/15/2020 11:33 AM, Volker Fischer wrote:
either not sorting by ping time
If the mouse pointer is located over the table, the list is not
sorted. So you have to move the mouse pointer away from the list so
that it is getting sorted.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#255 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/APWAKF5EZJ6YNN4GJJSSNU3SK4I6JANCNFSM4NGY5CNA>.
--
This email has been checked for viruses by AVG.
https://www.avg.com
|
Beta Was this translation helpful? Give feedback.
-
Hi Volker, Moving the mouse worked, thanks again for the heads up.
Curious note. Not only does the mouse have to move off the server data
list, but it also has to move entirely off the connect object so it
loses focus before the table will sort. Then the sorted list appears
quickly (nice optimization you've done there!) but the mouse has to move
back onto the connect object and then onto the data list so it can
regain focus before a server selection can be made.
Objects, pains in the butt, but wouldn't want to live without them.
Again, thanks for Jamulus and all you do. We had another good session
this evening with pickers including two of us in Virginia, one in
Maryland, one in Canada and another in Michigan on a server in the D.C.
area. That's probably a 500-600 mile spread and delay was only slightly
pesky. Good stuff.
Regards,
Cliff
…On 10/22/2020 12:52 PM, Cliff Rowland wrote:
Thanks, guess I've been too compulsive with the mouse, scrolling up
and down the unsorted table cursing and looking for low ping times. ;-)
On 10/15/2020 11:33 AM, Volker Fischer wrote:
>
> either not sorting by ping time
>
> If the mouse pointer is located over the table, the list is not
> sorted. So you have to move the mouse pointer away from the list so
> that it is getting sorted.
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#255 (comment)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/APWAKF5EZJ6YNN4GJJSSNU3SK4I6JANCNFSM4NGY5CNA>.
>
--
This email has been checked for viruses by AVG.
https://www.avg.com
|
Beta Was this translation helpful? Give feedback.
-
A long time ago I posted a question which is still open:
Is there anybody who can comment on that? |
Beta Was this translation helpful? Give feedback.
-
I have just now reviewed this topic and all the discussion. In my opinion: |
Beta Was this translation helpful? Give feedback.
-
Yes, Jamulus already tries over and over again to receive the list if it is not yet received. The problem for some people was that they never got any list. In your case, you get the list at some point in time. |
Beta Was this translation helpful? Give feedback.
-
When retrieving the whole list fails, does Jamulus have a method to retrieve the list in parts? I was fishing for the distinction for (a) the retrieval only succeeds if the whole list arrives vs (b) if one of the UDP packets is lost, just the lost packet (or lost part of the table) is retried. When the probability of losing UDP packets is significant, then (b) has a better success rate. (b) is also much more tolerant of fragmentation (i.e. having lots of small packets). |
Beta Was this translation helpful? Give feedback.
-
Sorry, just got back into this discussion. Just a few comments on the above:
@corrados I haven't done any detailed Wireshark analysis of the reduced server list, because I have no problem with receiving and processing fragmented IP packets. I think I did look at it once when first implemented, and noted that it resulted in fewer fragments, but still did require fragmentation. |
Beta Was this translation helpful? Give feedback.
-
@softins Thanks... I forgot some of the details about the router configuration. |
Beta Was this translation helpful? Give feedback.
-
Thanks for the feedback. Yes, we still get fragmented packets but the hope is that we get fewer fragments and therefore fewer problems. Looking at the Jamulus discussion forums and Facebook groups, it seems that the complains about empty lists have not shown up recently (at least what I wrote) which is a good sign. |
Beta Was this translation helpful? Give feedback.
-
No list was my issue. While I had no router settings that would
ameliorate the problem, rebooting the router would. Thankfully that is
rarely needed since your updates.
Thanks again,
Cliff
…On 1/4/2021 12:01 PM, Volker Fischer wrote:
Yes, Jamulus already tries over and over again to receive the list if
it is not yet received. The problem for some people was that they
never got any list. In your case, you get the list at some point in time.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#255 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/APWAKFYH2QKCZIFUS6EIJPDSYHX6NANCNFSM4NGY5CNA>.
--
This email has been checked for viruses by AVG.
https://www.avg.com
|
Beta Was this translation helpful? Give feedback.
-
Hi All - I'm moving this to a discussion now until such time as we can firm up some actionable tickets on it. |
Beta Was this translation helpful? Give feedback.
-
It seems that a lot of systems are blocking fragmented UDP packets and I have no control over them:
Would also 👍 to the idea of TCP-based directory server. (Context: I was trying to deploy a copy of jamulus-php to some serverless providers. It turns out that the reply packets are being blocked for Any Genre 1 and 2, possibly due to the reply being too large…? Finally end up finding a local VPS provider that works, but it’s not serverless.) |
Beta Was this translation helpful? Give feedback.
-
The directory list of servers is the main situation that results in IP fragmentation, but is not the only one. For a large server supporting many tens of clients, the client list can be large enough to need fragmentation too. Back during lockdown, I did see reports from people saying their client list went blank once more than a certain number of people had joined the server. I'm reminded of the DNS protocol, where, if I remember correctly, a DNS server responding to a UDP request can indicate to the client that the response is too large and that the client should retry the request using TCP (I haven't studied the details). Maybe we could implement something similar in Jamulus? Another idea I have wondered about but never tried is using zlib to compress server lists and client lists. There must be a lot of repeated compressible data, which could result in a much smaller payload. But it would probably need new message types to be defined. The TCP fallback idea would probably work best for backward compatibility. |
Beta Was this translation helpful? Give feedback.
-
I just did a test to see how compressible a typical long list of servers from a directory would be. I used the excellent jamulus-python from @passing, and added some test calls to compress the received payload with zlib at different compression levels:
It shows that the directory lists are only moderately compressible, and would still result in UDP fragmentation. So I have discounted that as an avenue to explore, as it would not gain us any advantage. |
Beta Was this translation helpful? Give feedback.
-
https://github.com/corrados/jamulus/blob/017796919c814a74adcf916a6f200e7c157e58f1/ChangeLog#L19
Going down from 200 to 150 won't remove UDP fragmentation. In a Wireshark trace a couple of weeks ago, a list of 198 servers took 8 fragments, which when reassembled had a payload size of 6780 bytes. The fragments in that instance appeared to have an MTU of only 778 bytes, which is something over which neither end has control, as it may be due to an intermediate hop. Even if the path had the maximum possible MTU of 1500 bytes, it would still take around 4 or 5 fragments to send a list of 200 servers.
The only way really to solve it would be for the server also to listen on a TCP port (could use the same port number). A client wanting the server list could then connect to the central server on TCP, fetch the list and then close the connection. Fragmentation should no longer be a problem then.
For backward compatibility, a client could fall back to UDP if the TCP connection was refused, and the central server would still serve UDP requests for the server list if asked.
(Of course, it is only broken or misconfigured routers or computers that do not correctly handle fragmented UDP packets)
Beta Was this translation helpful? Give feedback.
All reactions