The problem is that, at it`s core, the program`s running on a single thread - if the information required to advance your gamestate is somehow lagging behind (packet losses, latency, for instance) it won`t advance your gamestate until it gets that missing information, and if it doesn`t advance the gamestate, it will cease to render additional frames, due to the single-threaded nature of it.
That`s why you`ll start to notice massive fps drops in conjunction with a bad connection, because the game will simply cease to render frames should a game-state stall (due to lack of information) occur.