IPs
IP steht für Internet Protocol und bezeichnet eine Adresse in einem Netzstrukturen. Aktuell sind noch IPv4-Adressen im Einsatz, aufgrund der rasant ansteigenden Zahlen vorhandener Computer stößt man auch mit Konzepten wie dynamisch vergebenen IP-Adressen langsam an die Grenzen der maximalen Anzahl zu vergebender Nummern. In Zukunft wird jeder Rechner eine IPv6-Adresse haben.
127.0.0.0:4444 // Eigener Rechner (IP 127.0.0.0), Port# 4444
192.168.1.11:5555 // IP im lokalen Netzwerk 192.168.1.11, Port# 5555
0.0.0.0:45678 // Aktuelle Netzadresse, Port#45678.
// Bei UDP kann diese Adresse für einen Broadcast im lokalen Netzwerk genutzt werden.
255.255.255.2555:2222 // Broadcast (z.B. von DHCP oder BOOTP genutzt) auf Port#2222
2001:0db8:85a3:08d3:1319:8a2e:0370:7344 // Bsp. einer IPv6 Adresse in hexadezimal-Notierung (ohne Port)
IP-Adressen sind für Menschen schwer zu merken, deshalb gibt es für Menschen lesbare Adressen (Hostnamen). Ein DNS (Domain Name Server) hilft dabei, eine Adresse wie uni-weimar.de in eine IP Adresse aufzulösen.
Weiterführende Links:
- IP-Adressen inkl. Übersicht über reservierte IP-Adressräume
- DNS - Domain Name Server
- IP-Adress-Typen:
Ports
Jeder Rechner verfügt über Ports, sozusagen Postfächer, an denen verschiedene Programme lauschen, ob für sie eine Nachricht eintrifft. Eigene Ports sollten am besten im Bereich von 49152 bis 65535 vergeben werden; eine Übersicht vergebener TCP und UDP Port Nummern findet man auf Wikipedia. Übliche Ports sind z.B. 80 für http, 21 für ftp, 110 für POP3, 5190 für ICQ usw...
- 0-255: TCP/IP-Anwendungen (System, reserviert)
- 256-1023: Unix-Anwendungen (System, reserviert)
- 1024-49151: Von der IANA verwaltete Port-Nummern
- 49152-65535: Dynamische Port-Nummern für den "privaten" Gebrauch
Weiterführende Links:
- Ports inkl. Übersicht üblicher Ports
- Übersicht vergebener TCP und UDP Port Nummern
TCP
TCP/IP (Transmission Control Protocol / Internet Protocol) ist (v.a. im Unterschied zu UDP) ein verbindungsorientiertes Transportprotokoll. D.h. es wird zuerst eine Verbindung aufgebaut, bevor der eigentliche Datentransfer beginnt. Dies ist zwar sicher (damit ist nicht sicher im Sinne von verschlüsselt oder abhörsicher gemeint!), aber bringt auch einen gewissen Overhead mit.
Weiterführende Links:
UDP
UDP (User Datagram Protocol), auch oft scherzhaft mit Unreliable Data Protocol übersetzt ist ein verbindungsloses Transportprotokoll. D.h. es wird keine Verbindung aufgebaut, sondern die Datenpakete werden ins Blaue geschickt. Es gibt keine Garantie, dass das Paket auch ankommt! Tatsächlich sollte man sich in der Praxis nicht sonderlich wundern, wenn eines von 10 Paketen nicht ankommt, auch wenn ein Verlust von 1:100 vermutlich der "normalere" Wert ist.
Der Empfänger kann dem Sender antworten, da die Absenderadresse mit übertragen wird.
Man kann ein Datenpaket z.B. an eine bekannte IP Adresse und einen bestimmten Port im lokalen (oder globalen) Netzwerk senden. Eine Besonderheit bei UDP ist die Möglichkeit Nachrichten an die IP 0.0.0.0 zu senden, was einer "Rundmail" gleichkommt. Natürlich empfangen nur Rechner diese Nachricht, auf denen ein Programm läuft, das auf Nachrichten an dem entsprechenden Port wartet (Port-Listener).
127.0.0.0:4444 // Eigener Rechner (IP 127.0.0.0), Port# 4444
192.168.1.11:5555 // IP im lokalen Netzwerk 192.168.1.11, Port# 5555
0.0.0.0:45678 // UDP-Broadcast im lokalen Netzwerk auf Port#45678
Achtung: Eigene Ports sollten am besten im Bereich von 1024 bis 49151 vergeben werden; eine Übersicht vergebener TCP und UDP Port Nummern findet man auf Wikipedia.
Weiterführende Links UDP
- User Datagram Protocol
- Writing a simple UDP client/server in a Unix Environment
- OSC - Open Sound Control
Sockets
Protokolle wie TCP und UDP sind abstrakte Dienste, die die Struktur von Computer-Kommunikation definieren. Programmierer benutzen für TCP und UDP Operationen Sockets, manchmal auch BSD-Sockets genannt. Sockets sind in jedem Betriebssystem zu finden.
Socket-Beispiel JAVA
Die (Programmiersprache) Java als plattformunabhängige unterstützt im Paket java.net
die Socket-Programmierung: Folgendes Kurzbeispiel zeigt die Verwendung der Klassen Socket
und ServerSocket
:
ServerSocket serverSocket = new ServerSocket(port); // Serversocket mit bestimmter Port-Nummer erstellen
while(true) {
Socket clientSocket = serverSocket.accept(); // auf Anfragen warten
InputStream input = clientSocket.getInputStream(); // InputStream-Objekt öffnen
byte[] data = new byte[1024]; // Datenpuffer deklarieren (anlegen)
int NumBytes = 0; // Variable für Anzahl der tatsächlich gelesenen Bytes
NumBytes = input.read(data); // Daten lesen
/*** gelesene Daten verarbeiten ***/
clientSocket.close(); // Verbindung schließen
}
weiterführende Links:
Links
siehe "weiterführende Links" unter den einzelnen Sektionen und:
- Lecture Notes Network Protocols 1 von Prof. Benno Stein
- Lecture Notes Network Protocols 2 von Prof. Benno Stein