Like all multiplayer games based on Valve's Source Engine, Team Fortress 2 uses a client-server model. The client is the copy of the game running on a player's computer, while the server is the software which players connect to. There are currently several thousand Team Fortress 2 servers running worldwide.
A server is responsible for many aspects of Team Fortress 2 gameplay. It responds to players' actions by updating their respective locations and states, e.g. firing a weapon, before determining an appropriate response, e.g. dealing damage to a target, and then broadcasting the results to the players, e.g. displaying a damage dealt value. The server also handles events that are not controlled by players, e.g. map time, Sentry Gun behavior, etc.
Instead of joining an existing server, players can opt to create their own servers to host the game. This can allow the host player to set the map rotation, determining which particular maps and subsequent game modes are played. Additionally, other built-in settings can be altered, such as gravity, class slot limit, Highlander limitations, and so on. Custom modifications may also be installed on the server to provide alternate gameplay.
There are 2 types of servers that can be run using the Source engine.
A Listen Server is a basic server running within a player's TF2 client. It can be easily created through selecting the Create Server button at the main menu. Other players can connect to the server, but the overhead of running a regular client on the same system will often strain the host player's hardware. These types of servers are best suited to LAN-based events.
A Dedicated Server is a standalone server that does not require Steam to run. Dedicated servers are preferred due to decreased overhead, among other factors. Additionally, many dedicated servers are run on high-end hardware in data centers, providing high performance and fast, reliable connections to players, which can seldom be guaranteed on residential connections. Dedicated servers often run on ports 27000 to 27050, but mainly port 27015.
While GSPs (Game Server Providers) generally use high-end dedicated hardware to run game servers, anybody can create a server by using a computer running:
- Mac OS X 10.5.8 or 10.6.3 and higher meeting the game's requirements.
- Windows XP or higher meeting the game's requirements.
- GNU/Linux (x86 or amd64) running glibc 2.3.2 or later.
- FreeBSD (x86 or amd64) running the Linux compatibility code in the kernel and a recent base Linux system from the ports collection.
- Windows 2000 or later.
- Linux Dedicated Server beta release.
- The affinity of the main thread is not set explicitly for dedicated servers. This will properly load balance multiple instances of the dedicated server running on a multi-processor machine. The affinity is still set to CPU 1 for clients and listen servers.
- Removed mp_friendlyfire cvar for servers. Team Fortress 2 breaks in a number of ways if this is on.
- Fixed rare server crash due to data corruption in networking.
- Fixed server crash related to Spy Sappers.
- Extra options added to 'Game' tab in "Create server" menu option.
- Improved startup network initialization to catch issues with server firewalls popping up in the background.
- Fixed issues on Dustbowl and Hydro that could occur when a server emptied in the middle of a round.
- Fixed honeypot server problems.
- Added sv_pure to the server, currently defaults to off. Type "sv_pure" in the console to get the full description.
- Added server log entries for: Round_Start, Round_Setup_Begin, Round_Setup_End, Round_Overtime, Round_SuddenDeath, Round_Stalemate, Round_Win, Round_Length, Mini_Round_Selected, Mini_Round_Start, Mini_Round_Win, and Mini_Round_Length.
- Server log entries for Round_Win and level changes will now detail the team scores and player counts.
- Updated server log entries for flag captures to detail the number of captures and the tf_flag_caps_per_round value.
- Fixed Windows dedicated server running in -console mode moves its window to the front instead of the back upon startup.
- Fixed Windows dedicated server bug (in -console mode) where typing anything in the console window was slow and tedious.
- Fixed an error when updating name of 32nd player on server.
- Sudden death mode is now a server option (a convar) and defaults to OFF.
- Fixed an rcon/console command that could cause server crashes.
- Fixed a rare crash that can happen when a player being healed leaves the server suddenly.
- Added the ability for servers to have map-specific .cfg files in the cfg folder.
- Added player position data to server logging of events (player_death, player_builtobject, teamplay_flag_event, object_destroyed, teamplay_point_captured, teamplay_capture_blocked).
- Added an option in the Options -> Multiplayer dialog to filter custom game files being downloaded from servers.
- Added "nextlevel" server cvar. If set to a valid map name, server will change to that map during the next changelevel.
- Added server log entry for buildings destroyed by their owner.
- Fixed idle players not being kicked from the server if mp_allowspectators was set to 0.
- Game server will now try 32 sequential ports to start up on if they are all originating on the same machine. Previously it would stop at 10.
- Fixed server crash with mp_forcecamera set to 1 (reverted to pre-release behavior).
- Fixed the SourceTV changes not working unless servers launched with +tv_enable 1 in the command line.
- Servers can now specify metatags describing the custom rules they've adopted.
- Added options for servers who want to become custom games: Disable Critical hits (tf_weapon_criticals), eliminate respawn times (mp_disable_respawn_times), and raise maxplayers above 24.
- Made several improvements to server-side stat reporting (not related to individual player stats).
- Fixed "-maxplayers" on the command line not correctly setting the maxplayers value for the server.
- Removed sv_alltalk from the list of convars that affect custom server tags.
- Fixed servers with maxplayers <= 24 that are running SourceTV having the "increased_maxplayers" tag added for their server.
- Fixed Linux dedicated server map load problems on certain Athlon processors.
- Fixed Linux build not handling FCVAR_REPLICATED and FCVAR_NOTIFY cvars correctly.
- Plugged an exploit where the server could send executable code to the client.
- Added mp_stalemate_at_timelimit ConVar for server admin to allow SuddenDeath when mp_timelimit hits on non-Valve maps.
- Fixed problem that was preventing some dedicated servers from uploading gamestats.
- Fixed Linux dedicated server crash on map change.
- Fixed clients being able to trigger sv_soundscape_printdebuginfo on the server.
- Fixed potential "nuke" exploit in rcon subsystem.
- Fixed _resetgamestats command causing server crash.
- Improved connection logic to help servers that aren't automatically reconnecting to Steam.
- Fixed setinfo exploit that allowed restricted convars to be set while connected to a server.
- Fixed "sensitivity" ConVar not capping the upper value which sometimes caused a server crash.
- Added client/server version check on client connect.
- Fixed a case where servers could get stuck in an infinite loop while spawning bots.
- Fixed a server crash related to carrying buildings at round start.
- Improved the version mismatch error message received when connecting to a server with a different version than your client.
- Fixed a server crash exploit caused by malformed network packets.
February 24, 2011 Patch (Community Map Pack Update)
- Fixed another server crash exploit caused by malformed network packets.
- [Undocumented] Fixed trades only displaying one of the items traded to the server.
March 10, 2011 Patch (Shogun Pack)
- Added check to prevent multiplayer servers from transmitting 1 as their maxplayers value to connecting clients.
- Fixed clients being able to use particle exploits on sv_pure servers.
- Fixed a server crash caused by using the Half-Zatoichi to hit someone not holding a weapon.
- Fixed a server crash caused by the server triggering a nextlevel vote.
- Fixed a server crash that could occur if TFBots were used across map changes.
- Replay publishing system will try to do a rename for local HTTP mode but will manually copy and delete the file if the rename fails, which can happen if the source and destination are on different volumes.
- Fixed threading issues on Linux, which was causing major lag spikes.
- Fixed replay data cleanup system, which cleans up stale data at the end of each round. This asynchronous operation can be explicitly invoked by executing a replay_docleanup command on the server.
- Fixed a server lockup during data cleanup.
- Fixed a server crash caused by a mismatched items schema.
- Fixed a few server crashes caused by the replay system.
- Fixed a server crash caused by the vote system.
- Fixed a server crash caused by the replay system.
- Fixed a server crash caused by disguising Spies.
- Fixed a server crash on startup caused by writing to the console.
- Fixed a server crash triggered during entity cleanup.
- Added a server console message when a player is sent to the server via the matchmaking system.
- Fixed a Linux dedicated server crash in vphysics.so
- Fixed a damage calculation in the Mantreads on Linux server, which could cause a physics crash.
- Fixed a server crash exploit caused by invalid player viewangles.
- Fixed a frequent server crash related to packfiles.
October 18, 2011 Patch #2
- Fixed a server error about unprecached models.
- Adjusted error messages on servers when players drop due to Steam authentication failure to be more clear.
- Additional important server messages now go to the server log instead of just the console.
- Fixed a server crash caused by Holiday Punch critical attacks on physics objects.
- Fixed dedicated server not receiving restart requests when updates are released.
+randommapnot working correctly on server startup.
- Fixed dedicated server console spew related to the Replay client and viewangles.
- Fixed a client crash that could occur when a server used
SetCustomModelto change the player model.
- Fixed a bug that sometimes prevented servers from reconnecting to the item server after dropping connection.
- Added changelevel_next server command which changes to the next map in the map cycle.
June 27, 2012 Patch (Pyromania Update)
- Added ConVars
sv_rcon_maxpacketbansto allow server admins to control the maximum RCON packet size and whether or not users get banned for exceeding that limit. The defaults reflect the existing behavior.
- Fixed map triggered annotation events not working on dedicated servers.
- Votes created by a dedicated server no longer trigger a failed vote cooldown.
- Using a Name Tag while in game notifies everyone of the name change.
- [Undocumented] Servers no longer require a restart during the full moon period to allow players to equip Halloween items.
- Fixed a problem that allowed spoofed IP addresses to make connections to the game server.
- Fixed a client/server crash when re-connecting to the item server.
sv_namechange_cooldown_seconds, to throttle clients from changing their name too rapidly. (Defaults to 20 seconds)
sv_netspike_on_reliable_snapshot_overflowto selectively enable the automatic dumping of netspike file if a client drops due to "reliable snapshot overflow". (defaults to 0, which disables the debugging)
- Added check to prevent player names from containing color codes.
- Fix a bug that caused gameservers to not properly receive client inventory updates. (Frequent cause of the "The server you are playing on has lost connection to the item server" error message.)
- Fixed dedicated servers not being able to set
- Fix server crash bug caused by setting
tf_mm_servermodebefore map command.
- Updated the dedicated server to exit when attempting to start a Mann vs. Machine map with less than 32 maxplayers.
mp_timelimitcausing Mann vs. Machine mode to not reset properly when the defenders lose.
- Updated the matchmaking ConVar
- A value of 2 will hide the server from the server browser but will still allow direct connections.
August 17, 2012 Patch #2
- Fixed a bug where rejected players could leave a "ghost" player that takes up a slot on the server browser.
- Fixed a rare server crash when firing hitscan weapons.
- Added a command "
kickall" which kicks all connected clients except for replay, HLTV, and the listenserver host if applicable.
- Fixed a bug that allowed malicious servers to execute restricted console commands on players.
- Fixed a bug that allowed malicious servers to prevent players from executing console commands.
- Fixed a server crash related to Demoman bot AI.
- Community requests:
- Add a new server ConVar "
tf_avoidteammates_pushaway" to control whether or not teammates push each other away when occupying the same space.
- Add a new server ConVar "
tf_arena_override_team_size" to allow server owners to set the maximum team size in arena mode.
- Add a new server ConVar "
September 21, 2012 Patch #2
- Fixed bug causing gameservers to report themselves as full to the matchmaking system.
- Fixed a server crash that could occur if a Spy was disguised holding the Gunslinger.
- Fixed a Linux dedicated server crash related to Mann vs. Machine.
- Fixed a dedicated server hang in bot pathfinding
- Fixed a server crash related to game stats.
- Prevent game servers from opening the MOTD panel more than once if the player connected through matchmaking or quickplay
- Improved performance of Linux dedicated server binaries
- Disabled plug-ins that would allow users to connect to secure game servers even when -insecure is specified on the command line.
- Added ConVar sv_motd_unload_on_dismissal to allow server ops to control the default behavior of their MOTD.
- [Undocumented] Fixed server, client, and engine problems.
- Fixed a dedicated server crash related to invalid client commands.
- Fixed a rare client crash related to community server mods.
- Fixed servers not being able to load Mann vs. Machine .pop files for workshop maps.
- Source Dedicated Server on the Valve Developer Community
- Setting up a Steam Source Dedicated Server – Steam Support site