TakéSíťový port, Port number, Číslo portuZákladní
Definice
Port je šestnáctibitové číslo v hlavičce TCP nebo UDP, které na jednom počítači rozlišuje jednotlivé síťové služby a spojení. IP adresa doručí paket ke stroji, port určí, kterému procesu ho operační systém předá. Rozsah je 0 až 65535, přičemž známé služby mají čísla přidělená organizací IANA.
Nezaměňujte: Ve světě sítí je port číslo transportní vrstvy, v hardwaru fyzický konektor (USB, HDMI) a ve vývoji softwaru „portace“ přenos programu na jinou platformu.
Než se na to spolehnete: Ověřte prosím dostupnost odkazu na dokumentaci Docker networking (URL cesty se u docs.docker.com občas mění) a přesné znění interwiki odkazů na Wikipedii.
Příklady z praxe
Databáze vázaná na localhost místo na všechna rozhraní
PostgreSQL po instalaci naslouchá na portu 5432. Pokud v konfiguraci zůstane naslouchání na všech rozhraních a port není zavřený firewallem, je databáze dostupná z internetu a během hodin ji najdou automatické skenery. Bezpečná výchozí volba je vázat službu jen na smyčkové rozhraní a ke vzdálenému přístupu použít SSH tunel.
# nedostupné zvenčí listen_addresses = 'localhost' port = 5432 # ověření, na čem služba skutečně visí ss -ltnp | grep 5432Kolize portů při lokálním vývoji
Vývojář spustí Next.js na portu 3000 a v jiném terminálu druhý projekt. Druhý proces skončí chybou EADDRINUSE, protože port už drží první aplikace. Řešením je buď najít a ukončit původní proces, nebo druhé aplikaci předat jiné číslo portu.
$ npm run dev Error: listen EADDRINUSE: address already in use :::3000 $ lsof -i :3000 # kdo port drží $ PORT=3001 npm run dev # spuštění na jiném portu
Časté omyly
- MýtusKdyž přesunu SSH z portu 22 na 2222, jsem v bezpečí před útoky.
- Ve skutečnostiZměna portu odfiltruje jen hromadné skeny, které zkoušejí výhradně výchozí čísla. Kompletní sken všech 65535 portů trvá u jednoho hostitele minuty, takže službu odhalí. Skutečnou ochranu dává klíčová autentizace, firewall a omezení zdrojových adres.
- MýtusPort 80 a port 8080 jsou totéž, jen se jinak píše.
- Ve skutečnostiPort 8080 je běžná konvence pro vývojové a proxy servery, ale prohlížeč ho nikdy nepoužije automaticky. Bez explicitního zápisu v URL prohlížeč u HTTP zkouší 80 a u HTTPS 443.
- MýtusServer zvládne nejvýš 65535 souběžných spojení, protože tolik je portů.
- Ve skutečnostiLimit se týká zdrojových portů jednoho klienta vůči jedné cílové dvojici, ne serveru. Server rozlišuje spojení čtveřicí adres a portů, takže na jediném naslouchajícím portu obslouží řádově statisíce klientů; strop určuje paměť a nastavení jádra.
Časté dotazy
- Jak zjistím, který proces mi drží obsazený port?
- Obsazený port odhalí nástroje pracující se seznamem socketů. Na Linuxu poslouží ss -ltnp nebo lsof -i :3000, na macOS lsof -i :3000, na Windows netstat -ano | findstr :3000 a následné dohledání PID ve Správci úloh. Výstup ukáže jméno procesu i jeho identifikátor, takže ho lze cíleně ukončit. Pokud příkaz nevypíše jméno programu, chybí obvykle oprávnění a je potřeba ho spustit pod administrátorem nebo přes sudo.
- Proč nemůže běžný uživatel naslouchat na portu 80?
- Porty pod číslem 1024 označuje unixová konvence jako privilegované a jádro na ně pouští jen proces s příslušným oprávněním, historicky root. Důvodem je, aby si nikdo bez správcovských práv nemohl podvrhnout systémovou službu, například falešný webový nebo poštovní server. V praxi se to obchází třemi cestami: aplikace běží na vyšším portu za reverzní proxy, dostane capability CAP_NET_BIND_SERVICE, nebo se provoz přesměruje pravidlem ve firewallu.
- Používá port i UDP, nebo jen TCP?
- Porty používá TCP i UDP, obojí je má v hlavičce jako šestnáctibitové pole. Číselné prostory jsou přitom oddělené, takže port 5000/TCP a 5000/UDP mohou patřit dvěma nezávislým službám. IANA většinou přiděluje obě varianty jedné službě zároveň, i když ta reálně využívá jen jednu. Porty najdete také u novějších protokolů postavených nad UDP, například u QUIC, který standardně jezdí na portu 443.
- Co znamená port forwarding na domácím routeru?
- Port forwarding je pravidlo v NAT routeru, které říká, že příchozí spojení na určitý port veřejné adresy se má přeposlat na konkrétní privátní adresu a port v lokální síti. Bez něj router příchozí spojení zahodí, protože neví, komu patří. Typicky se používá pro zpřístupnění herního serveru nebo NAS zvenčí. Otevřením portu se ale daná služba vystavuje celému internetu, takže je vhodnější VPN nebo tunel.
- Proč se v URL někdy píše dvojtečka a číslo, například https://example.com:8443?
- Zápis s dvojtečkou určuje port explicitně a přebíjí výchozí hodnotu podle schématu. Prohlížeč použije u http port 80 a u https port 443, takže je při standardním nastavení zbytečné číslo uvádět. Jakmile služba běží jinde, například vývojový server na 3000 nebo administrace na 8443, musí být port v adrese uveden, jinak se spojení nenaváže. Ve výsledných odkazech se proto nestandardní port vždy objeví.
Zdroje
- Service Name and Transport Protocol Port Number Registry(otevře se v novém okně)
- RFC 9293: Transmission Control Protocol (TCP)(otevře se v novém okně)
- RFC 768: User Datagram Protocol(otevře se v novém okně)
- Networking overview(otevře se v novém okně)