At the most basic level:
- ClientFire from the centre of the viewport, doing all FX for the client except for third person effects.
- ClientFire makes a call to the server.
- Using the centre of the client viewport as origin, the server calculates where the bullet will land and does all the damage processing.
- Server tells other clients to do FX from the third person model to the calculated trajectory end location.
Every game does stuff slightly differently but follows the same principle.