![]() |
![]() |
![]() |
![]() |
Ich zitiere: "Als Routing bezeichnet man die Verteilung der Pakete zwischen verschiedenen Rechnern. Das wesentliche Hilfsmittel dabei ist die sogenannte Routingtable, die anhand der Zieladresse einen Weg zum Zielrechner bestimmt. Wenn ein Zielrechner nicht im lokalen Netz ist, muß ein weiterer Rechner als vermittelndes System, dem Gateway, bestimmt werden."
" Ein Gateway ist ein Computer mit zwei Netzwerkanschlüssen, die jeweils an ein anderes Netz angeschlossen sind. Jede Schnittstelle hat eine eigene Internet-Nummer, die dem entsprechenden Netzwerk zugeordnet ist. Kommt ein Paket auf der einen Netzwerkkarte für das jeweils andere Netz an, weiß der Computer, dass er sie in das andere Netz einspeisen kann. "
Etwas ausführlicher: Das IP-Protokoll übermittelt Pakete zu einer Ziel-Adresse, und die Aufgabe, wie solch ein Paket zu seinem Ziel findet, bezeichnet man als Routing. Das IP-Protokoll geht davon aus, das ein Computer an ein lokales Netzwerk angeschlossen ist. Im eigenen Netzwerk kann der Computer dann Pakete verschicken. Problem: jetzt soll ein Paket an einen anderen Rechner in einem anderen Netzwerk gesendet werden. Anschaulich: Die Computer in unserem Netzwerk haben alle IP-Nummern folgender Bauart:
192.168.0.xx
Wir verschicken jetzt ein Paket an die Adresse 62.216.178.200 (turboliesel.planet-school.de, auf diese TCP/IP-Adresse führt die URL: http://www.wspiegel.de, warum eigentlich? Und: Was bedeutet URL?) Die Lösung unseres Problem ist ein Gateway, also ein Rechner mit zwei Netzwerkkarten, wobei in unserem Falle die zweite Netzwerkkarte über DSL ins Internet führt. Auf dem Gateway muss ein Programm Pakete aus unserem Netzwerk in die weite Welt weiterleiten können.
Jeder Rechner im Netz hat eine Tabelle mit Netzwerkadressen, und jeder Netzwerkadresse ist ein Gateway zugeordnet, das für die Weiterleitung der Pakete zu dem betreffenden Netzwerk verantwortlich ist. Wenn also ein Paket versendet wird, schaut der Computer in seiner Tabelle nach, welches Gateway für die Weiterleitung zuständig ist. Damit die sogenannten Routing-Tabellen nicht zu groß werden, führt man "Default-Routen" über ein "Default-Gateway" ein: aus unserem Netzwerk kommt man sowieso nur über den Proxy-Server hinaus, also wäre es nicht sinnvoll, wenn jeder Rechner im Netz eine Routing-Tabelle mit mehreren hundert Einträgen hätte, die zudem noch ständig aktualisert werden müsste! Auch für das Routing gibt es wieder ein Protokoll: RIP=Routing Information Protocol. Unter Windows kannst du dir über den Befehl
Informationen über die Routing-Tabelle auf deinem PC beschaffen.
Aufgabe: Finde über Netzwerkumgebung, rechte Maustaste und dann Eigenschaften heraus, auf welches Gateway dein Rechner verweist. Suche nach einem Gateway-Eintrag, das sollte eine Adresse sein ähnlich der folgenden: 192.168.0.xx
vom letzten Mal:
1 from socket import * # get socket constructor and constants 2 myHost = 'localhost' # server machine, '' means local host 3 myPort = 8888 # listen on a non-reserved port number 4 5 sock = socket(AF_INET, SOCK_STREAM) # make a TCP socket object 6 try: # versuche Verbindungsaufbau 7 sock.connect((myHost, myPort)) # mit dem Server verbinden 8 9 print "Verbunden mit dem TCP-Server!" 10 daten = "Hier der einfache Client!" 11 sock.sendall(daten) # daten senden 12 print "Gesendet:", daten 13 antwort = sock.recv(1024) # antwort vom Server erhalten 14 print "Antwort:", antwort 15 daten = raw_input('Eingabe: ') 16 while len(daten) > 0: # Solange senden, bis leere Eingabe! 17 sock.sendall(daten) 18 print "Gesendet:", daten 19 antwort = sock.recv(1024) 20 print "Antwort:", antwort 21 daten = raw_input('Eingabe: ') 22 sock.close() # socket-Verbindung beenden 23 print 'Das wars . . .' 24 except: # falls keine Verbindung möglich 25 print "Server temporary unavailable!"
und eine kleine Erklärung:
import *
bedeutet: importiere alles. Aus der Socket-Bibliothek benutzen wir in Zeile 5 die socket-Klasse und erzeugen uns einen "Socket"!
connect
aufzubauen. Da der Verbindungsaufbau aus vielerlei Gründen schief gehen kann, wird das ganze in eine try-except
-Vereinbarung eingeklammert; ähnlich macht mans, wenn man auf Dateien zugreifen will.
sock.sendall()
und sock.recv()
, siehe Zeile 11/13 bzw. 17/19)
Beachte: Damit die "Kommunikation" zwischen Client und Server gelingt, müssen sich beide an Regeln halten, soll heißen: der Server muss richtig auf die gesendeten Daten des Clients reagieren und umgekehrt. So etwas nennt man manchmal auch ein Protokoll . . .
while-
Schleife beendet, so schliessen wir auch die Verbindung zum Server (siehe Zeile 22) und sagen "Ciao" (Zeile 23)
except-
Zweig in Zeile 24 wird ausgeführt, wenn keine Verbindung zum Server zustande kommt (siehe Zeile 6/7).
In den Aufgaben proben wir die Anpassung an einen Server, der eine Passwort-Abfrage (!) vorgeschaltet hat!
<<<findest du auf dem Web-Server "muenchen", Adresse: 192.168.0.33 unter Lokal => Informatik (W. Spiegel) => Netzwerk
simpleTCPServer02.py
route print
und vergleiche mit dem Ergebnis oben!
simpleTCPServer02.py
vom Webserver und bringe den Client zum Absturz (!). Beachte: Server und Client laufen bei dir lokal (=> localhost).
Verbunden mit dem TCP-Server! Gesendet: Hier der einfache Client! Password: ***** Gesendet: ***** Antwort: Hallo, 127.0.0.1 Eingabe: Bin ich wirklich drin Gesendet: Bin ich wirklich drin Antwort: Echo <Bin ich wirklich drin> von 127.0.0.1 Eingabe: Oh ja Gesendet: Oh ja Antwort: Echo <Oh ja> von 127.0.0.1 Eingabe: Das wars . . .Passe deinen Client entsprechend an und behandle auch den Fall des fehlerhaften Passwortes. Tipp: Teste auf das
Sorry
des Servers (siehe unten) bei fehlerhafter Anmeldung über den Python-Befehl: meineZeichenkette.startswith("Sorry",0)
, informiere dich auch in der Python-Dokumentation auf dem Webserver unter Lokal => Informatik über diesen Befehl.Verbunden mit dem TCP-Server! Gesendet: Hier der einfache Client! Password: infogk Gesendet: infogk Antwort: Sorry, wrong place, wrong time, . . . Das wars . . .Viel Glück!