> For the complete documentation index, see [llms.txt](https://fish-networking.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models.md).

# Networking Models

## Client-Server architecture

The **client-server model** is the most widely used approach in multiplayer networking. In this model:

* **Server**: The authoritative instance of the game. It manages game logic, synchronizes game state, validates player actions, and handles communication between clients.
* **Client**: A player's instance of the game. It sends input to the server and receives updates about the game state.

There are two main types of servers:

### **Dedicated server**

The server runs as its own process, separate from any player. It’s more secure and scalable, commonly used in competitive or large-scale games.

<figure><img src="/files/o4ysQA6eIAOgrww0Oz5X" alt="An image showing multiple clients connected to a single server" width="563"><figcaption><p>A dedicated server model</p></figcaption></figure>

As you can see from the above diagram, the clients (players) are all connected directly to the server and communicate with it instead of with each other.

***

### **Host (listen-server)**

The server and one of the clients run in the same process. This is common in smaller games or development environments.

<figure><img src="/files/cyqEgdmVQSnohH6EiEnE" alt="An image showing multiple clients connected to a single server which is also acting as a client itself" width="563"><figcaption><p>A listen-server model</p></figcaption></figure>

The above diagram demonstrates how the listen-server is similar to the dedicated server model where all clients connect directly with the server, but unlike the dedicated server, the listen server is also acting as a client (player).

{% hint style="success" %}
FishNet supports both dedicated and listen-server models out of the box.
{% endhint %}

***

## Peer-to-peer (P2P)

In **peer-to-peer networking**, each player (or peer) connects directly to others without a central server. This reduces latency and server costs but comes with challenges:

* Poor security and cheating prevention
* Difficult to synchronize game state reliably
* NAT traversal issues

<figure><img src="/files/Dty6SQlqudN39nyJzrNv" alt="An image of four clients all interconnected with each other." width="563"><figcaption><p>A peer-to-peer model</p></figcaption></figure>

P2P is rarely used in modern real-time multiplayer games, especially competitive ones, due to these drawbacks. FishNet does not use P2P, as it is designed around the client-server model for reliability and security.

{% hint style="info" %}
Very often a listen server setup is referred to as P2P, FishNet does support a listen server.
{% endhint %}

***

## Relay servers

Sometimes clients are unable to connect directly to the server due to **NAT (Network Address Translation)** or **firewall** restrictions. A **relay server** acts as a middleman to forward traffic between clients and the server.

<figure><img src="/files/AGiImTyDGs7NSe3R43dx" alt="An image of a three clients connecting to a server which links them to a server and client instance." width="563"><figcaption><p>A relay server</p></figcaption></figure>

Relay servers:

* Allow connectivity when direct connections fail
* Introduce additional latency
* May be used as a fallback or for web-based games

{% hint style="success" %}
Fish-Networking supports multiple third-party relay services including [Unity's Relay](https://unity.com/products/relay), [Edgegap's Distributed Relay](https://edgegap.com/platform/distributed-relay), [Photon Realtime](https://www.photonengine.com/Realtime), [Epic Online Services' Relay Service](https://dev.epicgames.com/docs/epic-online-services/eos-overview#peer-to-peer-p2p-connections), and [Steam Datagram Relay](https://partner.steamgames.com/doc/features/multiplayer/steamdatagramrelay).

There is also the free self-hosted [BlitzRelay](https://github.com/abdelfattahradwan/blitz-relay) that you can use.
{% endhint %}

***

### Host migration

When using a listen server, the host leaving the game would cause all players to leave the game; **Host migration** is a feature for maintaining game sessions in the event the current host disconnects or experiences network issues. It enables a new host to be elected from the remaining connected players, minimizing disruption and ensuring the game session can continue seamlessly.

{% hint style="warning" %}
Fish-Networking doesn't have built-in host migration, but it is possible (though tricky) to create it yourself.
{% endhint %}
