Sommige protocollen op de transportlaag in de IP-stack, met name TCP en UDP, maken gebruik van poortnummers (ook wel logische poorten genoemd) om verschillende diensten tussen verschillende systemen en meerdere diensten op eenzelfde systeem te kunnen aanbieden.
Implementatie in de IP-stack In de IP-stack bevinden TCP- en UDP-datagrams zich strikt genomen op de zogeheten host-to-host layer, die ruwweg correspondeert met de transport- en sessielagen (layer 4 & 5) van het OSI-model. In de IP-header van een IP-packet wordt met een 8-bits protocol identifier (tussen het TTL en het checksum-veld, 67 bits voorbij het begin van de header) aangegeven of het IP-packet een TCP- of UDP-datagram bevat (of een ander protocol zoals VINES).Networking Essentials Unleashed, Mark Sportack et al, RFC791 Internet Protocol - Internet Header Format, IETF (Internet Engineering Task Force) Het UDP- of TCP-datagram (bij TCP spreekt men ook wel van een TCP-segment, duidend op een deel van een meerdere segmenten die de datastream vormen), beslaat de payload van het IP-packet, en hebben elk op hun beurt ook weer een header. In zowel de UDP-datagram-header als de TCP-segment-header bevatten de eerste 16 bits de source port (bronpoort), en de daaropvolgende 16 bits de destination port (bestemmingspoort). Na deze 32 bits verschillen de headers aanzienlijk van elkaar.RFC768 User Datagram Protocol, IETF (Internet Engineering Task Force)RFC793 Transmission Control Protocol, IETF (Internet Engineering Task Force)
Werking Eén enkele computer kan meerdere sessies tegelijkertijd onderhouden met verschillende andere computers, en zelfs meerdere sessies naar één andere computer. Elke sessie wordt (boven laag 3 van het OSI-model) gekarakteriseerd door de 'protocol identifier' (UDP of TCP), het poortnummer aan de ene zijde van de sessie én het poortnummer aan de andere zijde van de sessie: de bron- en bestemmingspoorten, waarvan het perspectief afhangt van de richting van het datagram of segment. Al deze sessies worden dan via multiplexing door dezelfde netwerkaansluiting gestuurd. Het is dus ook mogelijk dat er tussen twee computers tussen dezelfde bron- en bestemmingspoorten gelijktijdig zowel een UDP- als een TCP-sessie actief is. Dit laatste is bijvoorbeeld gebruikelijk bij het DNS-protocol: queries en replies geschieden meestal via UDP-datagrams, maar indien de hoeveelheid data van de reply op de query meer dan 512 bytes zou bedragen en niet meer in de typische payload size van één UDP-datagram zou 'passen' (bijvoorbeeld – maar niet uitsluitend – bij zone transfers), stuurt de DNS-server deze data terug over een TCP-stream (de TCP-sessie), die geschikter is voor versturen van (relatief) veel data omdat in de IP-stack de TCP-session layer zich ontfermt over lost packets en packets die out of order (in de verkeerde volgorde) arriveren; dit maakt de implementatie/het programmeren van de DNS-software aanmerkelijk eenvoudiger.RFC1995 Incremental Zone Transfer in DNS, IETF, (Internet Engineering Task Force)RFC5936 DNS Zone Transfer Protocol (AXFR), IETF, (Internet Engineering Task Force)RFC7766 DNS Transport over TCP - Implementation Requirements, IETF, (Internet Engineering Task Force)
In de TCP- en UDP-headers is een poortnummer een 16 bit-waarde. Er zijn dus in principe 65536 mogelijke TCP- of UDP-poorten. Server of daemon software (of sub-proces daarvan) kan luisteren voor inkomende service requests van een bron (deze bron kan óók dezelfde fysieke of virtuele machine/computer zijn) op een poort die geassocieerd is met de service (netwerkdienst) die door die software geboden wordt, of anderszins bekend is bij de bron om te gebruiken als bestemmingspoort.Remote procedure call (RPC) en Client-To-Client Protocol (CTCP) zijn voorbeelden waarbij de met elkaar communicerende machines of software-processen op een andere manier (op een hogere laag in het OSI-model) kenbaar maken op welke poorten er geluisterd wordt, in plaats van gebruik te maken van Wellknown Services poorten of de geregistreerde gebruikerspoorten Dit betekent wachten tot het een aanvraag krijgt op die poort (of anders gezegd, op de socket die aan die poort gebonden is). Vervolgens kan het op deze aanvraag reageren, door het verzenden van een antwoord aan het programma dat de aanvraag heeft gestuurd, via de (socket gebonden aan die) bronpoort die dat programma daarvoor in gebruik heeft op de machine waar de aanvraag vandaan komt. Een webserver werkt op deze manier, met name door te luisteren op TCP-poorten 80 (HTTP) en 443 (HTTPS).
Wanneer een netwerkclient (programma) een service request initieert naar een service (port) op een andere computer of server, wordt op de clientcomputer eerst een source port (bronpoort) gealloceerd uit de daarvoor aangewezen (dynamische) reeks; de client zal – als respons verwacht wordt – op deze poort luisteren voor respons. socket(2) man page linux.die.netlisten(2) man page linux.die.net (Op een SNMP-trap-UDP-datagram bijvoorbeeld volgt geen inherente respons in de zin van transport- of sessielaagRFC1098 Simple Network Management Protocol, IETF (Internet Engineering Task Force)). De service daemon die een request ontvangt, zal eventuele respons terugsturen naar het source address, gericht aan de source port zoals die in de UDP- of TCP-header naar de service daemon meegestuurd is. Die combinatie van bron- en bestemming-poortnummers (tezamen met bron- en bestemming-IP-adressen) is uniek voor elke sessie. Meerdere, gelijktijdige sessies van dezelfde client naar dezelfde service (poort) op een bepaalde server of computer zullen vanaf verschillende source ports vanaf de client komen, en kunnen zodoende van elkaar onderscheiden worden zodat de datastromen niet verward kunnen raken en/of bij de verkeerde subprocessen terechtkomen. Bij het laden van een webpagina vanaf een webserver bijvoorbeeld, zal de webclient doorgaans een aantal verschillende sessies nagenoeg tegelijk openen richting de webserver om de afzonderlijke delen van een webpagina (waarin meerdere <... src="..."> referenties kunnen zijn opgenomen, zoals voor HTML-frames en afbeeldingen) zo gelijktijdig mogelijk binnen te halen (in plaats van sequentieel).Maximum concurrent connections to the same domain for browsers Developers Corner. Dit is veelal efficiënter, zodat alle content van een webpagina sneller laadt en ook visueel beter lijkt te verschijnen, met alle content zoveel mogelijk ineens op de juiste plaats en in de juiste (bedoelde) afmetingen en verhoudingen. Delen van webpagina's die in achtereenvolgende sessies worden ingeladen (of achtereenvolgens in dezelfde of een enkele sessie) kunnen het effect hebben dat gedurende het verschijnen van de pagina, de opmaak en plaats van gedeelten nog verspringen, veranderen van afmeting of lettertypes of stijl.
Poorttypes Systeempoorten (Engels: system ports): Gaande van 0 tot en met 1023, vaak "well known ports" (bekende poorten) of ook wel "privileged ports" genoemd, worden gebruikt voor fundamentele applicaties en worden toegekend door IANA.RFC6335 Service Name and Port Number Procedure, IETF (Internet Engineering Task Force) Softwareprocessen (services) die deze poorten willen gebruiken om op te luisteren dienen over 'root'-, 'administrator'- of systeemprivileges te beschikken vanuit het perspectief van een multi-user besturingssysteem.Why can only root listen to ports below 1024? Mikael Ståldal Gebruikerspoorten (Engels: user ports): Gaande van 1024 tot en met 49151, ook wel "registered ports" (geregistreerde poorten) genoemd, worden gebruikt door applicaties en worden volgens goed gebruik eveneens geregistreerd bij IANA. Dynamische poorten (Engels: dynamic ports): Gaande van 49152 tot en met 65535, worden dynamisch toegekend voor de duur van een bepaalde sessie en mogen vrij gebruikt worden.
De grenzen van de benoemde poortreeksen zijn formeel door IANA gereserveerd en het gebruik ervan is volgens RFC6335 vooralsnog voorbehouden aan IANA.. In de praktijk wordt lang niet altijd de "Best Current Practice" – zoals die door deze RFC wordt voorgeschreven en aangemoedigd – nageleefd.
Vaak gebruikte poorten Hieronder volgt een selectie van vaak gebruikte poortnummers en hun service names:IANA Service Name and Transport Protocol Port Number Registry - Waarschuwing: zeer grote webpagina! Systeempoorten poort protocol omschrijving 20 TCP FTP: file transfer protocol 21 TCP FTP Control 22 TCP SSH: Secure Shell 23 TCP Telnet 25 TCP SMTP: Simple Mail Transfer Protocol, verzending van e-mail (MTA) 53 UDP, TCP DNS: Domain Name System 67 UDP DHCP Server 68 UDP DHCP Client 69 UDP TFTP: Trivial File Transfer Protocol 80 TCP HTTP: Hypertext Transfer Protocol 110 TCP POP3: post office protocol, ontvangen van e-mail 119 TCP NNTP: Network News Transfer Protocol 123 UDP NTP: Network Time Protocol 137 UDP NetBIOS Name Service 138 UDP NetBIOS Datagram Service 139 TCP NetBIOS Session Service 143 TCP IMAP: Internet Message Access Protocol 161 UDP SNMP: Simple Network Management Protocol 162 UDP SNMP-trap: Simple Network Management Protocol, getriggerde notificaties 389 TCP LDAP: Lightweight Directory Access Protocol 443 TCP HTTPS: HyperText Transfer Protocol over TLS/SSL 445 TCP Direct Hosting / SMB (Samba) over TCP 465 TCP SMTP: Simple Mail Transfer Protocol over TLS/SSL 546 UDP DHCP Client (ipv6) 547 UDP DHCP Server (ipv6) 569 TCP MSN: Multiple Subscriber Number 587 TCP SMTP: Simple Mail Transfer Protocol, verzending van uitgaande e-mail (MSA)RFC4409, Message Submission for Mail, IETF (Internet Engineering Task Force) 990 TCP FTPS: FTP over SSL 993 TCP IMAP: Internet Message Access Protocol over TLS/SSL 995 TCP POP3: post office protocol, ontvangen van e-mail over TLS/SSL
Gebruikerspoorten poort protocol omschrijving 1080 TCP SOCKS proxy 1194 TCP, UDP OpenVPN 3306 TCP, UDP MySQL databasesysteem 3389 TCP RDP: Remote Desktop Protocol 3689 TCP DAAP: Digital Audio Access Protocol 5432 TCP, UDP PostgreSQL databasesysteem 5800 TCP VNC: Virtual Network Computing 5900 TCP VNC: Virtual Network Computing 6346 TCP, UDP Gnutella p2p netwerk 8080 TCP HTTP alternatief voor onder meer proxyservers en Apache Tomcat
Onder UNIX/POSIX systemen Onder UNIX, POSIX systemen of daarop gelijkende/daaraan conformerende systemen (zoals Cygwin) zijn doorgaans de poortnummers van officiële (door de IANA geregistreerde) services te vinden in de file /etc/services in het file system.iana.org Assigned port numbers for /etc/servicesfreebsd.org Een van de beschikbare bronnen voor een recente /etc/services file In hoeverre de lijst met de daarin vermelde systeempoorten compleet en/of up to date is, is veelal afhankelijk van hoe recent het betreffende (besturings)systeem is geüpdatet; updates van de meest gangbare gebruikerspoorten in deze lijst kunnen opgenomen zijn in de systeemupdates, maar het kan ook voorkomen dat gebruikerspoorten en de bijbehorende service names pas in de lijst worden bijgeschreven wanneer de applicatie of service software die gebruikmaakt van deze poorten daadwerkelijk wordt geïnstalleerd (bijvoorbeeld door middel van installatie-scripts, package managers of soms zelfs door een handmatige installatie waarbij de file ook handmatig aangepast moet worden). Dit kan per platform, distributie en/of (applicatie)software sterk verschillen, en men kan er zeker niet van uitgaan dat de services-file op zo'n systeem altijd uitputtend/compleet en recent is.
Alle regels met services en poorten waarin bijvoorbeeld het de protocolnaam http voorkomt (inclusief die waar http deel uitmaakt van de protocolnaam, of waar het genoemd is in het commentaardeel) zijn te vinden met de opdracht: $ grep -i http /etc/services # Updated from http://www.iana.org/assignments/port-numbers and other # sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services . http 80/tcp www # WorldWideWeb HTTP http 80/udp # HyperText Transfer Protocol https 443/tcp # http protocol over TLS/SSL https 443/udp http-alt 8080/tcp webcache # WWW caching service