Byteorder bei Netzwerkkommunikation Netzwerkprogrammierung - Sockets Netzwerkprogrammierung - Verschiedenes



Ähnliche Dokumente
1 Communication Domain und Protokoll

J-1 Überblick. 1 Binden von Sockets. Besprechung 6. Aufgabe (jsh) Domain, z. B. (PF_ = Protocol Family) Byteorder bei Netzwerkkommunikation

U7-2 Netzwerkkommunikation und Byteorder

Attribute: Name (Zuweisung eines Namens durch Binding) Communication Domain Duplizieren von Filedeskriptoren. SoS I - Ü

Michael Golm, Universität Erlangen-Nürnberg, IMMD 4, 1999/ / Tafelübung 7. Netzwerkkommunikation und Byteorder

U8-3 Netzwerkkommunikation und Byteorder. U8-2 Evaluation. U8-4 Sockets. U8-1 Überblick. Wiederholung: Byteorder a2 b5 c8 0x14a2b5c8

7. Tafelübung. Socket - Erzeugung. Netzwerkkommunikation und Byteorder. Binden von Sockets. Lösung der jsh-aufgabe. Erläuterung der rshd-aufgabe

Übungen zu Systemprogrammierung I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2003 H-Uebung6.fm

in Kommentaren, die sich auf einen bestimmten Übungsleiter beziehen, bitte dessen Namen jeder Zeile voranstellen Evaluation

U7-1 Hinweise zur Evaluation. U7-2 Netzwerkkommunikation und Byteorder. U7-3 Sockets. Evaluation. Frage "eigener Aufwand zur Vor- und Nachbereitung"

Lösung Übungszettel 6

Rechnerübungen von Systemprogrammierung 1 und 2 finden gleichzeitig statt (Vgl. Univis "Rechnerübungen zu Systemprogrammierung 1&2") Organisatorisches

U1 Interprozesskommunikation mit Sockets U1 Interprozesskommunikation mit Sockets

1 Client-Server-Modell

Computer and Communication Systems (Lehrstuhl für Technische Informatik) Socket-Programmierung

Tafelübung zu BS 4. Interprozesskommunikation

# Socketprogrammierung

Rechnernetze II SS Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/ , Büro: H-B 8404

Rechnernetze II WS 2012/2013. Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/ , Büro: H-B 8404

Internetanwendungstechnik (Übung)

Transmission Control Protocol (TCP)

Netzwerk-Programmierung in C

Projekt: Web-Server. Foliensatz 9: Projekt Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2014

Dienstspezifikation nach RFC

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

An Open Interface for Network Programming under Microsoft Windows. DI. Dr. Peter René Dietmüller

Berkeley Sockets 187

Anbindung des eibport an das Internet

G.1 Überblick (2) G.1 Überblick (2) G.1 Überblick

Parallelisierung mit Hilfe von Netzwerkdiensten 218

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

Operating Systems Principles. Event Queue

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Rechnernetzwerke. Rechnernetze sind Verbünde von einzelnen Computern, die Daten auf elektronischem Weg miteinander austauschen können.

Kommunikations-Parameter

2.3 Applikationen. Protokolle: TCP/IP. Telnet, FTP, Rlogin. Carsten Köhn

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Step by Step Webserver unter Windows Server von Christian Bartl

Kontrollfragen: Internet

C.M.I. Control and Monitoring Interface. Zusatzanleitung: Datentransfer mit CAN over Ethernet (COE) Version 1.08

Anwendungsprotokolle: HTTP, POP, SMTP

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

D.1 Aufgabe2. D.1 eine einfache Kommunikationsschnittstelle. Infos zur Aufgabe2: Abstraktionen für das Kommunikationssystem.

Hilfestellung. ALL500VDSL2 Rev.B & ALL02400N. Zugriff aus dem Internet / Portweiterleitung / Fernwartung. Router. Endgeräte. lokales.

System-Programmierung 9: Sockets. CC BY-SA, Thomas Amberg, FHNW (soweit nicht anders vermerkt)

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

Projekt: Web-Proxy. Foliensatz 9: Projekt Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

15 Transportschicht (Schicht 4)

Virtual Private Network

Switching. Übung 7 Spanning Tree. 7.1 Szenario

Anleitung: Confixx auf virtuellem Server installieren

Netzwerkprogrammierung mit Sockets und C. Ulrich Vogel

Einführung in die Netzwerktechnik

Anleitung zur Einrichtung des USB-Speicherzugriffs (SharePort) Für DIR-506L (Stand April 2013)

Anleitung zur Nutzung des SharePort Utility

Referat von Sonja Trotter Klasse: E2IT1 Datum Jan Subnetting

TCP/UDP. Transport Layer

Collax PPTP-VPN. Howto

D.1 Aufgabe2. D.1 eine einfache Kommunikationsschnittstelle. einheitliche Kommunikationsschnittstellen: class CommunicationSystem {

Uni-Firewall. Absicherung des Überganges vom Hochschulnetz zum Internet am Wingate (Helmut Celina)

METTLER TOLEDO ETHERNET-Option

Anleitung Grundsetup C3 Mail & SMS Gateway V

Aufgabe 12.1b: Mobilfunknetzwerke

Voraussetzungen für die Nutzung der Format Rechenzentrumslösung (Hosting)

Einrichtung von VPN-Verbindungen unter Windows NT

How to install freesshd

Guide DynDNS und Portforwarding

Einführung in die Netzwerkprogrammierung mit Sockets und C

Lizenzen auschecken. Was ist zu tun?

1. Netzwerkprogrammierung für mobile Geräte

Rechnernetze II SS Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404

TCP SYN Flood - Attack. Beschreibung Auswirkungen Zuordnung zu Gefährdungskategorie und Attacken-Art Gegenmaßnahmen Quellen

Übersicht. Was ist FTP? Übertragungsmodi. Sicherheit. Öffentliche FTP-Server. FTP-Software

Da es sich in meinem Fall um einen USB-Scanner handelt, sollte dieser mittels

Client-Server mit Socket und API von Berkeley

Powermanager Server- Client- Installation

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

3 Das verbindungslose Vermittlungsprotokoll IP

VIRTUAL PRIVATE NETWORKS

Einführung in IP, ARP, Routing. Wap WS02/03 Ploner, Zaunbauer

Übungen zu Systemprogrammierung 2 (SP2)

IMAP und POP. Internet Protokolle WS 12/13 Niklas Teich Seite 1

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

DNS-325/-320 und FXP

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

Security + Firewall. 4.0 PPTP Client Einwahl. 4.1 Szenario

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

OP-LOG

FastViewer Remote Edition 2.X

Lehrer: Einschreibemethoden

HBF IT-Systeme. BBU-NPA Übung 4 Stand:

21 Netzwerkprogrammierung mit Sockets

Routing im Internet Wie findet ein IP Paket den Weg zum Zielrechner?

How-to: VPN mit PPTP und dem Windows VPN-Client. Securepoint Security System Version 2007nx

GEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT

Öffnen Sie den Internet-Browser Ihrer Wahl. Unabhängig von der eingestellten Startseite erscheint die folgende Seite in Ihrem Browserfenster:

CONVEMA DFÜ-Einrichtung unter Windows XP

Transkript:

U9 9. Übung U9 9. Übung Besprechung Aufgabe 7 (lash) Informationen zu Aufgabe 8 (simail) Byteorder bei Netzwerkkommunikation Netzwerkprogrammierung - Sockets Netzwerkprogrammierung - Verschiedenes U9.1

U9-1 Netzwerkkommunikation und Byteorder U9-1 Netzwerkkommunikation und Byteorder Wiederholung: Byteorder big endian 0 1 2 3 ca fe ba be 0xcafebabe little endian be ba fe ca Kommunikation zwischen Rechnern verschiedener Architekturen z. B. Intel Pentium (litte endian) und Sun Sparc (big endian) htons, htonl: Wandle Host-spezifische Byteordnung in Netzwerk- Byteordnung (big endian) um (htons für short int, htonl für long int) ntohs, ntohl: Umgekehrt U9.2

Endpunkte einer Kommunikationsverbindung Arbeitsweise: FIFO, bidirektional Attribute: Name (Zuweisung eines Namens durch Binding) Communication Domain Typ Protokoll U9.3

1 Communication Domain und Protokoll Communication Domain legt die Protokoll-Familie, in der die Kommunikation stattfindet, fest durch die Protokoll-Familie wird gleichzeitig auch die Adressierungsstruktur (Adress-Familie) festgelegt (war unabhängig geplant, wurde aber nie getrennt) das Protokoll-Attribut wählt das Protokoll innerhalb der Familie aus ursprünglich (bis BSD 4.3) existierten nur zwei Communication Domains UNIX-Domain Internet-Domain (PF_UNIX / AF_UNIX) (PF_INET / AF_INET) nur PF_INET ist generell vorhanden daneben derzeit ca. 25 Protokollfamilien definiert (ISO-Protokolle, DECnet, SNA, Appletalk, ) U9.4

2 Internet Domain Protokoll-Familie Protokolle: TCP/IP oder UDP/IP Internet Protocol - IP Netzwerkprotokoll zur Bildung eines virtuellen Netzwerkes auf der Basis mehrerer physischer Netze definiert Format der Datengrundeinheit - IP-Datagramm unzuverlässige Datenübertragung Routing-Konzepte (IP-Pakete über mehrere Zwischenstationen leiten) IP-Adressen: 4 Byte bei IPv4 bzw. 16 Byte bei IPv6 User Datagram Protocol - UDP IP adressiert Rechner, UDP einen Dienst (siehe Port-Nummern) Übertragung von Paketen (sendto, recvfrom), unzuverlässig (Fehler werden erkannt, nicht aber Datenverluste) Transmission Control Protocol - TCP zuverlässige Verbindung (Datenstrom) zu einem Dienst (Port) U9.5

2 Internet Domain Protokoll-Familie (2) Namen: IP-Adressen und Port-Nummern Internet-Adressen (IPv4) 4 Byte, Notation: a.b.c.d (z. B. 131.188.34.45) Port-Nummern bei IP definiert eine Adresse einen Rechner keine Möglichkeit, einen bestimmten Benutzer oder Prozess (Dienst) anzusprechen ) (vgl. Vorl. 7-95, Tor) die intuitive Lösung, als Ziel einen Prozess zu nehmen, hat Nachteile Prozesse werden dynamisch erzeugt und vernichtet Prozesse können ersetzt werden - die PID ändert sich dadurch Ziele sollten aufgrund ihrer Funktion (Dienst) ansprechbar sein Prozesse könnten mehrere Dienste anbieten (vgl. inetd ) Lösung: Port als "abstrakte Adresse" für einen Dienst Diensterbringer (Prozess) verbindet einen Socket mit dem Port U9.6

3 Socket-Typen Stream-Sockets unterstützen bidirektionalen, zuverlässigen Datenfluss gesicherte Kommunikation (gegen Verlust und Duplizierung von Daten) die Reihenfolge der gesendeten Daten bleibt erhalten Vergleichbar mit einer pipe allerdings bidirektional (UNIX-Domain- und Internet-Domain-Sockets mit TCP/IP) Datagramm-Sockets unterstützen bidirektionalen Datentransfer Datentransfer unsicher (Verlust und Duplizierung möglich) die Reihenfolge der ankommenden Datenpakete stimmt nicht sicher mit der der abgehenden Datenpakete überein Grenzen von Datenpaketen bleiben im Gegensatz zu Stream-Socket-Verbindungen erhalten (Internet-Domain-Sockets mit UDP/IP) U9.7

4 Client-Server-Modell Ein Server ist ein Programm, das einen Dienst (Service) anbietet, der über einen Kommunikationsmechanismus erreichbar ist (vgl. Vorl. 7-93, ungleichberechtigte Kommunikation) Server akzeptieren Anforderungen, die von der Kommunikationsschnittstelle kommen führen ihren angebotenen Dienst aus schicken das Ergebnis zurück zum Sender der Anforderung Server sind normalerweise als normale Benutzerprozesse realisiert Client ein Programm wird ein Client, sobald es eine Anforderung an einen Server schickt und auf eine Antwort wartet U9.8

5 Generieren eines Sockets Sockets werden mit dem Systemaufruf socket(2) angelegt #include <sys/socket.h> int socket(int domain, int type, int protocol); domain, z. B. PF_INET: Internet PF_UNIX: Unix Filesystem (PF_ = Protocol Family) type in PF_INET und PF_UNIX Domain: SOCK_STREAM: Stream-Socket (bei PF_INET = TCP-Protokoll) SOCK_DGRAM: Datagramm-Socket (bei PF_INET = UDP-Protokoll) protocol Default-Protokoll für Domain/Type Kombination: 0 (z.b. INET/STREAM -> TCP) (siehe getprotobyname(3)) U9.9

6 Namensgebung Sockets werden ohne Namen generiert durch den Systemaufruf bind(2) wird einem Socket ein Name zugeordnet int bind(int s, const struct sockaddr *name, socklen_t namelen); s: socket name: Protokollspezifische Adresse Socket-Interface (<sys/socket.h>) ist zunächst protokoll-unabhängig struct sockaddr { sa_family_t sa_family; /* Adressfamilie */ char sa_data[14]; /* Adresse */ }; im Fall von AF_INET: IP-Adresse / Port es wird konkret eine struct sockaddr_in übergeben namelen: Länge der konkret übergebenen Adresse in Bytes U9.10

7 Namensgebung für TCP-Sockets Name eines TCP-Sockets durch IP-Adresse und Port-Nummer definiert struct sockaddr_in { sa_family_t sin_family; /* = AF_INET */ in_port_t sin_port; /* Port */ struct in_addr sin_addr; /* Internet-Adresse */ char sin_zero[8]; /* Füllbytes */ }; sin_port: Port-Nummer Port-Nummern sind eindeutig für einen Rechner und ein Protokoll Port-Nummern < 1024: privilegierte Ports für root (in UNIX) (z.b. www=80, Mail=25, finger=79) Portnummer = 0: die Portnummer soll vom System gewählt werden Portnummern sind 16 Bit, d.h. kleiner als 65536 sin_addr: IP-Adresse, mit gethostbyname(3) zu finden INADDR_ANY: wenn Socket auf allen lokalen Adressen (z. B. allen Netzwerkinterfaces) Verbindungen akzeptieren soll U9.11

8 Binden eines TCP-Socket Beispiel Adresse und Port müssen in Netzwerk-Byteorder vorliegen! Beispiel #include <sys/types.h> #include <netinet/in.h>... struct sockaddr_in sin;... s = socket(pf_inet, SOCK_STREAM, 0); sin.sin_family = AF_INET; sin.sin_addr.s_addr = htonl(inaddr_any); sin.sin_port = htons(myport); bind(s, (struct sockaddr *) &sin, sizeof(sin)); U9.12

9 Verbindungsannahme durch Server Server: listen(2) stellt ein, wie viele ankommende Verbindungswünsche gepuffert werden können (d.h. auf ein accept wartend) accept(2) nimmt Verbindung an: accept blockiert solange, bis ein Verbindungswunsch ankommt es wird ein neuer Socket erzeugt und an remote Adresse + Port (Parameter from) gebunden lokale Adresse + Port bleiben unverändert dieser Socket wird für die Kommunikation benutzt der ursprüngliche Socket kann für die Annahme weiterer Verbindungen genutzt werden struct sockaddr_in from; socklen_t fromlen;... listen(s, 5); /* Allow queue of 5 connections */ fromlen = sizeof(from); newsock = accept(s, (struct sockaddr *) &from, &fromlen); U9.13

10 Verbindungsaufbau durch Client Client: connect(2) meldet Verbindungswunsch an Server connect blockiert solange, bis Server Verbindung mit accept annimmt Socket wird an die remote Adresse gebunden Kommunikation erfolgt über den Socket falls Socket noch nicht lokal gebunden ist, wird gleichzeitig eine lokale Bindung hergestellt (Port-Nummer wird vom System gewählt) struct sockaddr_in server;... connect(s, (struct sockaddr *)&server, sizeof server); Eine Verbindung ist eindeutig gekennzeichnet durch <lokale Adresse, Port> und <remote Adresse, Port> U9.14

11 Verbindungsaufbau und Kommunikation Beispiel: Server, der alle Eingaben wieder zurückschickt fd = socket(pf_inet, SOCK_STREAM, 0); /* Fehlerabfrage */ name.sin_family = AF_INET; name.sin_port = htons(port); name.sin_addr.s_addr = htonl(inaddr_any); bind(fd, (const struct sockaddr *)&name, sizeof(name)); /* Fehlerabfrage */ listen(fd, 5); /* Fehlerabfrage */ in_fd = accept(fd, NULL, 0); /* Fehlerabfrage */ /* hier evtl. besser Kindprozess erzeugen und eigentliche Kommunikation dort abwickeln */ for(;;) { } n = read(in_fd, buf, sizeof(buf)); /* Fehlerabfrage */ write(in_fd, buf, n); /* Fehlerabfrage */ close(in_fd); U9.15

12 Schließen einer Socketverbindung close(s) shutdown(s, how) how: SHUT_RD: verbiete Empfang (nächstes read liefert EOF) SHUT_WR: verbiete Senden (nächstes write führt zu Signal SIGPIPE) SHUT_RDWR: verbiete Senden und Empfangen 13 Verbindungslose Sockets Für Kommunikation über Datagramm-Sockets kein Verbindungsaufbau notwendig Systemaufrufe sendto(2) recvfrom(2) Datagramm senden Datagramm empfangen Besonderheit: Broadcasts über Datagramm-Sockets (Internet Domain) U9.16

14 TCP-Sockets: Zusammenfassung Server Client socket bind listen accept read/write shutdown/close Verbindungsaufbau Kommunikation Verbindungsabbau socket connect read/write shutdown/close U9.17

15 Sockets und UNIX-Standards Sockets sind nicht Bestandteil des POSIX.1-Standards Sockets stammen aus dem BSD-UNIX-System, sind inzwischen Bestandteil von BSD (-D_BSD_SOURCE) SystemV R4 (-DSVID_SOURCE) UNIX 95 (-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1) UNIX 98 (-D_XOPEN_SOURCE=500) U9.18

U9-3 Netzwerk-Programmierung - Verschiedenes U9-3 Netzwerk-Programmierung - Verschiedenes Parametrierung eines Sockets abfragen / setzen getsockopt(2), setsockopt(2) Informationen über Socket-Bindung getpeername(2) Namen der mit dem Socket verbundenen Gegenstelle abfragen getsockname(2) Namen eines Sockets abfragen Hostnamen und -adressen ermitteln gethostbyname(3) U9.19

1 getsockname, getpeername U9-3 Netzwerk-Programmierung - Verschiedenes #include <sys/socket.h> int getsockname(int s, struct sockaddr *addr, socklen_t *addrlen); int getpeername(int s, struct sockaddr *addr, socklen_t *addrlen); Informationen über die lokale Adresse des Socket struct sockaddr_in server; socklen_t len; len = sizeof(server); getsockname(sock, (struct sockaddr *) &server, &len); printf("socket port #%d\n", ntohs(server.sin_port)); Informationen über die remote Adresse des Socket struct sockaddr_in server; socklen_t len; len = sizeof(server); getpeername(sock, (struct sockaddr *) &server, &len); printf("socket port #%d\n", ntohs(server.sin_port)); Benutzerprogramm port Client peer Server U9.20

2 Hostnamen und Adressen U9-3 Netzwerk-Programmierung - Verschiedenes gethostbyname liefert Informationen über einen Host #include <netdb.h> struct hostent *gethostbyname(const char *name); struct hostent { char *h_name; /* offizieller Rechnername */ char **h_aliases; /* alternative Namen */ int h_addrtype; /* = AF_INET */ int h_length; /* Länge einer Adresse */ char **h_addr_list; /* Liste von Netzwerk-Adressen, abgeschlossen durch NULL */ }; gethostbyaddr sucht Host-Informationen für bestimmte Adresse struct hostent *gethostbyaddr(const void *addr, size_t len, int type); U9.21

U9-3 Netzwerk-Programmierung - Verschiedenes 3 Socket-Adresse aus Hostnamen erzeugen char *hostname = "faui07a"; struct hostent *host; struct sockaddr_in saddr; host = gethostbyname(hostname); if(!host) { perror("gethostbyname()"); exit(exit_failure); } memset(&saddr, 0, sizeof(saddr)); /* Struktur initialisieren */ memcpy(&saddr.sin_addr, host->h_addr, host->h_length); saddr.sin_family = AF_INET; saddr.sin_port = htons(port); /* saddr verwenden... z.b. bind oder connect */ U9.22