9.8. Portar

En IP-adress anger vilken värd ett paket är avsett för. En modern värd kör många program samtidigt – en webbläsare, en chattklient, ett videosamtal, en säkerhetskopieringsuppgift – och var och en av dessa skickar och tar emot paket parallellt. IP-lagret har inget sätt att skilja dem åt; det lämnar bara varje ankommande paket till ”värden”. Något måste avgöra vilket paket som tillhör vilket program.

Portnumret är svaret. Varje paket på transportlagret bär två extra fält utöver IP-headern: en källport och en destinationsport. Var och en är ett 16-bitars heltal, så det finns 65535 möjliga portnummer per värd. Kombinerat med IP-adressen identifierar porten en specifik ändpunkt inuti en värd – ett specifikt programs specifika konversation.

En enskild värdruta till höger med en IP- adress märkt högst upp. Tre program inuti värden är märkta "HTTP server", "video call", "chat client", var och en ansluten till ett annat portnummer märkt 80, 5004 och 4321 respektive. Tre pilar anländer till värden från nätverket, var och en taggad med en destinationsport; varje pil landar på det matchande programmet.

Många program delar en IP-adress; destinationsporten dirigerar varje ankommande paket till rätt program.

9.8.1. Välkända portar

De första 1024 portnumren är reserverade enligt konvention för standardtjänster. Några som läsaren kommer att stöta på:

  • 22 – SSH (protokollet Secure Shell, som används för krypterad fjärrinloggning).

  • 53 – DNS, Domain Name System (beskrivs på Namn och DNS).

  • 80 – HTTP, Hypertext Transfer Protocol – webbens okrypterade protokoll.

  • 123 – NTP, Network Time Protocol (hur enheter ställer sina klockor från en tidsserver).

  • 443 – HTTPS, HTTP transporterat över TLS (Transport Layer Security, det standardiserade krypteringshöljet för internetprotokoll) – protokollet bakom varje webbsida som visar en låsikon i webbläsaren.

Konventionen är det som gör det möjligt för en webbläsare att ansluta till http://example.com utan att ange en port – den antar 80 eftersom det är den välkända porten för HTTP. En kamera som ansluter till en webbserver gör detsamma.

Över 1024 är portnummer oreglerade och vilket program som helst kan göra anspråk på ett. Databasservrar (5432 för PostgreSQL, 3306 för MySQL), applikationsservrar och anpassade protokoll lever alla någonstans i det högre intervallet.

9.8.2. Tillfälliga portar

Servrar lyssnar på en känd port. Klienter använder en annan port i sin egen ände, vald på nytt för varje utgående anslutning.

När kameran ansluter till en webbserver på port 443 sker konversationen mellan

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

<some-port> är en tillfällig port – MicroPython väljer ett oanvänt nummer från ett högt intervall, använder det under anslutningens varaktighet och frigör det efteråt. Skriptet behöver inte bry sig om vilket nummer som valdes; socket-lagret hanterar det.

9.8.3. Lyssna kontra prata

Vilken roll en port spelar beror på vilken sida av konversationen den är på. Två distinkta fall:

  • En lyssnande port tillhör ett program som vill ta emot oönskade anslutningar. Programmet säger till MicroPython ”alla inkommande paket adresserade till mig på port 80 är mina”, och väntar. Servrar gör detta.

  • En ansluten port tillhör ett program som vill initiera en konversation. Programmet väljer (eller ber MicroPython att välja) en tillfällig port, skickar ett paket med den som källport och serverns välkända port som destination, och använder samma portpar under resten av konversationen.

Ett enskilt program kan göra båda samtidigt och hålla olika portar för varje roll. En kamera kan lyssna på port 8000 för inkommande HTTP-anslutningar från ett konfigurationsgränssnitt och hålla en utgående HTTPS-anslutning till en fjärrserver på port 443. De två rollerna stör inte varandra – varje konversation identifieras av den fullständiga kvadrupeln (src IP, src port, dst IP, dst port), och inga två konversationer delar samma kvadrupel.

9.8.4. Vad portar låser upp

Med portar på plats kan transportlagret äntligen lösa problemet med leverans från program till program. Ett paket bär nu tillräckligt med information för att dirigeras inte bara till rätt värd (IP-adressen) utan till rätt socket inuti den värden (portnumret).

De följande två sidorna täcker de två varianter som transportlagret erbjuder ovanpå den adresseringen: UDP (User Datagram Protocol – varje paket oberoende, inga garantier) och TCP (Transmission Control Protocol – en ansluten, tillförlitlig, ordnad ström).