--- title: "Protocol 47 vs 48 Explained" excerpt: "What the GoldSrc network protocol number means, why non-Steam clients often speak 47 while Steam clients speak 48, and how dproto or Reunion let a server answer both." category: "misc" tags: "protocol, non-steam" image: "" read_time: "8 min read" ---
If some players connect fine and others bounce off your server with "This server is using a different protocol", you are looking at a protocol-version mismatch — almost always the classic 47-versus-48 split. Understanding what those numbers are makes the fix obvious. Here is the whole picture.
The GoldSrc network protocol version is a single integer the client and server exchange when connecting. It identifies the wire format they use to talk — how connect packets, messages, and the handshake are structured. If the client's protocol number does not match what the server accepts, the connection is refused before the player ever loads the map. It is a compatibility handshake, nothing more.
So the mismatch is structural: a non-Steam client built around protocol 47 tries to join a server that only accepts 48, the numbers disagree, and the client is told the server uses a different protocol. The same happens in reverse for a 48-only client hitting a 47-only server.
You do not pick 47 or 48 — you make the server accept both, so 47 and 48 clients can all connect. Two tools do this depending on your engine:
SteamIdHashSalt of at least 16 characters or it refuses to load.With one of these installed and configured, a single server serves the whole audience — Steam players on 48 and older non-Steam players on 47 all get in. The full walkthrough is in making your server accept non-Steam clients, and the specific error is covered in fixing the 47/48 protocol mismatch.
The 2023 anniversary update changed engine and networking behaviour, which shook loose a lot of previously-working non-Steam connections and surfaced protocol errors that had been quietly handled before. Moving to an updated ReHLDS + Reunion stack is the durable answer; rolling the client or server to steam_legacy is the stopgap.
It helps to trace one failed join. The client sends a connect request stamped with its protocol number. The server compares it against the protocols it accepts. On a plain server that number is a single value — 48 for a modern Steam server — and any client whose stamp does not match is rejected immediately with "This server is using a different protocol," before authentication, before the map, before anything. With Reunion or dproto loaded, the server accepts a range of protocol numbers and the appropriate auth path for each, so a 47-stamped connect and a 48-stamped connect are both admitted and routed correctly. From the player's side the difference is stark: same server address, but one build bounces and the other loads — and the only thing that changed is whether the server was taught to speak both protocols. That is why the fix always belongs on the server, never on the individual player's machine.
Have a player who cannot connect read the exact error — "This server is using a different protocol" confirms a protocol mismatch rather than a network fault. On the server, check whether you have non-Steam support loaded: run meta list and look for Reunion (on ReHLDS) in the list. If it is absent and non-Steam players are bouncing, install Reunion (ReHLDS) or dproto (HLDS), set sv_lan 0, and reconnect a 47-era client to confirm it now gets in. Steam clients on 48 should continue to connect unaffected.