{"licence":{"name":"CC BY-SA 4.0","spdx":"CC-BY-SA-4.0","url":"https://creativecommons.org/licenses/by-sa/4.0/","attribution":"Atlas, a bilingual technical dictionary (https://cmaintz.github.io/tech-atlas/)"},"id":"cs/server","url":{"en":"https://cmaintz.github.io/tech-atlas/en/terms/cs/server/","da":"https://cmaintz.github.io/tech-atlas/da/terms/cs/server/"},"term":{"en":"Server","da":"Server"},"aka":{"en":[],"da":[]},"domain":["cs"],"cluster":"networking","layer":"network","status":"current","summary":{"en":"A computer or program that waits for requests over a network and answers them, such as sending a web page or storing email.","da":"En computer eller et program, der venter på forespørgsler over et netværk og besvarer dem, fx ved at sende en webside eller gemme e-mail."},"body":{"formal":{"en":"A program, or the machine running it, that listens on a port for incoming requests from clients and returns responses according to an agreed protocol.","da":"Et program, eller maskinen der kører det, som lytter på en port efter indkommende forespørgsler fra klienter og sender svar tilbage efter en aftalt protokol."},"plain":{"en":"Like the counter at a library - it stays open, waits for people to ask for a book, and hands over what they asked for.","da":"Som skranken på et bibliotek - den holder åbent, venter på, at folk spørger efter en bog, og udleverer det, de bad om."},"inPractice":{"en":"A region runs its patient record system on servers in two data centres; thousands of computers at its hospitals send requests to them all day, and if one centre fails, the other takes over.","da":"En region kører sit patientjournalsystem på servere i to datacentre; tusindvis af computere på regionens hospitaler sender forespørgsler til dem hele dagen, og hvis det ene center svigter, overtager det andet."},"whyItMatters":{"en":"Servers hold the shared data and services everyone depends on and can be reached at all times, which makes them prime targets; they usually count among an organisation's critical assets.","da":"Servere rummer de fælles data og tjenester, alle er afhængige af, og kan nås døgnet rundt, hvilket gør dem til oplagte mål; de hører typisk til organisationens kritiske aktiver."}},"deepDive":{"en":"At the operating-system level a TCP server creates a socket, bind()s it to an address and port, calls listen() with a backlog, and then loops on accept(), which returns a new socket for each established connection while the listening socket keeps waiting. On Linux the kernel keeps separate queues for half-open connections (SYN received) and fully established connections waiting to be accepted; a SYN flood targets the former, and SYN cookies let the kernel answer without storing state. The bind address matters for security: a service bound to 127.0.0.1 is reachable only locally, whereas one bound to 0.0.0.0 or :: listens on every interface, which is how development databases and admin consoles end up exposed to the internet by accident.\n\nServers handle concurrency in a few classic ways: a process per connection (traditional inetd services, Apache's prefork model), a pool of threads, or an event loop over non-blocking sockets using I/O multiplexing such as epoll on Linux, kqueue on BSD and macOS, or I/O completion ports on Windows, as in nginx and Node.js. Dan Kegel's \"C10k problem\" (1999) described why the older models struggled with ten thousand simultaneous clients. Each model has its own exhaustion attacks: slowloris-style clients hold connections open with incomplete requests to tie up worker slots, which event-driven servers resist better than thread-per-connection designs.\n\nIn modern architectures a server is usually a role rather than a box: a virtual machine, a container or a serverless function behind a load balancer. Stateless application servers keep session data in a shared database or cache so that any instance can answer any request and instances can be added or replaced freely; health checks remove failed instances, and redundancy is organised as active-active or active-passive across sites, as in the two-data-centre example. A server is the process or host that answers; a service is the capability it offers, and one server can host many services while one service can span many servers.\n\nSecuring servers is largely configuration discipline. CIS Benchmarks and vendor baselines describe a minimal installation with unneeded services disabled, daemons running under dedicated low-privilege accounts rather than root or SYSTEM, current patches, restricted administrative access, and logging forwarded to central collection. The server must treat everything received from clients as untrusted and enforce authentication, authorization and input validation itself. Version banners and verbose error pages help attackers fingerprint software, and because servers are reachable around the clock and hold shared data, they are usually classed as critical assets in risk assessments and asset inventories.","da":"På styresystemniveau opretter en TCP-server en socket, binder den med bind() til en adresse og port, kalder listen() med en backlog og kører derefter en løkke med accept(), som returnerer en ny socket for hver etableret forbindelse, mens den lyttende socket bliver ved med at vente. På Linux holder kernen separate køer for halvåbne forbindelser (SYN modtaget) og færdigt etablerede forbindelser, der venter på at blive accepteret; et SYN-flood-angreb rammer den første, og SYN cookies lader kernen svare uden at gemme tilstand. Bindingsadressen har betydning for sikkerheden: En tjeneste bundet til 127.0.0.1 kan kun nås lokalt, mens én bundet til 0.0.0.0 eller :: lytter på alle grænseflader - og det er sådan, udviklingsdatabaser og administrationskonsoller ved et uheld ender med at være eksponeret mod internettet.\n\nServere håndterer samtidighed på nogle få klassiske måder: en proces pr. forbindelse (traditionelle inetd-tjenester, Apaches prefork-model), en pulje af tråde eller en event-løkke over ikke-blokerende sockets med I/O-multipleksing som epoll på Linux, kqueue på BSD og macOS eller I/O completion ports på Windows, sådan som nginx og Node.js gør. Dan Kegels \"C10k-problem\" (1999) beskrev, hvorfor de ældre modeller havde svært ved ti tusind samtidige klienter. Hver model har sine egne udmattelsesangreb: Klienter i stil med slowloris holder forbindelser åbne med ufuldstændige forespørgsler for at optage arbejderpladser, hvilket event-drevne servere modstår bedre end design med én tråd pr. forbindelse.\n\nI moderne arkitekturer er en server som regel en rolle snarere end en kasse: en virtuel maskine, en container eller en serverless-funktion bag en load balancer. Tilstandsløse applikationsservere gemmer sessionsdata i en fælles database eller cache, så enhver instans kan besvare enhver forespørgsel, og instanser frit kan tilføjes eller udskiftes; health checks fjerner instanser, der fejler, og redundans organiseres som aktiv-aktiv eller aktiv-passiv på tværs af lokationer, som i eksemplet med de to datacentre. En server er den proces eller vært, der svarer; en tjeneste er den funktion, den tilbyder, og én server kan huse mange tjenester, ligesom én tjeneste kan være fordelt på mange servere.\n\nSikring af servere er i høj grad disciplin i konfigurationen. CIS Benchmarks og leverandørernes baselines beskriver en minimal installation med unødvendige tjenester slået fra, dæmoner, der kører under dedikerede konti med få rettigheder i stedet for root eller SYSTEM, opdaterede patches, begrænset administrativ adgang og logning, der sendes til central opsamling. Serveren skal behandle alt, hvad den modtager fra klienter, som upålideligt og selv håndhæve autentifikation, autorisation og inputvalidering. Versionsbannere og detaljerede fejlsider hjælper angribere med at identificere softwaren, og fordi servere kan nås døgnet rundt og rummer fælles data, klassificeres de som regel som kritiske aktiver i risikovurderinger og aktivoversigter."},"edges":[{"type":"requires","to":"cs/network","confidence":"high","strength":"normal"},{"type":"requires","to":"cs/port","confidence":"high","strength":"normal"},{"type":"used-with","to":"cs/service","confidence":"high","strength":"normal"}],"depth":3,"sources":[{"title":"Kurose & Ross, Computer Networking: A Top-Down Approach","tier":"textbook"},{"title":"Tanenbaum, Computer Networks","tier":"textbook"}],"draft":true}