The server calculates and keeps the true state.

Each client gets updates from the server, and then calculates in-between physics until the next server update, to make it appear flowing.

When players move characters forward, it moves forward on the client, and sends to the server too (the keypress/action), then the server sends back the true state of your character, and client takes the average, smoothing it out. The result looks and feels pretty smooth altho not as nice as single player!