Lokale Netze (LAN) — TCP und UDP
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:
| Source Port | 2 Byte |
|---|---|
| Destination Port | 2 Byte |
| Sequence Number | 4 Byte |
| Acknowledge Number | 4 Byte |
Data Offset / Control FlagsDDDDxxxxxxUAPRSF
|
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):
| 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:
| 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.