Worum geht's hier?

In zwei Jahrzehnten als Vollzeitnerd hat sich der ein oder andere Text angesammelt, mit denen ich unseren Azubis versucht habe, Grundlagen über unseren Job (TCP/IP, aber auch bevorzugt Telefonie) zu erklären.

Das stelle ich hier, wann immer ich so einen Text nochmal irgendwo finde, zusammen. Diese Texte haben nicht den Anspruch, zu 100% exakt zu sein (sondern manches ist des besseres Verständnisses wegen vereinfacht worden). 

Heute:

Der Unterschied zwischen TCP und UDP

Wenn man die Grundlagen von IP-Adressen und das IP-Routing verstanden hat, weiß man, wie man einen anderen Rechner (auch Server, Drucker, ...) erreichen kann.

Auf diesem anderen Rechner laufen aber verschiedene Programme (Serverdienste), die für verschiedene Aufgaben zuständig sind. Und damit die sich nicht gegenseitig in die Quere kommen, brauchen sie Kommunikationsports. 

    Ports

    Ports gibt es 65535 an der Zahl. (Und das noch mal 2, denn jeden Port gibt es als TCP- und als UDP-Port, dazu später mehr).

    Wenn Du in Deinem Browser einen Domain-Namen eingibst und aufrufst, dann baut der eine Verbindung zum Server am anderen Ende auf. Und dort laufen verschiedene Serversoftware-Produkte, vielleicht ein Webserver (Apache), vielleicht aber auch ein FTP-Server (damit der Inhaber der Webseite Daten austauschen kann), vielleicht aber auch ein Mail-Server mit SMTP, POP3 und IMAP. Und damit der Server nun weiß, welche Serversoftware angesprochen werden soll, meldet sich Dein Browser per TCP auf den Ports 80 (http) oder 443 (https). Und dort lauscht dann die Webserver-Software (z.B. Apache), nimmt die Anfrage an und versucht sie zu bearbeiten.

    Dadurch, dass es unterschiedliche Ports gibt, kann auf dem gleichen Server auch eine FTP-Server-Software auf TCP-Port 21 laufen (damit der Webmaster der Seite diese pflegen kann), und auch noch ein Mail-Server z.B. auf Ports 25, 110, 143, 465, 587, 993 oder 995 ohne dass die sich in die Quere kommen. Und auch innerhalb einer Software kann man so verschiedene Funktionen abbilden, der Apache-Webserver z.B. erkennt am Zugriff auf Port 80 oder 443 eben, ob http (unverschlüsselt) oder https (verschlüsselt) genutzt werden soll. Auch der z.B. Mailserver kann zum mit verschiedenen Protokollen für Versand (SMTP, Port 25 oder 587, und für verschlüsseltes SMTP gab es früher noch 465) und gleichzeitig zum Empfang per POP3 (Port 110 oder verschlüsselt 995) oder IMAP (143 oder verschlüsselt 993) genutzt werden. 

    Technisch ist es (nahezu) egal, ob der Apache Webserver auf Port 80 lauscht oder woanders. Andere Ports (gerne genommen werden z.B. 8080 für alternative http- und 9443 für https-Verbindungen) musst Du dann durch :8080 bzw. :9443 im Browser hinter dem Domainnamen oder der IP-Adresse gezielt ansteuern. Die Benutzung von Standard-Ports (oder eben bei 8080/9443 "ähnlich klingenden") ist einfach eine Komfort-Sache: Einerseits für den Anwender - der will ja nicht im Browser oder in seinem E-Mail-Programm irgendwelche Port-Angaben setzen müssen, wenn es nicht sein muss. Und den Standardport braucht man nicht angeben, den kennt die jeweilige Software (z.B. Dein Browser) automatisch. Und andererseits für den Administrator, denn der muss (auch "dazwischen" bei z.B. Firewall-Regeln) ja irgendwann noch durchblicken.

      TCP (Transmission Control Protocol)

      Die Verbindung zwischen Deinem Browser und dem Apache-Webserver erfolgt dann per TCP auf Port z.B. 443.

      TCP ist ein verbindungs-gebundenes Protokoll. Alice geht zu Bob hin (sucht sich also einen passenden IP-Pfad zum Server), macht sich dort bemerkbar und hält Augenkontakt. Und wenn Alice was sagt, dann sieht sie, dass Bob das gehört hat. Solange Alice oder Bob die Verbindung nicht beenden (sich wegdrehen), bleibt dieser Augenkontakt bestehen. Und bereits beim Verbindungsaufbau, oder auch mitten drin würde Alice natürlich auch bemerken, wenn Bob gar nicht (mehr) da ist, oder umgekehrt. Und wenn Alice zwischendrin sieht (fragender Gesichtsausdruck statt Nicken), dass Bob etwas nicht verstanden hat, dann wiederholt sie es. Anderes Beispiel: Wenn meine Tochter Unsinn machen will und mich vorher dabei anguckt und meinen Gesichtsausdruck beobachtet, ist das quasi TCP.

      Der Vorteil von TCP ist, dass sich beide Seiten sicher sein können, dass der Gegenüber da ist und die Anfrage zumindest gehört hat. TCP ist daher viel stressfreier. Bei IMAP (= ein Protokoll zum Abholen von Mails bzw. zum Synchronisieren des Postfachs) z.B. baut das eigene Mail-Programm ("Alice") eine Verbindung zum Mailserver ("Bob") auf und die bleibt bestehen (idle-Zustand). Und wenn eine neue Mail kommt, dann kann der Mailserver Bob die direkt in die bestehende Verbindung reinschieben und sie kommt sofort beim Mailprogramm Alice an.

        UDP (User Datagram Protocol)

        UDP ist das Gegenteil: Alice ruft einfach das, was sie zu sagen hat, in Bobs Richtung (natürlich auch über den passenden IP-Pfad zum Server). Und hofft, dass er es hört und versteht. Erkennen kann sie nur dadurch, dass er irgendwie reagiert, in dem er antwortet (und wenn es nur ein "ja ok" ist), oder in dem er tut, was sie gesagt hat. Wenn meine Tochter also Unsinn macht und ich rufe vom Nachbarzimmer "hört auf", dann ist das quasi UDP - ob sie es gehört hat, merke ich entweder an ihrem Protest oder daran, dass sie aufhört.

        Und im Zweifelsfall muss Bob nachfragen (wenn er glaubt, eine Info nicht erhalten zu haben) oder Alice muss es nochmal rufen.

        UDP kommt gerne bei "real-time-communication" zum Einsatz, z.B. Radio/TV-Übertragung. Denn der Vorteil von UDP ist, dass es schlanker und schneller ist (und wenn mal ein einzelner Ton verloren geht, ist das eh nicht so schlimm. Einerseits kann man darauf einfacher verzichten, andererseits würde ein erneutes Senden der verlorenen Information ja gar nichts bringen (weil das Paket dann in der Regel so spät kommt, dass man diese Silbe eh nicht mehr brauchen kann).

        Leider kommt UDP auch bei Telefonie zum Einsatz - leider, denn die „Verbindungslosigkeit“ führt zu mehr Problemen hinter NAT-Routern usw. Darum gibt es auch viele Produkte (Skype, Teams, oder z.B. auch der SwyxWare-RemoteConnector, also ein quasi-VPN-Tunnel für den Zugriff über's Internet), die mit TCP arbeiten, um NAT-Probleme zu umgehen. Klassisches SIP aber läuft mit UDP.

          Feste und dynamische Ports

          Ich hatte ja eingangs schon erklärt, es gibt festgelegte Ports, z.B. TCP 443 ist https usw.

          Die gibt es auch bei UDP, z.B. läuft auch DNS über UDP und zwar auf Port 53. Und auch SIP läuft wie gesagt per UDP, der Standard-Port ist dort 5060.

          Darüber hinaus gibt es aber auch dynamische Ports:

          • Wenn Dein Browser www.vollzeitnerd.de aufruft, dann kommuniziert der zum Server hin auf dessen Port 443 (denn da wartet ein Apache auf Anfragen, um die Webseite auszuliefern). Dein Browser selbst nutzt als Absender aber einfach irgend einen Port (hohe Portnummer) aber ganz bestimmt nicht 443 (denn Dein Browser ist ja ein Browser und nicht selbst eine Webserver-Software, hat also auf Port 443 nichts zu suchen). Welchen Port, das legt in der Regel gar nicht der Browser, sondern der IP-Stack Deines Betriebssystems fest und das kann morgen ein ganz anderer sein.
          • Wenn Du ein IP-Telefonat führst, dann läuft auf Port UDP 5060 (Standard-Port für SIP) die sog. Signalisierung. Aber der eigentliche Ton aber wird auf anderen, dynamisch ausgehandelten Ports übertragen.

          Feedback