9.8. Porty#

IP adresa říká, kterému hostiteli je paket určen. Moderní hostitel provozuje mnoho programů najednou – webový prohlížeč, chatovací klient, videohovor, zálohovací úlohu – a každý z nich paralelně odesílá a přijímá pakety. IP vrstva je nedokáže od sebe rozlišit; každý příchozí paket prostě předá „hostiteli“. Něco musí rozhodnout, který paket patří kterému programu.

Odpovědí je číslo portu. Každý paket na transportní vrstvě nese kromě IP hlavičky dvě další pole: zdrojový port a cílový port. Každé je 16bitové celé číslo, takže na jednoho hostitele existuje 65535 možných čísel portů. V kombinaci s IP adresou port identifikuje jeden konkrétní koncový bod uvnitř hostitele – jednu konkrétní konverzaci konkrétního programu.

A single host box on the right with an IP address labelled at the top. Three programs inside the host are labelled "HTTP server", "video call", "chat client", each connected to a different port number labelled 80, 5004, and 4321 respectively. Three arrows arrive at the host from the network, each tagged with a destination port; each arrow lands on the matching program.

Mnoho programů sdílí jednu IP adresu; cílový port směruje každý příchozí paket ke správnému z nich.#

9.8.1. Dobře známé porty#

Prvních 1024 čísel portů je podle konvence vyhrazeno pro standardní služby. Několik, se kterými se čtenář setká:

  • 22 – SSH (protokol Secure Shell, používaný pro šifrované vzdálené přihlášení).

  • 53 – DNS, Domain Name System (popsán na stránce Jména a DNS).

  • 80 – HTTP, Hypertext Transfer Protocol – nešifrovaný protokol webu.

  • 123 – NTP, Network Time Protocol (jak zařízení nastavují své hodiny podle časového serveru).

  • 443 – HTTPS, HTTP přenášené přes TLS (Transport Layer Security, standardní šifrovací obal pro internetové protokoly) – protokol stojící za každou webovou stránkou, která v prohlížeči zobrazuje ikonu zámku.

Tato konvence je tím, co umožňuje prohlížeči připojit se k http://example.com bez uvedení portu – předpokládá 80, protože to je dobře známý port pro HTTP. Kamera připojující se k webovému serveru dělá totéž.

Nad 1024 jsou čísla portů neomezená a může si je nárokovat jakýkoli program. Databázové servery (5432 pro PostgreSQL, 3306 pro MySQL), aplikační servery a vlastní protokoly se všechny nacházejí někde ve vyšším rozsahu.

9.8.2. Dočasné porty#

Servery naslouchají na známém portu. Klienti používají na své straně jiný port, zvolený nově pro každé odchozí spojení.

Když se kamera připojí k webovému serveru na portu 443, konverzace probíhá mezi

camera IP : <some-port>     <-->     server IP : 443

<some-port> je dočasný port – MicroPython zvolí nepoužité číslo z vysokého rozsahu, použije ho po dobu trvání spojení a poté ho uvolní. Skript se nemusí starat o to, které číslo bylo zvoleno; soketová vrstva se o to postará.

9.8.3. Naslouchání versus komunikace#

Úloha, kterou port plní, závisí na tom, na které straně konverzace se nachází. Dva odlišné případy:

  • Naslouchající port patří programu, který chce přijímat nevyžádaná spojení. Program řekne MicroPythonu „jakékoli příchozí pakety adresované mně na port 80 jsou moje“ a čeká. Tohle dělají servery.

  • Připojený port patří programu, který chce zahájit konverzaci. Program zvolí (nebo požádá MicroPython, aby zvolil) dočasný port, odešle paket s tímto portem jako zdrojovým a s dobře známým portem serveru jako cílovým a pro zbytek konverzace používá stejnou dvojici portů.

Jediný program může dělat obojí najednou a držet pro každou roli jiné porty. Kamera by mohla naslouchat na portu 8000 pro příchozí HTTP spojení z konfiguračního uživatelského rozhraní a zároveň držet odchozí HTTPS spojení ke vzdálenému serveru na portu 443. Tyto dvě role se navzájem neovlivňují – každá konverzace je identifikována úplnou čtveřicí (src IP, src port, dst IP, dst port) a žádné dvě konverzace nesdílejí stejnou čtveřici.

9.8.4. Co porty odemykají#

S porty na svém místě může transportní vrstva konečně vyřešit problém doručování od programu k programu. Paket nyní nese dostatek informací k tomu, aby byl směrován nejen ke správnému hostiteli (IP adresa), ale i ke správnému soketu uvnitř tohoto hostitele (číslo portu).

Následující dvě stránky popisují dvě varianty, které transportní vrstva nad tímto adresováním nabízí: UDP (User Datagram Protocol – každý paket nezávislý, žádné záruky) a TCP (Transmission Control Protocol – spojený, spolehlivý, uspořádaný proud).