TCP- en UDP-poorten

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Sommige protocollen op de transportlaag, 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. 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 een TCP- of UDP-datagram bevat (of een ander protocol zoals VINES).[1][2] 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), beslaan 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.[1][3][4]

Werking[bewerken]

Eén enkele computer kan meerdere sessies tegelijkertijd onderhouden die verbonden zijn met verschillende andere computers. Elke sessie wordt gedefinieerd met een bepaald poortnummer. Al deze sessies worden dan via multiplexing door dezelfde netwerkaansluiting gestuurd.

In TCP en UDP is een poort een 16 bit-waarde. Er zijn dus in principe 65536 mogelijke TCP- of UDP-poorten. Een bepaald soort programma's (server of daemon genaamd) kan luisteren op een bepaalde poort. Dit betekent wachten tot het een aanvraag krijgt op die poort. Vervolgens kan het op deze aanvraag reageren, bijvoorbeeld door het verzenden van een antwoord aan het programma dat de aanvraag heeft gestuurd. Een webserver werkt op deze manier, met name door te luisteren op TCP-poort 80 (HTTP).

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 reeks; de client zal – als respons verwacht wordt – op deze poort luisteren voor respons.[5][6] (Op een SNMP-trap-UDP-datagram bijvoorbeeld volgt geen inherente respons in de zin van transport- of sessielaag[7]). 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).[8]. 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[bewerken]

  • Systeempoorten (Engels: system ports): Gaande van 0 tot en met 1023, vaak "wellknown ports" (bekende poorten) of ook wel "privileged ports" genoemd, worden gebruikt voor fundamentele applicaties en worden toegekend door IANA.[9] 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.[10]
  • Gebruikerpoorten (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.[9]
  • 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.[9]

De grenzen van de benoemde poortreeksen zijn formeel door IANA gereserveerd en het gebruik ervan is volgens RFC6335 vooralsnog voorbehouden aan IANA.[9]. In de praktijk wordt lang niet altijd de "Best Current Practice" – zoals die door deze RFC wordt voorgeschreven en aangemoedigd – nageleefd.

Vaak gebruikte poorten[bewerken]

Hieronder volgt een selectie van vaak gebruikte poortnummers en hun service names[11]:

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 TCP NetBIOS Name Service
139 TCP NetBIOS Datagram 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
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)[12]
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
3389 TCP RDP: Remote Desktop Protocol
5800 TCP VNC: Virtual Network Computing
5900 TCP VNC: Virtual Network Computing

Software[bewerken]

Een firewall is een programma dat aanvragen die over een netwerk (bijvoorbeeld internet) binnenkomen kan filteren. Op transportlaag-niveau kan deze filtering dan gebeuren door aanvragen met bepaalde poortnummers tegen te houden. Die poorten noemt men dan gesloten.

Er bestaan programma's die scannen welke poorten er 'open staan' (op welke poorten er een service daemon actief luistert) op een machine met een bepaald IP-adres of hele IP-reeksen. Dat gebeurt soms met kwade bedoelingen uitsluitend om te zien of de betreffende computer gekraakt kan worden en dan een potentieel doelwit is (voor hackers). Het kan ook een preventieve controle zijn om te beoordelen in hoeverre een computer te kraken is. Enkele programma's om poorten mee te scannen zijn bijvoorbeeld nmap en nessus. Effectieve firewalls kunnen zulke scans detecteren en latere service requests of zelfs alle verdere packets (van de scannerbron) blokkeren en/of negeren ('droppen').

Hardware[bewerken]

Behalve software bestaat er ook hardware die op TCP/UDP-poort-niveau opereert en/of manipuleert. Zo bestaan er bijvoorbeeld hardwarematige (of dedicated) firewalls (onder meer van Nokia, voorzien van Checkpoint-software), maar ook vrijwel elke industriële en consumenten/SOHO-router heeft functionaliteiten die ingrijpen op poort-niveau. Dan bestaan er voorts nog apparaten met als voornaamste functionaliteit het manipuleren van netwerkverkeer op de transport- en sessielaag, de zogeheten layer-4 switches. Deze worden voornamelijk door Internet Service Providers (ISP's) of instellingen en bedrijven met eigen serverparken ingezet om de belasting (load) van (logische) netwerkdiensten – dus op grond van karakteristieken op laag 4, voornamelijk de TCP/UDP-bestemmingspoort – te verdelen over meerde fysieke systemen (of in elk geval, op laag 3 van het OSI-model te verdelen over meerdere IP-adressen, die dan in de praktijk corresponderen met evenzoveel fysieke servers). Ze worden daarom ook wel load balancers genoemd. Dit verdelen gebeurt meestal middels een round-robin-strategie, maar ook andere strategieën bestaan. Deze layer 4-switches zijn doorgaans zodanig geavanceerd dat ze kunnen detecteren wanneer een van de servers niet meer reageert of functioneert (down is), zodat inkomende service requests dan niet meer naar die server worden gestuurd. Layer 4-switches bieden zo behalve de mogelijkheid om de belasting te verdelen over meerdere machines, ook nog eens redundantie. Ze worden toegepast voor netwerkdiensten als e-mail, usenet en webhosting.

Network Address Translation/Port Address Translation[bewerken]

Als een computer, firewall of router Network Address Translation (NAT) toepast, gaat dit vaak hand in hand met Port Address Translation (PAT). NAT wordt vooral toegepast om met meerdere (private) computers (meestal de LAN zijde) of andere apparaten één enkel (public) IP-adres te gebruiken (meestal de WAN zijde). Wanneer twee private clients dezelfde bronpoort(en) gebruiken voor uitgaande UDP- of TCP-packets (vooral wanneer dat naar hetzelfde doeladres en dezelfde service daar), zou dat zonder PAT dataverstrengeling kunnen opleveren: de software of het apparaat dat de NAT verzorgt, kan dan van de responspackets niet terug herleiden welk packet naar welke private client doorgestuurd (geforward) moeten worden. Door het wijzigen van de bronpoort aan de public of WAN-zijde en dit bij te houden, kunnen de juiste terugkomende responspackets worden terugvertaald naar de juiste IP-adressen en poortnummers aan de private of LAN-zijde. Dit geschiedt allemaal door vervangen van de betreffende adressen in de IP-headers en poortnummers in de TCP- en UDP-headers.[13][14] NAT en PAT zijn ook essentieel voor het functioneren van bovengenoemde layer 4-switches. Bij veel routers is het eenvoudig mogelijk een overzicht op te vragen van alle recente en actieve sessies met de bijbehorende adres- en poortvertalingen.

Port Address Translation hoeft niet alleen een noodzakelijke bijkomstigheid van NAT zijn, het kan ook een doel op zichzelf zijn: Bepaalde poorten aan de public/WAN-zijde kunnen voor inkomende service requests worden vertaald en doorgestuurd naar specifieke private clients en zo nodig andere poorten aldaar.