Wolfgang Lösch

Contact© Wolfgang Lösch

Lokale Netze (LAN) — TCP und UDP

Stand: 2007 (weitere Aktualisierung eingestellt)

In protocol design, perfection has been reached not when there is nothing left to add, but when there is nothing left to take away.

R. Callon, The Twelve Networking Truths, April 1996

Die Aufgabe der Transportschicht ist die Gewährleistung eines zuverlässigen und effizienten Datentransports zwischen zwei Endsystemen. Hierfür werden einem Transportdienst-Benutzer (Transport Service User) entsprechende Dienste zu Verfügung gestellt. Bei echter OSI-Kommunikation ist als Transportdienst-Benutzer ausschließlich die Sitzungsschicht vorgesehen. In der Internet-Protokollwelt setzen jedoch die Anwendungsdienste dirket auf der Transportschicht auf, d.h. Anwendungsprozesse erscheinen direkt als Transportdienst-Benutzer.

Die meisten Anwendungen arbeiten verbindungsorientiert und setzen daher einen verbindungsorientierten Transportdienst voraus. Da bei LANs in den unteren 3 Schichten die verbindungslosen, unbestätigten Dienste vorherrschen, die keine zuverlässige, gesicherte Kommunikation ermöglichen, muss die Transportschicht außerdem Mechanismen zur ausgiebigen Fehlerbehandlung (z.B. bei verlorengegangenen, duplizierten oder durcheinandergewürfelten Datenpaketen), zur Flusskontrolle und zur Behandlung sonstiger ungewöhnlicher Situationen bereitstellen.

Transmission Control Protocol (TCP)

Das neben IP wohl bekannteste Protokoll der Internet-Protokollfamilie ist das Transmission Control Protocol (TCP). Es handelt sich hierbei um ein verbindungsorientiertes Transportprotokoll, das eine gesicherte Ende-zu-Ende-Verbindung zwischen zwei Systemen (Hosts) ermöglicht. Die Endpunkte einer Transportverbindung heißen Ports. Die Verkettung von IP-Adresse und Port-Nummer heißt Socket.

Ein TCP-Paket, das im Internet-Jargon auch als TCP-Segment bezeichnet wird, setzt sich aus folgenden Feldern zusammen:

Aufbau eines TCP-Paketes
Source Port 2 Byte
Destination Port 2 Byte
Sequence Number 4 Byte
Acknowledge Number 4 Byte
Data Offset / Control Flags
DDDDxxxxxxUAPRSF
2 Byte
Window 2 Byte
Checksum 2 Byte
Urgent Pointer 2 Byte
Options / Padding 4 Byte
Data  
Source Port:
Port-Nummer des Anwendungsprozesses im Sender.
Destination Port:
Port-Nummer des Anwendungsprozesses im Empfänger.
Sequence Number:
Durchnumerierung der vom Sender an den Empfänger gesendeten Datenpakete.
Acknowledgement Number:
Durchnumerierung der vom Empfänger an den Sender verschickten Quittungen zur Bestätigung von erhaltenen Datenpaketen.
Data Offset (4 bit):
Länge des TCP-Headers in Vielfachen von 4 Byte (d.h. danach beginnt das Daten-Feld).
Control Flags:
Urgent Bit (URG) U: Urgent Pointer gesetzt,
Acknowledgement Bit (ACK) A: Quittungsnummer gültig,
Push Bit (PSH) P: Daten sofort an Anwendungsprozess übergeben,
Reset Bit (RST) R: Transport-Verbindung zurücksetzen,
Synchronize Stream Bit (SYN) S: Verbindung aufbauen,
Finished Bit (FIN) F: Verbindung abbauen.
Window:
Fenstergröße (in Bytes), mit der der Empfänger dem Sender anzeigt, wieviel Daten er noch in seinen Puffer aufnehmen kann.
Checksum:
Prüfsumme über das gesamte TCP-Paket.
Urgent Pointer:
Zeiger auf das Ende von dringlichen Daten (d.h. danach beginnen die eigentlichen Nutzdaten).
Options:
Angabe von Service-Optionen (z.B. für die Maximum Segment Size (MSS), die standardmäßig auf 536 Byte gesetzt ist).
Padding:
Füll-Bits für die Ergänzung auf 32 bit.
Data:
Daten.

Beim Verbindungsaufbau wird ein Verfahren verwendet, das als Three Way Handshake bekannt ist. Die Instanz, die eine Verbindung aufbauen möchte, sendet eine Anfrage mit SYN=1 und ACK=0. Die Partnerinstanz sendet eine Bestätigung mit SYN=1 und ACK=1. Daraufhin bestätigt die aufbauwillige Instanz diese Bestätigung wiederum mit SYN=0 und ACK=1. Sowie die Partnerinstanz diese (zweite) Bestätigung erhalten hat, ist die TCP-Verbindung eingerichtet.

Port-Nummern

Port-Nummern werden in 3 Bereiche eingeteilt:

Well Known Ports (0 – 1023):
Diese Ports sind bestimmten Anwendungen und Diensten auf Server-Seite für eine erste Kontaktaufnahme fest zugeordnet und können nur von System-Prozessen genutzt werden.
Registered Ports (1024 – 49151):
Diese Ports sind ebenfalls bestimmten Anwendungen und Diensten für eine erste Kontaktaufnahme fest zugeordnet (Server oder Client) und können sowohl von System-Prozessen, als auch von durch Anwender gestarteten Prozessen genutzt werden.
Dynamic Ports / Private Ports (49152 – 65535):
Diese Ports können von jeder Anwendung und jedem Dienst frei genutzt werden.

Die folgende Tabelle zeigt eine kleine Auswahl an sogenannten Service Contact Ports (Well Known Ports und Registered Ports):

Service Contact Ports (Well Known Ports / Registered Ports)
Port-Nummer (dez) Anwendung oder Dienst
20 File Transfer Protocol (ftp-data)
21 File Transfer Protocol (ftp-control)
23 Telnet Protocol
25 Simple Mail Transfer Protocol (smtp)
53 Domain Name Server (dns)
67 Bootstrap Protocol Server (bootps)
68 Bootstrap Protocol Client (bootpc)
80 World Wide Web (www-http)
110 Post Office Protocol v3 (pop3)
135 DCE Endpoint Resolution (epmap)
137 NetBIOS Name Service (netbios-ns)
138 NetBIOS Datagram Service (netbios-dgm)
139 NetBIOS Session Service (netbios-ssn)
143 Internet Message Access Protocol (imap)
161 Simple Network Management Protocol (snmp)
443 HTTP Protocol Over TLS/SSL (https)
445 Microsoft Directory Service (microsoft-ds)
515 Printer Spooler
593 HTTP RPC Endpoint Mapper (http-rpc-epmap)
1433 Microsoft-SQL-Server (ms-sql-s)
1434 Microsoft-SQL-Monitor (ms-sql-m)

Das Kommando netstat

Mit dem Zeilenkommando netstat kann man sich aktuelle TCP-Verbindungen und die Protokollstatistik von TCP, sowie weitere Statistikinformationen zu Ethernet, IP, ICMP, TCP und UDP anzeigen lassen. Unter Windows 2000 sieht die Syntax folgendermaßen aus:


  netstat [-a] [-e] [-n] [-s] [-p Proto] [-r] [Intervall]

  -a            Zeigt den Status aller Verbindungen an. (Verbindungen
                des Servers werden normalerweise nicht angezeigt).
  -e            Zeigt die Ethernetstatistik an. Kann mit der Option -s
                kombiniert werden.
  -n            Zeigt Adressen und Portnummern numerisch an.
  -p Proto      Zeigt Verbindungen für das mit Proto angegebene Protokoll
                an.
                Proto kann TCP oder UDP sein. Bei Verwendung mit der
                Option -s kann Proto TCP, UDP oder IP sein.
  -r            Zeigt den Inhalt der Routingtabelle an.
  -s            Zeigt Statistik protokollweise an. Standardmäßig werden
                TCP, UDP und IP angezeigt. Mit der Option -p können Sie dies
                weiter einschränken.
  Intervall     Zeigt die gewählte Statistik nach der mit Intervall angege-
                benen Anzahl von Sekunden erneut an. Drücken Sie STRG+C zum
                Beenden der Intervallanzeige. Ohne Intervallangabe werden
                die aktuellen Konfigurationsinformationen einmalig
                angezeigt.

User Datagram Protocol (UDP)

Als Pendant zum verbindungsorientierten TCP gibt es auch ein verbindungsloses Transportprotokoll, das einen verbindungslosen Transportdienst zur Verfügung stellt, nämlich das User Datagram Protocol (UDP). Das Protokoll wird z.B. für den Betrieb der Protokolle Network File System (NFS) und Simple Network Management Protocol (SNMP) benötigt. Alle in der obigen Tabelle aufgelisteten Port-Nummern gelten auch für UDP. Ein UDP-Datagramm hat folgenden Aufbau:

Aufbau eines UDP-Datagramms
Source Port 2 Byte
Destination Port 2 Byte
Length 2 Byte
Checksum 2 Byte
Data  
Source-Port:
Port-Nummer des Anwendungsprozesses im Sender.
Destination-Port:
Port-Nummer des Anwendungsprozesses im Empfänger.
Length:
Größe des UDP-Datagrammes.
Checksum:
Prüfsumme über das gesamte UDP-Datagramm.
Data:
Daten.