Network Saturation with Ack Ping Pong from Client to Server

Engine 4.17.1 Source build:

I’ve been tracking down a strange networking saturation condition with

“void UNetConnection::ReceivedPacket( FBitReader& Reader )”

I seem to be getting into a race condition where the client will send and Ack packet to the server and the Server will send an Ack packet back to the client for that packet… creating a recursive Ack Ping Pong that is saturating the network not allowing Actor replication. There isn’t much documentation on how the flow is supposed to happen.

As a test, i modified the code so that server doesn’t send that Ack back to the client and the network was no longer saturated and all my actors are getting replicated without even 1 saturation notification… At this point I feel like there is a possible bug here. I would like to know more information to proceed, and i want to avoid increasing my configs MaxClientRate and InternetSpeed.

I was hoping to get someone who knew the Ack design maybe Crzyhomer or Josh M from the networking team? Thanks for any help!

I’ve done some more digging on this problem and with another project and found that even though both projects run the same almost the same way and code, i’m getting about 6 times the number of Acks sent across the network versus the other project which is not getting the saturation errors.

What would cause the increased Ack Activity between the projects? I’m not able to find any obvious config or difference between the two projects which is running on the same engine build…

Alright, so i figured out why I was getting so many Acks on my netconnection. My frame rate was running at 1100 fps due to the setting “bSmoothFrameRate=False”. After setting it to true it dropped my fps down to 60 and the increased Acks are now gone.

Now, how do I put in a limit on how much the networkconnection is ticked? I know there is NetServerMaxTickRate but that doesn’t apply to Beacon Net Drivers just the Game Net Driver