Programowanie sieciowe



Podobne dokumenty
Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Gniazda BSD. komunikacja bezpołączeniowa

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła

Programowanie przy użyciu gniazdek

Iteracyjny serwer TCP i aplikacja UDP

Programowanie aplikacji równoległych i rozproszonych. Wykład 4

Gniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl

Podstawowe typy serwerów

Gniazda. S. Samolej: Gniazda 1

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

2. Interfejs gniazd Gniazdo

Klient-Serwer Komunikacja przy pomocy gniazd

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

Komunikacja sieciowa - interfejs gniazd

Programowanie Sieciowe 1

Gniazda BSD implementacja w C#

TCP - receive buffer (queue), send buffer (queue)

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

Architektura typu klient serwer: uproszczony klient POP3

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Programowanie Sieciowe 1

socket(int domain, int type, int protocol)

Programowanie współbieżne i rozproszone

1. Model klient-serwer

Programowanie sieciowe

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Projektowanie oprogramowania systemów KOMUNIKACJA SIECIOWA I SYSTEMY RPC

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

Krótkie wprowadzenie do korzystania z OpenSSL

Serwer współbieżny połączeniowy

Zwielokrotnianie wejścia wyjścia

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

Instytut Teleinformatyki

Warstwa transportowa. Warstwa transportowa. Enkapsulacja. Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja bezpołączeniowa

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna

Tryb bezpołączeniowy (datagramowy)

Sieci komputerowe - Protokoły warstwy transportowej

Przesyłania danych przez protokół TCP/IP

Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1

Systemy rozproszone. Krzysztof Banaś Obliczenia równoległe 1

Stos protokołów TCP/IP (ang. Transmission Control Protocol/Internet Protocol)

PROTOKOŁY WARSTWY TRANSPORTOWEJ

Model warstwowy Warstwa fizyczna Warstwa łacza danych Warstwa sieciowa Warstwa transportowa Warstwa aplikacj. Protokoły sieciowe

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Protokoły sieciowe - TCP/IP

Tworzenie aplikacji rozproszonej w Sun RPC

W różnych systemach definicje mogą się różnić od powyższej. W linuxie sprobuj man 7 ip do wyswietlenia opisu.

Bazy Danych i Usługi Sieciowe

Sieci komputerowe 1 DSRG

Gniazda BSD UNIWERSYTET GDAŃSKI WYDZIAŁ MATEMATYKI I FIZYKI. Jacek Nowicki

1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy

Routing. część 1: adresowanie. Sieci komputerowe. Wykład 2. Marcin Bieńkowski

Wykład 4: Protokoły TCP/UDP i usługi sieciowe. A. Kisiel,Protokoły TCP/UDP i usługi sieciowe

Sieci komputerowe Warstwa transportowa

iseries Programowanie z użyciem gniazd

Programowanie Programowanie z użyciem gniazd

Programowanie Programowanie z użyciem gniazd

Adresy w sieciach komputerowych

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Model sieci OSI, protokoły sieciowe, adresy IP

Programowanie sieciowe

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Internet Control Message Protocol Aplikacja ping

Programowanie rozproszone w języku Java

Aplikacja Sieciowa wątki po stronie klienta

76.Struktura oprogramowania rozproszonego.

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Podstawowe typy serwerów

Instytut Teleinformatyki

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

ARP Address Resolution Protocol (RFC 826)

Przykład aplikacji UDP

4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane

Skąd dostać adres? Metody uzyskiwania adresów IP. Statycznie RARP. Część sieciowa. Część hosta

Dr Michał Tanaś(

Mechanizmy pracy równoległej. Jarosław Kuchta

Enkapsulacja RARP DANE TYP PREAMBUŁA SFD ADRES DOCELOWY ADRES ŹRÓDŁOWY TYP SUMA KONTROLNA 2 B 2 B 1 B 1 B 2 B N B N B N B N B Typ: 0x0835 Ramka RARP T

IBM i Wersja 7.2. Programowanie Programowanie z użyciem gniazd

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Beej s Guide to Network Programming

5. Model komunikujących się procesów, komunikaty

Podstawowe protokoły transportowe stosowane w sieciach IP cz.1

Unicast jeden nadawca i jeden odbiorca Broadcast jeden nadawca przesyła do wszystkich Multicast jeden nadawca i wielu (podzbiór wszystkich) odbiorców

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

Sieci komputerowe. Wykład dr inż. Łukasz Graczykowski

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

Zestaw ten opiera się na pakietach co oznacza, że dane podczas wysyłania są dzielone na niewielkie porcje. Wojciech Śleziak

Transkrypt:

Programowanie sieciowe dr Tomasz Tyrakowski Dyż ury: wtorki 12:00 13:00 czwartki 14:00 15:00 pokój B4-5 e-mail: ttomek@amu.edu.pl materiały: http://www.amu.edu.pl/~ttomek 1

Wymagania podstawowa znajomość języka C podstawowa znajomość języka Java konta studenckie umożliwiające korzystanie ze stacji roboczych w systemach Linux i Windows XP Podstawowa znajomo ć systemów ś Linux i Windows XP (edycja kodu źródłowego, kompilacja i uruchamianie programów) 2

Warunki zaliczenia Czynne uczestnictwo w zajęciach laboratoryjnych. Test końcowy pisemny. 3

Plan przedmiotu Programowanie z wykorzystaniem gniazd BSD (system Linux, język C) Programowanie z wykorzystaniem WinSock (system Windows XP, język C) Zdalne wywoływanie procedur standard RPC (system Linux, język C) Programowanie gniazd w języku Java (system Linux/Windows, język Java) 4

Plan przedmiotu c.d. Zdalne wywoływanie metod w Javie (system Linux/Windows, język Java) Programowanie usług sieciowych z wykorzystaniem.net Remoting (system Windows, język C#) 5

Literatura R. Stevens Programowanie zastosowa ń sieciowych w systemie Unix A. Jones, J. Ohlund Programowanie sieciowe Microsoft Windows M. Gabassi, B. Dupouy Przetwarzanie rozproszone w systemie Unix E. Harold Java: programowanie sieciowe S. McLean, J. Naftel, K. Williams Microsoft.NET Remoting 6

Operacje na plikach int deskryptor; deskryptor = open( ścieżka, tryb); read(deskryptor, bufor1, liczba bajtów); write(deskryptor, bufor2, liczba bajtów);... close(deskryptor); 7

Operacje na plikach Aplikacja 3 open(plik) 1 2 3 4 plik deskryptory System operacyjny Urządzenie 8

Gniazda (sockets) Gniazdo identyfikuje połączenie sieciowe w aplikacji deskryptor gniazda jest niezbędny w kontaktach aplikacji z systemem operacyjnym. Obsługa gniazd jest analogiczna do obsługi plików. Występuj ą pewne różnice (inne funkcje, parametry itp.) - połączenia sieciowe to jednak nieco inne obiekty ni ż pliki. 9

Operacje na gniazdach int deskryptor; deskryptor = socket(typ gniazda); connect(deskryptor, adres); send(deskryptor, bufor, ile); recv(deskryptor, bufor, ile);... close(deskryptor); 10

Adres IP Liczba 32-bitowa (4 bajty) bez znaku. Jednoznacznie identyfikuje komputer w sieci Internet. W interakcji z użytkownikiem przedstawiany jako cztery liczby rozdzielone kropkami Np. 270544960 = 16.32.48.64 270544960 = 10203040h 10h=16, 20h=32, 30h=48, 40h=64 11

Adres IP c.d. Program 1 Program 2 Program 1 Program 2? 150.254.76.10 150.254.78.2 Internet dane dla 150.254.78.2 dane od 150.254.76.10 12

Adres IP c.d. Adres IP nadawcy informuje odbiorc ę z którego komputera wysłano dane, jednak nic nie mówi o tym, który program na komputerze nadawcy je wysłał. Adres IP odbiorcy pozwala nadawcy określić komputer, który ma otrzymać dane ale nie konkretny program na komputerze odbiorcy, który ma je otrzymać. 13

Numer portu Program 1 Program 2 Program 1 Program 2 Port 7 Port 2300 Port 1 Port 2 150.254.76.10 150.254.78.2 Internet dane dla 150.254.78.2 na port 2 dane od 150.254.76.10 z portu 7 na port 2 14

Numer portu Liczba 16-bitowa (2 bajty), bez znaku. Jednoznacznie identyfikuje konkretne połączenie sieciowe w ramach jednego adresu IP. Para (adres IP, numer portu) jednoznacznie określa komputer w sieci Internet oraz konkretn ą aplikacj ę na tym komputerze (zarówno w przypadku nadawcy, jak i odbiorcy). 15

Protokoły transportowe Protokół UDP (user datagram protocol): Brak kontroli dostarczania danych. Mniejszy narzut komunikacyjny. Protokół TCP (transmission control protocol): Zapewnia dostarczenie danych we właściwej kolejności i retransmisje. Jest nieco bardziej kosztowny (potwierdzenia) ni ż UDP. 16

Protokoły transportowe TCP połączenia na duże odległości, z wieloma hostami pośrednimi (routerami), zastosowania, w których wymagany jest wysoki stopie ń niezawodności kosztem pewnej utraty wydajności UDP sieci lokalne (prawdopodobieństwo utraty danych w kablu jest niewielkie), zastosowania, w których najważniejsza jest wydajność (np. sieciowe systemy plików) 17

Stos protokołów (przykład) Aplikacja Dane dane, adres IP, nr portu, protokół TCP segment TCP, adres IP Dane Nagłówek TCP IP pakiet IP Dane Nagłówek TCP Nagłówek IP Ethernet ramka Ethernet Dane Nagłówek TCP Nagłówek IP Nagłówek Ethernet Łącze (kabel) 18

Funkcje systemowe Konwersje między formatem lokalnym i sieciowym. Tworzenie i niszczenie gniazd. Nasłuch gniazda na sieci. Wykonanie połączenia. Wysyłanie i odbieranie danych. Obsługa nazw domenowych, manipulacja adresami. 19

Konwersje Intel: little endian 4128 = 1020h = 20h 10h = 32 16 Motorola: big endian 4128 = 1020h = 10h 20h = 16 32 4128 = 20h10h(Intel) (Motorola) 20h10h = 8208 20

Konwersje c.d. Intel 1020h konwersja konwersja Motorola 1020h uniwersalny format sieciowy format sieciowy = big endian 21

Konwersje c.d. Z formatu hosta na format sieciowy: long htonl(long) short htons(short) Z formatu sieciowego na format hosta: long ntohl(long) short ntohs(short) 22

Konwersje - przykład #include <stdio.h> #include <netinet/in.h> int main(void) { short h, n; h = 0x1020; /* 4128 */ n = htons(h); printf( %x\n,n); return 0; } wynik: 2010 = 8208 23

Tworzenie gniazd int socket(int domain, int type, int protocol) domain: PF_INET, PF_IPX, PF_APPLETALK type: SOCK_STREAM, SOCK_DGRAM protocol: 0 24

Niszczenie gniazd int close(int socket) Zarówno socket, jak i close zwracaj ą -1 w przypadku błędu. 25

Nasłuch na sieci - schemat Gniazdo A. Utworzenie gniazda, przypisanie mu numeru portu, na którym będzie nasłuchiwać, rozpoczęcie oczekiwania na połączenia. Po nawiązaniu połączenia tworzone jest automatycznie nowe gniazdo B, które służy do wymiany danych z jednym konkretnym nadawc ą, po czym jest niszczone. Po zakończeniu komunikacji gniazdo A ponownie przechodzi w stan oczekiwania. 26

Nasłuch na sieci int bind(int socket, struct sockaddr *adres, socklen_t addrlen) W strukturze sockaddr powinien znaleźć si ę lokalny adres IP oraz numer portu, na którym dane gniazdo ma nasłuchiwać. 27

sockaddr_in struct sockaddr_in { sa_family_t sin_family; /*AF_INET*/ u_int16_t port; struct in_addr sin_addr; }; struct in_addr { u_int32_t s_addr; }; 28

Nasłuch na sieci c.d. Jeśli w polu sin_addr podamy stał ą INADDR_ANY, to nasłuch będzie prowadzony na wszystkich adresach, jakie posiada dany host. Port powinien mieć numer >= 1024 (porty o niższych numerach s ą zarezerwowane dla usług systemowych). 29

bind - przykład #include <netinet/in.h> #include <sys/socket.h> [...] int s = socket(af_inet, SOCK_STREAM, 0); struct sockaddr_in adr; adr.sin_family = AF_INET; adr.sin_port = 1025; adr.sin_addr.s_addr = INADDR_ANY; bind(s, (struct sockaddr*) &adr, sizeof(adr)); 30

Nasłuch na sieci c.d. int listen(int socket, int queue_len) Gniazdo socket rozpoczyna nasłuch. Drugi parametr określa ile maksymalnie połącze ń może oczekiwać w kolejce na obsług ę przez aplikacj ę. 31

Nasłuch na sieci c.d. int accept(int socket, struct sockaddr *adres, socklen_t *dlugosc_adresu) Czeka na nadchodzące połączenie, po czym zwraca deskryptor nowo utworzonego gniazda, a w adres podaje dane (host, port) nawiązującego połączenie. Blokuje aplikacj ę dopóki kto ś nie spróbuje nawiązać połączenia. 32

Nasłuch TCP - schemat s = socket(...) bind(s,...) listen(s,...) nowy_s = accept(s,...) obsługa połączenia za pomoc ą nowy_s close(nowy_s) 33

Wykonanie połączenia TCP int connect(int socket, struct sockaddr *adres, socklen_t dlugosc_adr) Jako adres podajemy struktur ę sockaddr_in, odpowiednio rzutując wskaźniki aby uniknąć błędów kompilacji. 34

Wysyłanie danych - TCP ssize_t send(int socket, void *bufor, size_t liczba_bajtow, int flagi) Wysyła liczba_bajtow bajtów danych przez łącze identyfikowane przez socket (ju ż połączone przez connect) spod adresu wskazywanego przez bufor. Flagi maj ą zwykle wartość 0. 35

Wysyłanie danych - UDP ssize_t sendto(int socket, void *bufor, size_t liczba_bajtow, int flagi, struct sockaddr *odb, socklen_t dl_odb) 36

Odbieranie danych - TCP ssize_t recv(int socket, void *bufor, size_t max_dlugosc, int flagi) Odbiera maksymalnie max_dlugosc bajtów, zwraca faktyczn ą liczb ę przeczytanych bajtów. Dane umieszcza w buforze. 37

Odbieranie danych - UDP ssize_t recvfrom(int socket, void *bufor, size_t max_dlugosc, int flagi, struct sockaddr *odkogo, socklen_t *dl_odkogo) 38

Nasłuchiwanie UDP - schemat s = socket(...) bind(s,...) recvfrom(s,...) close(s) 39

Adresy in_addr_t inet_addr(char *adr) Zamiana a.b.c.d na adres w postaci 32- bitowej. char* inet_ntoa(struct in_addr adr) Zamiana adresu 32-bitowego na ła cuch ń postaci a.b.c.d. 40

Nazwy domenowe atos.wmid.amu.edu.pl??? 150.254.76.10 150.254.78.2 Serwer DNS 150.254.78.2 150.254.78.2 atos.wmid.amu.edu.pl DNS Domain Name Service 41

Nazwy domenowe #include <netdb.h> struct hostent* gethostbyname( char *nazwa) struct hostent { char* h_name,... char **h_addr_list; } Makro h_addr to skrót h_addr_list[0] 42

Nazwy domenowe c.d. struct sockaddr_in adr; struct hostent *he; adr.sin_family = AF_INET; adr.sin_port = htons(2000); he = gethostbyname( atos.wmid.amu.edu.pl adr.sin_addr.s_adr = *((u_int32_t*) he >h_addr); 43

Schemat dla UDP = możliwe zablokowanie aplikacji KLIENT s=socket(...) [bind(s,...)] sendto(s,...) recvfrom(s,...) sendto(s,...) close(s) SERWER s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...) close(s) 44

Schemat dla TCP KLIENT s=socket(...) [bind(s,...)] connect(s,...) send(s,...) recv(s,...) send(s,...) close(s) SERWER s=socket(...) bind(s,...) listen(s,...) s2=accept(s) recv(s2,...) send(s2,...) recv(s2,...) close(s2) 45

Funkcja select Problem: Funkcje send, recv, sendto, recvfrom i accept s ą blokujące. Nie jest możliwa implementacja programu, który nasłuchuje jednocześnie na TCP i UDP. Rozwi zanie: ą Funkcja select. 46

Funkcja select c.d. #include <sys/select.h> lub #include <unistd.h> #include <sys/time.h> int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) 47

Funkcja select c.d. FD_CLR(int fd, fd_set *set) Usu ń deskryptor fd ze zbioru set. FD_ISSET(int fd, fd_set *set) Czy fd znajduje si ę w zbiorze set? FD_SET(int fd, fd_set *set) Dodaj fd do zbioru set. FD_ZERO(fd_set *set) Wyczyść cały zbiór set. 48

Funkcja select c.d. struct timeval { long tv_sec; /* sekundy */ long tv_usec; /* mikrosekundy */ } 49

Funkcja select c.d. Funkcja select zwraca liczb ę deskryptorów, na których zaszły zdarzenia. Dany zbiór deskryptorów może być ignorowany (podajemy NULL). Podanie NULL jako czasu oczekiwania powoduje natychmiastowy powrót. Podanie zerowego czasu oczekiwania oznacza czekanie do skutku. 50

Funkcja select c.d. Zwracana wartość to liczba deskryptorów, na których wystąpiło zdarzenie. 0 oznacza przeterminowanie (minął czas a nic si ę nie wydarzyło), a -1 to błąd (np. nieprawidłowe deskryptory w zbiorach). Dzięki select możliwy jest nasłuch na wielu gniazdach jednocześnie. 51

Funkcja select - przykład [...] int dtcp, dudp, maxd, ret; struct timeval tv; fd_set zbior; dtcp = socket(af_inet, SOCK_STREAM, 0); dudp = socket(af_inet, SOCK_DGRAM, 0); [ bind, listen na dtcp ale NIE accept] 52

Funkcja select c.d. maxd = (dtcp > dudp? dtcp : dudp); tv.tv_sec = tv.tv_usec = 0; FD_ZERO(&zbior); FD_SET(dtcp, &zbior); FD_SET(dudp, &zbior); ret = select(maxd, &zbior, NULL, NULL, &tv); 53

Funkcja select c.d. if (ret > 0) { if (FD_ISSET(dtcp, &zbior)) { [accept, send, recv,...] } if (FD_ISSET(dudp, &zbior)) { [recvfrom, sendto,...] } } 54