Recently I rent a server and start playing for a while, but as soon as I bred animals in medium to large quantities (around 100 in total), the server disconnected me.
I checked the server log which says:
lost connection: TranslatableComponent{key='disconnect.timeout', args=[], siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null, insertion=null}}
I assumed I lagged out, so I checked the used bandwidth whilst playing and it kept using all my upload for no reason. Next thing I did I checked the traffic with Wireshark (see in the first and second picture) more than 1000 ACK packets per second, all of them 54 bytes long clogging my limited 70kBytes upload rate (they sum up to more than 54kbyte/s). Other way round I received the same amount of packets (thats what all the ACK packets are for) with usable data being between 6 and 12 bytes; the problem: every packet is around 100 bytes long what means that 90% of the data is not usable for minecraft at all. Due to that excessive amount of ACK packets for every 6-12 byte data packet (I assume movement/position update packets) I keep lagging out and disconnecting from that server.
Picture 1 shows the traffic from my client to the server. (notice the time and the frame no.)
Picture 2 shows the traffic from the server to my client. (The last packets are the ones that send the disconnect message I think) Also you can see the "Len=*" which is the actual data being sent without the overhead TCP produces.
So in conclusion I cannot play on a server with more that like 100-200 entities around me because it will spam me with update packets.
Linked issues
is duplicated by 1
Attachments
Comments 7
Not a bug, but working by desgin.
The only alternative is setting of the option TCP_NODELAY where consecutive ACKs get accumulated, but the drawback is lag. You don't want to wait several hundreds of milliseconds after pressing a key to get a reaction from the server.
Well then, I think sending one packet per entity per tick is creating too much overhead (100 entities * 20 ticks = 2000 packets * ~100bytes = 200kBytes to the client and 2000 * ~54bytes ACK = 108kBytes, which I don't have; i only have 70kBytes) but I look forward to the next versions, maybe there is something done about that.
I am playing on a Minecraft Realm with considerable lag and disconnects. I noticed that all my upstream traffic was used (if I went to a big cow farm) and I think it is for the same reason as the issue.
May I politly request to consider re-opening this issue?
By accumulating not all but some packages (for example all packages within a 0.05 sec window) one could maybe find a solution without lag but greatly reduced package count. (1 package per 0.05 sec would reduce the package count in this example from 1000 to 20.)
Furthermore, I think that Mojang would benefit as well, since they pay for the traffic at their end, that is at the server.
@unknown the TCP behavior is by design, but I think the issue is real and could be avoided if the server did not send a packet per entity but instead batched up the entity updates each tick, yes? I am sure there are various performance and logistical trade-offs with different wire formats, but at a glance it smells to me like there could be a better Minecraft wire format which would do some amount of batching. I feel this bug should be re-opened.
@Sonic I don't think so. I don't get such an error message. My problem is completely different from the one you linked.