IPs
IP steht für Internet Protocol und bezeichnet eine Adresse eines Teilnehmers in einem Netzwerk. 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.1:4444 // Eigener Rechner (IP 127.0.0.1), 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.255: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 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.1:4444 // Eigener Rechner (IP 127.0.0.1), 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 49152-65535 vergeben werden; eine Übersicht vergebener TCP und UDP Port Nummern findet man auf Wikipedia.
Weiterführende Links UDP
- de:User Datagram
- Writing a simple UDP client/server in a Unix Environment
- OSC - Open Sound Control
APIs
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.
JAVA Socket
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
}
PHP Socket
Beispiel eines ROT13 Servers in PHP (basiert auf java2s.com Beispielcode):
<?
$socket = socket_create_listen("55555");
if (!$socket) {
print "Failed to create socket!\n";
exit;
}
while (true) {
$client = socket_accept($socket);
$welcome = "\nHello\n";
socket_write($client, $welcome);
while (true) {
if ($input == '!close') { break; }
if ($input == '!halt') {
socket_close ($client);
break;
}
$output = str_rot13($input) . "\n";
socket_write($client, $output);
print "In: $input, Out: $output\n";
}
socket_close ($client);
}
socket_close ($socket);
?>
weiterführende Links:
- BSD Sockets
- weitere Beispiele (z.B. für Processing) sind unter OSC zu finden!
Datagram
Datagram Socket (JAVA Client/Server)
// code von
// http://www.java2s.com/Code/Java/Network-Protocol/UseDatagramSockettosendoutandreceiveDatagramPacket.htm
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ChatClient {
public static void main(String[] args) throws Exception {
DatagramSocket s = new DatagramSocket();
byte[] buf = new byte[1000];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
InetAddress hostAddress = InetAddress.getByName("localhost");
while (true) {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String outMessage = stdin.readLine();
if (outMessage.equals("bye"))
break;
String outString = "Client say: " + outMessage;
buf = outString.getBytes();
DatagramPacket out = new DatagramPacket(buf, buf.length, hostAddress, 9999);
s.send(out);
s.receive(dp);
String rcvd = "rcvd from " + dp.getAddress() + ", " + dp.getPort() + ": "
+ new String(dp.getData(), 0, dp.getLength());
System.out.println(rcvd);
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ChatServer {
public static void main(String[] args) throws Exception {
int PORT = 4000;
byte[] buf = new byte[1000];
DatagramPacket dgp = new DatagramPacket(buf, buf.length);
DatagramSocket sk;
sk = new DatagramSocket(PORT);
System.out.println("Server started");
while (true) {
sk.receive(dgp);
String rcvd = new String(dgp.getData(), 0, dgp.getLength()) + ", from address: "
+ dgp.getAddress() + ", port: " + dgp.getPort();
System.out.println(rcvd);
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String outMessage = stdin.readLine();
buf = ("Server say: " + outMessage).getBytes();
DatagramPacket out = new DatagramPacket(buf, buf.length, dgp.getAddress(), dgp.getPort());
sk.send(out);
}
}
}
also see:
*nix Tools
Lustige Tools im Terminal bzw. Konsole:
- arp <hostname.domain>
- ping -c 3 <ip>
- host <domain> bzw: host -a <domain>
- whois <domain>
- traceroute <domain>
- netstat -an
- ifconfig
Pitfalls
Links
siehe "weiterführende Links" unter den einzelnen Sektionen und:
- Web-Technologie Vorlesung bei Prof. Benno Stein
- Lecture Notes Network Protocols 1 von Prof. Benno Stein
- Lecture Notes Network Protocols 2 von Prof. Benno Stein
- Was waren noch mal Bits und Bytes?
Diese Seite ist Teil des Werkmoduls Das Netz: Kybernetischer Raum von Michael Markert für Interface Design / Fakultät Medien an der Bauhaus-Universität Weimar.