Współbieżność, tunelowanie i kapsułkowanie, XDR i...

71
1 1. Serwery wielousługowe i wieloprotokołowe. 2. Sterowanie współbieżnością w serwerze współbieżność sterowana zapotrzebowaniem, alokacja wstępna procesów podporządkowanych. 3. Współbieżność w programach klienckich. 4. Transmisja tunelowa i kapsułkowanie serwery proxy. 5. Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego. model proceduralny. zdalne wywoływanie procedur. wprowadzenie do Sun RPC. Współbieżność, tunelowanie Współbieżność, tunelowanie i kapsułkowanie, XDR i RPC i kapsułkowanie, XDR i RPC

Transcript of Współbieżność, tunelowanie i kapsułkowanie, XDR i...

Page 1: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

1

1. Serwery wielousługowe i wieloprotokołowe.2. Sterowanie współbieżnością w serwerze● współbieżność sterowana zapotrzebowaniem,● alokacja wstępna procesów podporządkowanych.3. Współbieżność w programach klienckich.4. Transmisja tunelowa i kapsułkowanie● serwery proxy.5. Zewnętrzna reprezentacja danych - XDR.6. Koncepcja programowania rozproszonego.● model proceduralny.● zdalne wywoływanie procedur.● wprowadzenie do Sun RPC.

Współbieżność, tunelowanie Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCi kapsułkowanie, XDR i RPC

Page 2: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

2

Serwery wieloprotokołowe udostępniają jedną usługę za pośrednictwem kilku protokołów warstwy transportowej. Podstawową zaletą tego rozwiązania jest łatwiejsze zarządzanie kodem realizującym usługę, np. przy zmianie wersji oprogramowania czy systemu operacyjnego, niezależnie od obsługiwanego protokołu (TCP lub UDP). Dodatkowo, serwer wieloprotokołowy zwykle potrzebuje mniej zasobów systemowych niż kilka serwerów jednoprotokołowych.

Serwery wieloprotokołowe Serwery wieloprotokołowe (TCP i UDP)(TCP i UDP)

Page 3: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

3

Schemat struktury serwera wieloprotokołowego (TCP i UDP).

proces główny obsługaUDP

Proces główny przyjmuje zgłoszenia połączeń TCP; do obsługi połączenia wykorzystywane jest osobne gniazdo. Niezależnie obsługiwane są zgłoszenia UDP.

obsługapołączeniaTCPoczekiwanie

na połączeniaTCP

Serwery wieloprotokołoweSerwery wieloprotokołowe

Page 4: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

4

Poniższy przykład nie zawiera obsługi błędów zwracanych przez funkcje wykorzystywane do transmisji TCP/IP.

svr_echo_tcpudp(){int sTCP, sUDP, maxs, s;struct sockaddr_in sin;char buf[LINELEN];fd_set afds, //zbiór aktywnych deskryptorówsTCP = passivesock(TESTPORT, "tcp", 10);sUDP = passivesock(TESTPORT, "udp", 0);maxs = MAX(sTCP, sUDP);FD_ZERO(&afds);while(1){

FD_SET(sTCP, &afds);FD_SET(sUDP, &afds);

Serwery wieloprotokołoweSerwery wieloprotokołowe

Page 5: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

5

select(maxs+1, &afds, NULL, NULL, 0);alen = sizeof(sin);if(FD_ISSET(sTCP, &afds)){ // obsługa TCP

s = accept(sTCP, struct sockaddr*)&sin, &alen);daytimed(buf);write(s, buf, strlen(buf));close(s);

}if(FD_ISSET(sUDP, &afds)){ // obsługa UDP

recvfrom(sUDP, buf, sizeof(buf), 0, (struct sockaddr*)&sin &alen);

daytimed(buf);sendto(sUDP, buf, strlen(buf), 0,

(struct sockaddr*)&sin, sizeof(sin));}

}//while}

Serwery wieloprotokołoweSerwery wieloprotokołowe

Page 6: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

6

Serwer wieloprotokołowy stanowi rozwiązanie pozwalające skupić cały kod, realizujący określoną usługę, w jednym programie. Dzięki temu nie ma problemów z koordynacją zmian w przeciwieństwie do sytuacji gdy kod ten jest powielony w różnych programach. Serwer tego typu jest realizowany przez jeden proces, który tworzy główne gniazdo dla każdego z protokołów (TCP, UDP) po czym wywołuje funkcje select() w oczekiwaniu na gotowość jednego lub obydwu gniazd. Gdy gotowe jest gniazdo TCP, serwer nawiązuje połączenie z klientem i za jego pośrednictwem odpowiada na nadsyłane zapytania. Gdy gotowość zgłosi gniazdo UDP, serwer odczytuje zapytanie i wysyła odpowiedź

Serwery wieloprotokołowe Serwery wieloprotokołowe (TCP i UDP)(TCP i UDP)

Page 7: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

7

Dla rodziny protokołów TCP/IP zdefiniowano duży zbiór tzw. prostych usług, pomocnych w administrowaniu, testowaniu i wykrywaniu błędów (np. DAYTIME, ECHO, TIME). W systemie, w którym dla każdej standartowej usługi istnieje oddzielny serwer, będą działać dziesiątki procesów, mimo że większość z nich zapewne nigdy nie otrzyma zgłoszenia. Dlatego połączenie wielu serwerów dla wielu różnych usług w jeden proces może radykalnie zmniejszyć liczbę aktywnych procesów.

UWAGA: system operacyjny może ograniczać maksymalną liczbę gniazd używanych w jednym procesie.

Serwery wielousługoweSerwery wielousługowe

Page 8: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

8

Schemat struktury iteracyjnego, połączeniowego serwera wielousługowego.

serwer

gniazdogniazdo gniazdo

Serwer ma otwarte gniazdo dla każdej z usług i co najwyżej jedno do obsługi określonego połączenia.

Gniazda dla poszczególnych usługrealizowanych przez serwer.

gniazdo Gniazdo obsługująceokreślone połączenie.

Budowa wielousługowego Budowa wielousługowego serwera połączeniowegoserwera połączeniowego

Page 9: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

9

Schemat struktury bezpołączeniowego serwera wielousługowego.

serwer

gniazdogniazdo gniazdo

Serwer czeka na nadejście datagramu do któregokolwiek z gniazd (select()). Każde gniazdo jest przypisane określonej usłudze.

... Gniazda dla poszczególnych usług realizowanych przez serwer.

Budowa wielousługowego Budowa wielousługowego serwera bezpołączeniowegoserwera bezpołączeniowego

Page 10: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

10

Schemat struktury współbieżnego, połączeniowego serwera wielousługowego.

Proces główny

gniazdogniazdo gniazdo

Gniazda dla poszczególnych usługrealizowanych przez serwer.

gniazdo

Procespotomny

Procespotomny

gniazdo

Gniazda dla poszczególnych połączeńobsługiwanych przez procesy potomne.

Wspólbieżny połączeniowy Wspólbieżny połączeniowy serwer wielousługowyserwer wielousługowy

Page 11: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

11

Jedną z głównych wad dotychczas omówionych rozwiązań jest trudność wprowadzania zmian. Każda modyfikacja kodu realizującego jedną usługę wymaga ponownej kompilacji całego serwera, zatrzymania jego działania i uruchomienia nowej wersji.

W serwerze wielousługowym można oddzielić części kodu realizujące poszczególne usługi od kodu obsługującego wstępne zgłoszenia połączeń. Zabieg taki jest możliwy dzięki funkcji systemowej execve().

Serwery wielousługoweSerwery wielousługowe

Page 12: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

12

int execve(const char *filename, const char *argv[], const char *env[]);

filename – nazwa pliku z programem lub skryptem, który zostanie uruchomiony w miejsce istniejącego procesu,

argv – tablica argumentów,env – zmienne środowiskaWartość zwracana: w przypadku sukcesu nie ma powrotu,

w przypadku błędu -1 (errno).

Serwery wielousługoweSerwery wielousługowe

Page 13: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

13

Schemat struktury połączeniowego, który korzysta z funkcji execve(), aby wywołać odzielny program do obsługi każdego połączenia.

Proces główny

gniazdogniazdo gniazdo

Gniazda dla poszczególnych usługrealizowanych przez serwer.

program

Procespotomny

Procespotomny

program

Gniazda dla poszczególnych połączeńobsługiwanych przez procesy potomne.

gniazdo gniazdo

Wspólbieżny połączeniowy Wspólbieżny połączeniowy serwer wielousługowyserwer wielousługowy

Page 14: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

14

Wybór typu serwera – iteracyjnego albo współbieżnego – może być sprawą trudną, zważywszy jak szybki jest zarówno wzrost popytu użytkowników na usługi, jak i rozwój możliwości komunikacyjnych oraz wzrost szybkości przetwarzania danych. Projektanci przeważnie podejmują odpowiednie decyzje na podstawie ekstrapolacji dotychczasowych tendencji rozwojowych.

Wybór między rozwiązaniem Wybór między rozwiązaniem iteracyjnym i współbieżnymiteracyjnym i współbieżnym

Page 15: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

15

Poziom współbieżności działania serwera definiujemy jako liczbę procesów serwera działających w danej chwili. Współbieżny serwer połączeniowy zazwyczaj tworzy nowy proces dla każdego nawiązywanego połączenia z klientem. W praktyce liczba tych połączeń nie może być dowolnie duża. Każda implementacja protokołu TCP narzuca ograniczenie liczby jednocześnie aktywnych połączeń. Każdy system operacyjny ogranicza liczbę działających procesów. Gdy serwer wyczerpie jeden lub drugi limit, system będzie odmawiał tworzenia nowych procesów.

Poziom współbieżnościPoziom współbieżności

Page 16: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

16

Współbieżność sterowana zapotrzebowaniem (demand driven concurency) to technika polegająca na tworzeniu nowych procesów przy wzroście liczby jednocześnie obsługiwanych połączeń. Serwer zajmuje zasoby systemu tylko wtedy, gdy ich rzeczywiście używa. Jednocześnie takie serwery zapewniają krótki obserwowany czas odpowiedzi, dlatego że kolejne zgłoszenia nie muszą czekać na zakończenie obsługi zgłoszeń wcześniejszych.

Współbieżność sterowana Współbieżność sterowana zapotrzebowaniemzapotrzebowaniem

Page 17: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

17

Zarówno operacja odebrania zgłoszenia z sieci, jak i utworzenie nowego procesu zajmują zauważalną ilość czasu. Powoduje to opóźnienie rozpoczęcia obsługi zgłoszenia. Jest to szczególnie odczuwalne, gdy czas obsługi zgłoszenia jest krótszy niż czas utworzenia procesu potomnego.

utworzenie procesupodporządkowanego 1

utworzenie procesupodporządkowanego 2

obsługa zgłoszenia 2obsługa zgłoszenia 1

obsługa zgłoszenia 1 obsługa zgłoszenia 2

● serwer współbieżny

● serwer iteracyjny

Narzut czasowy operacji Narzut czasowy operacji systemowychsystemowych

Page 18: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

18

W praktyce obciążenie serwerów zgłoszeniami rzadko osiąga poziom bliski ich maksymalnej przepustowości. Ponadto niewielu projektantów decyduje się na współbieżną realizację serwera w sytuacji, gdy koszt tworzenia nowego procesu przewyższa czas przetwarzania zgłoszenia. Dlatego przypadki nadmiernych opóźnień obsługi lub odrzucania zgłoszeń nie zdarzają się często. Jednak projektując serwer, któremu stawia się wymaganie możliwie krótkiego czasu odpowiedzi przy dużym obciążeniu, trzeba rozważyć rozwiązania inne niż współbieżność sterowana zapotrzebowaniem.

Narzut czasowy operacji Narzut czasowy operacji systemowychsystemowych

Page 19: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

19

Wstępna alokacja procesów polega na tworzeniu współbieżnych procesów przy rozpoczęciu pracy przez proces główny serwera. Każdy z tych procesów czeka na nadejście zgłoszenia wywołując odpowiednią funkcję systemową. Po jego nadejściu jeden z procesów potomnych rozpoczyna obsługę klienta. Po zakończeniu obsługi proces potomny oczekuje na kolejne zgłoszenie. Dzięki temu skraca się czas obsługi zgłoszeń ponieważ serwer nie traci go na tworzenie dodatkowych procesów potomnych. Obsługa zgłoszenia może też przebiegać jednocześnie z operacją wejścia – wyjścia związaną z innym zgłoszeniem.

Alokacja wstępna procesów Alokacja wstępna procesów podporządkowanychpodporządkowanych

Page 20: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

20

Schemat serwera połączeniowego korzystającego z wstępnej alokacji procesów.

proces główny

gniazdo

gniazdo dla zgłoszeńpołączeń

procespotomny

procespotomny

gniazda używane do obsługiposzczególnych połączeń.

gniazdo gniazdo

procespotomny

Alokacja wstępna procesów Alokacja wstępna procesów podporządkowanychpodporządkowanych

Page 21: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

21

Schemat serwera bezpołączeniowego korzystającego z wstępnej alokacji procesów.

proces główny

gniazdo

gniazdo związane z portemo powszechnie znanym numerze

procespotomny

procespotomny

procespotomny

Alokacja wstępna procesów Alokacja wstępna procesów podporządkowanychpodporządkowanych

Page 22: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

22

W systemach wieloprocesorowych alokacja wstępna pozwala powiązać poziom współbieżności z możliwościami serwera. W komputerze wieloprocesorowym system operacyjny przydziela każdemu procesowi oddzielny procesor. Dzięki temu, podczas nasilonego napływu zgłoszeń, każde z nich będzie obsługiwane przez inny procesor. W ten sposób osiągnięta zostanie maksymalna możliwa szybkość obsługi.

Systemy wieloprocesoroweSystemy wieloprocesorowe

Page 23: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

23

Koszty alokacji wstępnej nie ograniczają się jedynie do utworzenia procesu. Każdy nowy proces działający w systemie zwiększa ilość czasu procesora zużywaną przez podsystem zarządzający procesami. Oprogramowanie sieciowe także może zużywać więcej czasu w sytuacji, gdy obsługuje wiele alokowanych wstępnie procesów usiłujących odbierać zgłoszenia napływające z sieci. Te dodatkowe koszty są uzasadnione tylko wtedy, gdy dzięki alokacji wstępnej procesów można zwiększyć całkowitą przepustowość serwera lub skrócić czas oczekiwania na obsługę.

W przeciwnym razie należy rozważyć wykorzystanie techniki tzw. Odroczonej alokacji procesów (delayed process allocation).

Odraczanie alokacji procesówOdraczanie alokacji procesów

Page 24: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

24

Serwer działający według metody odroczonej alokacji procesów rozpoczyna przetwarzanie każdego zgłoszenia w trybie iteracyjnym. Oddzielny, współbieżnie działający proces przeznaczony tylko do obsługi tego połączenia jest tworzony wtedy, gdy okazuje się, że jego przetwarzanie zajmie (zajmuje) zbyt dużo czasu. Proces główny może więc przykładowo sprawdzić poprawność zgłoszenia, a jeśli przetwarzane zgłoszenie jest mało czasochłonne także je obsłużyć, bez tworzenia w tym celu nowego procesu i przełączania kontekstu.

W celu realizacji tej techniki w środowisku UNIX można wykorzystać systemową funkcję alarm().

Odraczanie alokacji procesówOdraczanie alokacji procesów

Page 25: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

25

Funkcja alarm() powoduje wysłanie do procesu, w którym została użyta, sygnału SIGALARM po upływie określonego czasu. Użycie funkcji alarm() kasuje wszystkie wcześniej ustawione alarmy.

unsigned int alarm(unsigned int seconds);seconds – liczba sekund, po której zostanie wysłany sygnał.

W przypadku gdy seconds zostanie ustawione na zero, nie zostanie wysłany sygnał.

Wartość zwracana: liczba sekund pozostała do wywołania wcześniej zdefiniowanego alarmu lub zero.

Odraczanie alokacji procesówOdraczanie alokacji procesów

Page 26: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

26

Techniki wstępnej i odroczonej alokacji są oparte na tej samej zasadzie uniezależnienia poziomu współbieżności działania serwera w danej chwili od liczby obsługiwanych zgłoszeń. Przyjęcie tej zasady umożliwia elastyczne dostosowanie poziomu współbieżności do potrzeb i w konsekwencji pozwala osiągnąć lepszą wydajność serwera.

Jednoczesne stosowanie kilku Jednoczesne stosowanie kilku technik alokacjitechnik alokacji

Page 27: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

27

Omówione techniki można stosować łącznie. Serwer na początku działa zgodnie z metodą odroczonej alokacji (nie tworzy nowych procesów). Gdy jednak już powstanie taki proces to po zakończeniu obsługi klienta może on istnieć nadal i czekać na następne zgłoszenia.

Największym problemem w tym wypadku jest stworzenie efektywnego mechanizmu ograniczenia poziomu współbieżności. Nie jest łatwo ocenić, kiedy istniejący proces potomny powinien zakończyć działanie i zwolnić zasoby. Jedna z metod polega na kończeniu procesów jeśli przez określony czas są one bezczynne – np. nie otrzymały zgłoszenia połączenia.

Jednoczesne stosowanie kilku Jednoczesne stosowanie kilku technik alokacjitechnik alokacji

Page 28: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

28

Współbieżna realizacja programów klienckich ma następujące zalety:● łatwość implementacji – poszczególne funkcje mogą być realizowane

przez odrębne części programu,● ułatwiona konserwacja i rozbudowa programu – odrębne moduły

mogą być rozwijane niezależnie,● możliwość połączenia z wieloma serwerami jednocześnie – może

znacznie skrócić czas oczekiwania na uzyskanie kompletnej obsługi,● dynamiczne sterowanie przetwarzaniem danych – zmiana parametrów

działania programu, uzyskanie informacji o stanie połączeń itp.Zasadniczą zaletą współbieżnej realizacji programów klienckich jest

asynchronizm. Program może jednocześnie wykonywać wiele zadań. Kolejność ich wykonywania nie jest przez program zdeterminowana.

Współbieżność w programach Współbieżność w programach klienckichklienckich

Page 29: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

29

Schemat jednej z możliwych struktur wieloprocesowego, połączeniowego programu klienta.

proces sterujący

gniazdoTCP

poleceniasterujące wejście wyjście

proces obsługiwejścia

proces obsługiwyjścia

Jeden z procesów obsługuje wejście i wysyła zgłoszenia do serwera, a drugi odbiera odpowiedzi i obsługuje wyjście.

Współbieżność w programach Współbieżność w programach klienckich - przykładyklienckich - przykłady

Page 30: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

30

Schemat jednej z możliwych struktur jednoprocesowego, połączeniowego programu klienta.

proces klienta

gniazdoTCP

poleceniasterujące

wejście wyjście

Jeden proces za pomocą funkcji select() obsługuje wiele połączeń TCP oraz wejście danych sterujących.

gniazdoTCP

gniazdoTCP

Współbieżność w programach Współbieżność w programach klienckich - przykładyklienckich - przykłady

Page 31: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

31

int cli_con_echo_tcp(int argc, char **argv){long t;int ccount, scount, i, j;char *buf;scount = 0;ccount = 1024;for(i=0; i<argc; i++){

if(strcmp(argv[i], "-c")==0){if (++i<argc && (ccount = atoi(argv[i]))){

continue;}else{

printf("nieprawidlowe wywolanie programu\n");return -1;

}}else{

Współbieżność w programach Współbieżność w programach klienckich - przykładyklienckich - przykłady

Page 32: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

32

switch(fork()){case 0: // proces potomny

if ((buf=(char *)calloc(ccount+1, sizeof(char)))==NULL){

fprintf(stderr, "calloc: %s\n",strerror(errno));

exit(0);}for(j=0; j<ccount; j++)

buf[j] = 'a';buf[j]='\0';t = cli_echo_tcp(argv[i], TESTPORT, buf, 0);printf("%s\t%.6f\n", argv[i],

(double)t/1000000.0);free(buf);exit(1);

Współbieżność w programach Współbieżność w programach klienckich - przykładyklienckich - przykłady

Page 33: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

33

default:scount++;continue;

case -1:fprintf(stderr, "fork: %s\n",

strerror(errno));return -1;

}}

}for(i=0; i<scount; i++)

waitpid(-1, NULL, 0);return 1;

}

33

Współbieżność w programach Współbieżność w programach klienckich - przykładyklienckich - przykłady

Page 34: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

34

Sieci komputerowe rozwijały się stopniowo przez wiele lat. Poszczególni producenci promowali własne systemy sieciowe, a protokoły TCP/IP nie zawsze były dostępne. Co więcej technologie przesyłu danych w sieciach rozległych zwykle wykorzystują odmienne protokoły transmisji niż te, które stosuje się w sieciach lokalnych. W związku z tym często zachodzi potrzeba przekazywania danych jednego protokołu poprzez połączenie obsługiwane przez inny protokół. W tym celu wykorzystuje się tzw. kapsułkowanie (encapsulation) lub tunelowanie (tunnelling).

Transmisja tunelowa Transmisja tunelowa i kapsułkowaniei kapsułkowanie

Page 35: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

35

sieć lokalnaTCP/IP

sieć lokalnaTCP/IP

sieć rozległaframe relay, ATM, X25,

GPRS, HSPA, 3G

Transmisja tunelowa Transmisja tunelowa i kapsułkowaniei kapsułkowanie

Page 36: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

36

O transmisji kapsułkowanej datagramów IP mówimy wtedy, gdy protokół IP korzysta bezpośrednio z transmisji realizowanych przez sprzęt sieciowy, tzn. każdy datagram przeznaczony do wysłania jest umieszczany (kapsułkowany) w tzw. ramce (frame) lub pakiecie sieciowym. O transmisji tunelowej mówimy zaś wtedy, gdy protokół IP przesyła datagramy korzystając z usług protokołu wysokiego poziomu, np. korzysta z warstwy transportowej innego protokołu.

Transmisja tunelowa Transmisja tunelowa i kapsułkowaniei kapsułkowanie

Page 37: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

37

stunnel

SerwerPOP3/IMAP

program pocztowyz szyfrowaniem SSL transmisja

szyfrowana SSL

transmisjaniekodowana

oprogramowanie po stronie serwera

oprogramowanie po stronie klienta

Program stunnel (http://www.stunnel.org) typowo odbiera zgłoszenia na portach 995 (POP3) i 993 (IMAP). Po rozszyfrowaniu odebrane dane są przekazywane do serwera poczty (110, 143). Odpowiedz serwera jest szyfrowana i wysyłana do klienta.

Transmisja tunelowa Transmisja tunelowa na poziomie aplikacyjnymna poziomie aplikacyjnym

Page 38: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

38

serwer proxy

serwerklient

Serwer proxy pośredniczy w transmisji pomiędzy klientem a serwerem. Serwerów proxy zwykle używa się aby:● zabezpieczyć komputery w sieci lokalnej,● przyspieszyć otrzymywanie odpowiedzi na powtarzające się zapytania (np. strony www – squid),● umożliwić wielu komputerom korzystanie z jednego publicznego adresu IP (Network Address Translation).Inne zastosowania „serwerów” pośredniczących: VPN, VOIP, GSM/GPRS, ...

Serwer proxySerwer proxy

Page 39: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

39

Współbieżna organizacja programów to bardzo mocne narzędzie, użyteczne zarówno w odniesieniu do serwerów, jak i klientów. Współbieżność w programach klienckich umożliwia szybsze dostarczenie odpowiedzi użytkownikowi, pozwala uniknąć ryzyka zakleszczenia a także ułatwia oddzielenie operacji sterujących działaniem klienta od operacji przesyłania danych.

PodsumowaniePodsumowanie

Page 40: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

40

Dana jest liczba 32 bitowa 0 0 2 8

W zależności od „komputera” ten ciąg bajtów może być różnie interpretowany. Np.

2·28 + 8·20 = 520 lub

8·224 + 2·216 = 134217728 + 131072 = 134348800Dla programistów konstruujących oprogramowanie typu klient – serwer wybór sposobu reprezentacji danych przesyłanych między partnerami jest istotnym problemem. Jeśli komputery różnią się reprezentacją przesyłanych danych to muszą one zostać poddane konwersji.

Zewnętrzna reprezentacja Zewnętrzna reprezentacja danychdanych

Page 41: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

41

Asymetryczna konwersja danych - jedna ze stron (klient lub serwer) dokonują odpowiedniej konwersji danych. W tej technice programista musi uwzględnić konwersję dla każdej pary różnych typów architektury komputerów, na których system może być używany.

Jeśli w realizacji programów klient – serwer zakłada się asymetryczną konwersję danych między rodzimą reprezentacją klienta a rodzimą reprezentacją serwera to liczba potrzebnych wersji takiej pary programów wzrasta proporcjonalnie do kwadratu liczby różnych typów architektury (problem N2 dla konwersji danych).

41

Zewnętrzna reprezentacja Zewnętrzna reprezentacja danychdanych

Page 42: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

42

Symetryczna konwersja danych – obie strony wykonują konwersję danych z postaci rodzimej do standardowej reprezentacji danych przesyłanych przez sieć – zewnętrznej reprezentacji danych (external data representation).Zalety:● brak troski o architekturę komputera, na którym działa partner komunikacji,● łatwiejsza implementacja i konserwacja programuWady:● dodatkowy koszt związany z konwersją danych, w przypadku gdy nie byłaby ona potrzebna,● przesyłanie dodatkowych informacji przez sieć wymaganych przez specyfikację.

Standardowy sieciowy Standardowy sieciowy porządek bajtówporządek bajtów

Page 43: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

43

XDR – najpopularniejszy standard sieciowej reprezentacji danych opracowany przez firmę SUN [RFC 1014]. Podstawowy blok danych – 4 bajty.● int – [-2147483648, 2147483647] – 4 bajty w formacie „big endian” (bajt najbardziej znaczący pod najniższym adresem):

0 0 2 8

Liczby ujemne – notacja uzupełnieniowa do dwóch. Zapis bitów w ramach jednego bajta definiowany przez inne standardy. Zwykle „little endian”.● unsigned int – [0, 4294967295] – 4 bajty, “big endian”.● enum – równoważnie jak zbiór int'ów,● bool – równoważne do enum { FALSE = 0, TRUE = 1 }.

= 520

Standardowy sieciowy Standardowy sieciowy porządek bajtówporządek bajtów

Page 44: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

44

● hyper (unsigned hyper) – 8 bajtowy int (unsigned int), format „big endian”.● float – 4 bajtowa liczba zmiennoprzecinkowa:

1 bajt 2 bajt 3 bajt 4 bajtS E (8 bitów) F (23 bity)

liczba = (-1)S · 1.F · 2E-B. (B=127)Przykład: (5.78125)10 = (4 + 1 + 1/2 + 1/4 + 1/32)10 = (101.11001)2 = (-1)0 ·

(1.0111001)2 · 22 =

= 0 10000001 01110010000000000000000 Pierwszy bit najbardziej znaczący. Stałe typu NaN (not a number) nie powinny być przesyłane przez sieć,

Standardowy sieciowy Standardowy sieciowy porządek bajtówporządek bajtów

Page 45: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

45

1 bajt 2 bajt 3 bajtS E (11 bitów) F (52 bity)

● double – 8 bajtowa liczba zmiennoprzecinkowa: E – 11 bitów, F – 52 bity, B = 1023,

liczba = (-1)S · 1.F · 2E-B. (B=1023)● void – 0 bajtów,

4 bajt 5 bajt 6 bajt 7 bajt 8 bajt

Standardowy sieciowy Standardowy sieciowy porządek bajtówporządek bajtów

Page 46: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

46

● opaque identyfikator[n] – dane nie poddane konwersji (n bajtów). Ewentualnie uzupełniane na końcu zerowymi bajtami (tak aby długość ciągu n+r była wielokrotnością 4).

kolejne bajty uzupełnione zerami na końcu (jak w opaque)długość (4 bajty)

● opaque identyfikator<n> - ciąg danych nie poddanych konwersji o nieustalonej długości (maksymalnie n = 232-1 bajtów). Długość kodowana jako unsigned int,

bajt 0 bajt 1 ... bajt n-1 bajt n+r-1...

Standardowy sieciowy Standardowy sieciowy porządek bajtówporządek bajtów

Page 47: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

47

● string identyfikator<n> - tekst kodowany jest podobnie do opaque o nieustalonej długości. Znaki tekstu są kolejno umieszczane w obszarze danych,● tablica o ustalonej długości – kolejno zapisane elementy tablicy (każdy element może mieć inną długość – string),

element 1element 0 ... element n-1

● tablica o nieustalonej długości (max n = 232-1 kodowane jako unsigned int)

element 1n ... element n-1element 0

Standardowy sieciowy Standardowy sieciowy porządek bajtówporządek bajtów

Page 48: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

48

● struktury - struct {komponent A;komponent B;...

};

komponent Bkomponent A ...

● unie – union{komponent A;komponent B;

};

numer komponentu (4 bajty) komponent

Standardowy sieciowy Standardowy sieciowy porządek bajtówporządek bajtów

Page 49: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

49

Do konwersji można wykorzystać funkcje biblioteczne <rpc/xdr.h>Najpierw trzeba utworzyć obiekt XDR. W przypadku konwersji strumieniowej należy użyć funkcji:void xdrmem_create(XDR *xdrs, char *buf, int blen, int op);xdrs – wskaźnik do utworzonej struktury zarządzającej konwersją strumieniową,buf – wskaźnik do bufora dla konwertowanego strumienia danych,blen – rozmiar bufora,op – tryb pracy konwertera: XDR_ENCODE, XDR_DECODE lub XDR_FREE.

Procedury konwersji XDRProcedury konwersji XDR

Page 50: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

50

Poszczególne procedury konwersji XDR mogą wykonywać konwersję w obydwu kierunkach. Wywołana procedura stwierdza w którym kierunku należy przeprowadzić konwersję, badając odpowiednią informację w strumieniu XDR, na którym działa.Jeśli *xdrs został utworzony z parametrem XDR_DECODE, odczytana zmienna zostanie wpisana w komórkę wskazaną przez pi.

Procedury konwersji XDRProcedury konwersji XDR

Page 51: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

51

Jeśli (*xdrs) został utworzony w trybie XDR_ENCODE do konwersji liczby należy użyć jednej z funkcji konwertujących np:int xdr_int(XDR *xdrs, int *pi); xdrs – wskaźnik do struktury zarządzającej konwersją strumieniową,pi – wskaźnik do konwertowanej liczby;

nagłówek strumienia 0 1 2 3 4 5

nagłówek strumienia 0 1 2 3 4 5 0 0 2 8

Procedury konwersji XDRProcedury konwersji XDR

Page 52: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

52

Program może zażądać, aby procedury XDR po przekształceniu każdego elementu danych do postaci zewnętrznej automatycznie wysyłały ten element przez połączenie TCP. W tym celu należy użyć funkcji fdopen() i xdrstdio_create():FILE * fdopen(int fd, char* mode);fd – deskryptor istniejącego pliku (gniazda),mode – typ dostępu do pliku (gniazda): r, r+, w, w+, a, a+Wartość zwracana: wskaźnik do strumienia związanego z plikiem (gniazdem) lub NULL w przypadku błędu (errno).Funkcja fdopen() pozwala związać istniejące gniazdo TCP ze strumieniem FILE.

Procedury konwersji XDRProcedury konwersji XDR

Page 53: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

53

Do powiązania konwertera XDR z dowolnym strumieniem danych służy funkcja xdrstdio_create().void xdrstdio_create(XDR *xdrs, FILE *file, int op);xdrs - wskaźnik do utworzonej struktury zarządzającej konwersją strumieniową,FILE – wskaźnik do struktury opisującej strumień danych,op – tryb pracy konwertera: XDR_ENCODE, XDR_DECODE lub XDR_FREE.

Procedury konwersji XDRProcedury konwersji XDR

Page 54: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

54

Aby funkcje XDR mogły współpracować z oprogramowaniem używającym transmisji datagramowej opracowano alternatywny interfejs.void xdrrec_create(XDR *xdrs, u_int sendsize,

u_int recvsize, char *handle, int (*readit)(), int (*writeit)();

xdrs - wskaźnik do utworzonej struktury zarządzającej konwersją strumieniową,sendsize, recvsize – rozmiary buforów: wyjściowego i wejściowego,readit, writeit – funkcje wywoływane po opróżnieniu / zapełnieniu bufora w celu pobrania/wysłania danych. Posiadają trzy argumenty: void *handle, void *buffer, void *len.

Procedury konwersji XDRProcedury konwersji XDR

Page 55: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

55

Użycie rekordów umożliwia wykorzystywanie dodatkowych funkcji:

bool_t xdrrec_endofrecord(XDR *xdrs, bool_t flushnow) - wstawia znacznik końca rekordu

bool_t xdrrec_skiprecord(XDR *xdrs) - pozwala pominąć rekord

bool_t xdrrec_eof(XDR *xdrs) - zwraca true jeśli osiągnięto koniec pliku w powiązanym ze strukturą *xdrs strumieniu.

Procedury konwersji XDRProcedury konwersji XDR

Page 56: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

56

Przystępując do tworzenia aplikacji rozproszonej projektant ma do wyboru dwa różne podejścia:● projektowanie z punktu widzenia komunikacji między procesami (communication-oriented design) główny nacisk kładzie na protokół komunikacyjny. W drugiej kolejności tworzone są programy klienta i serwera reagujące na zgłoszenia i wysyłające dane zgodnie z protokołem.● projektowanie z punktu widzenia aplikacji (application-oriented design) rozpoczyna się od stworzenia aplikacji rozwiązującej problem. Po przetestowaniu jest ona dzielona na dwie lub więcej części. Na tym etapie dobudowuje się protokoły komunikacyjne.

Programowanie rozproszoneProgramowanie rozproszone

Page 57: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

57

Aby ułatwić projektowanie z punktu widzenia aplikacji opracowano model pojęciowy nazwany modelem wywołania procedury – RPC (Remote Procedure Call)Model RPC umożliwia projektantowi (programiście) skupienie uwagi na samej aplikacji. Projektant może opracować zwykły, tradycyjny programrozwiązujący zadany problem, a dopiero potem podjąć próbę rozdzielenia go na części wykonywane na różnych komputerach.

Model zdalnego wywołania Model zdalnego wywołania proceduryprocedury

Page 58: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

58

main()

proc1() proc2() proc3()

proc4() proc5() proc6() proc7()

Program składa się z jednej lub wielu procedur, zazwyczaj zorganizowanych w hierarchię wywołań. Strzałka od procedury n do procedury m oznacza wywołanie m z wnętrza procedury n.

Model wywołań procedurModel wywołań procedur

Page 59: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

59

main()

proc1() proc2() proc3()

proc4() proc5() proc6() proc7()

Program rozproszony wykorzystujący model zdalnego wywołania procedury. Linia podziału przebiega pomiędzy programem głównym a procedurą nr 3. Implementacja zdalnego wywołania wymaga użycia protokołu komunikacyjnego.

Komputer 1 Komputer 2

Rozszerzenie modelu Rozszerzenie modelu proceduralnegoproceduralnego

Page 60: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

60

Przepływ sterowania w sytuacji wywołania procedury i powrotu. Wykonanie programu biegnie przez program główny, następnie przez procedury A oraz B, po czym wraca do programu głównego.

kod programu głównego

początek

wywołanie A

koniec

procedura A

wywołanie B

powrót

procedura B

powrót

Przebieg wykonania Przebieg wykonania proceduryprocedury

Page 61: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

61

Przepływ sterowania w sytuacji wywołania zdalnej procedury. Linie przerywane pokazują przepływ sterowania między klientem i serwerem przy wywołaniu zdalnej procedury i powrocie z niej.

kod programu głównego

klientpoczątek

wywołanie A

koniec

procedura Aserwer

wywołanie B

powrót

procedura Bserwer

powrót

Przebieg wykonania zdalnej Przebieg wykonania zdalnej proceduryprocedury

Page 62: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

62

Wywołanie odległej procedury odpowiada wysłaniu “zapytania“ do serwera. Odpowiedź serwera jest analogiem powrotu z procedury.W warunkach idealnych przebieg zdalnego wywołania procedury byłby identyczny jak wywołania lokalnego. Są jednak przypadki, które to ograniczają:● duża czasochłonność wywołania zdalnego,● brak możliwości przekazywania wskaźników,● brak wspólnego środowiska pracy np. deskryptory wejścia – wyjścia, operacje systemu operacyjnego.

Model klient-serwer a RPCModel klient-serwer a RPC

Page 63: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

63

Sun RPC [RFC 1057] definiuje mechanizm realizujący model zdalnego wywołania procedury. Specyfikacja określa:● format komunikatów wysyłanych przez program wywołujący (klienta),● format argumentów wywołania oraz format zwracanych wyników,● protokół warstwy transportowej – TCP lub UDP,● kodowanie przesyłanych informacji – XDR,Dla Sun RPC zdefiniowano również system kompilacji, który umożliwia automatyzację konstruowania programów rozproszonych.

Mechanizm Sun RPCMechanizm Sun RPC

Page 64: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

64

Program odległy jest odpowiednikiem serwera i zawiera jedną lub więcej procedur odległych oraz dane globalne. Do obszaru danych globalnych mają dostęp wszystkie procedury działające w ramach jednego programu.

proc 1 proc 2 proc 3

wspólne dane globalne

Jeden zdalnie wywoływany program

Zdalnie wywoływane Zdalnie wywoływane programy i proceduryprogramy i procedury

Page 65: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

65

Standard Sun RPC wymaga przypisania każdemu programowi odległemu jednoznacznego 32-bitowego identyfikatora. Ponadto każdej procedurze należącej do danego programu przydziela się liczbę całkowitą. Procedury są numerowane sekwencyjnie: 1, 2, ... , N. Tak więc każdą procedurę odległą można zidentyfikować podając parę liczb. Specyfikacja przewiduje również możliwość rozróżnienia różnych wersji wywoływanego programu zdalnego.

Identyfikacja zdalnie Identyfikacja zdalnie wywoływanych procedurwywoływanych procedur

Page 66: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

66

W większości języków programowania argumenty wywołania procedur podaje się w notacji pozycyjnej. Duża liczba argumentów powoduje zmniejszenie czytelności programu. Tę niedogodność można usunąć zbierając wiele argumentów w jedną strukturę Po powrocie do procedury wywołującej z tej struktury można wyodrębnić też wartości wynikowe zwrócone przez procedurę wywoływaną.

Przekazywanie argumentówPrzekazywanie argumentów

Page 67: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

67

Mechanizm Sun RPC nie pozwala na jednoczesne wywołanie więcej niż jednej procedury w ramach jednego, zdalnie wywoływanego programu. Dopóki trwa wykonanie jednej z nich, system blokuje następne wywołania. Jest to szczególnie istotne w programach wykorzystujących wspólne dane dla kilku różnych procedur.

67

Wzajemne wykluczanie Wzajemne wykluczanie procedurprocedur

Page 68: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

68

Standard Sun RPC nie gwarantuje niezawodności zdalnego wywołania w przypadku, gdy używanym protokołem warstwy transportowej jest UDP. Jeśli program wywołujący procedurę nie otrzyma odpowiedzi oznaczającej powrót po jej wykonaniu to procedura wykonała się zero lub więcej razy. Nadejście odpowiedzi oznacza natomiast, że procedura została wykonana co najmniej jeden raz.Jeśli aplikacja korzystająca z mechanizmu Sun RPC używa protokołu UDP to trzeba ją zbudować tak, aby była odporna na konsekwencje tych własności.Przykładowo, wielokrotne i jednokrotne wykonanie zdalnej procedury powinno dać takie same wyniki - warunek idempotencji.

Semantyka wywołań Semantyka wywołań a protokół komunikacyjnya protokół komunikacyjny

Page 69: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

69

Każdy program RPC rejestruje swój numer i numer używanego portu u zarządcy odwzorowań RPC. Program klienta kontaktuje się z programem zarządcy działającym na porcie 111, aby otrzymać numer portu określonego programu zdalnego.

program RPC(serwer)

gniazdo

zarządca odwzorowań RPC

(serwer)

gniazdo111

program RPC(serwer)

gniazdo

Numer programu a numer Numer programu a numer portuportu

Page 70: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

70

1. Utwórz gniazdo bierne, związane z portem 111.2. Przyjmuj kolejne żądania zarejestrowania numeru portu programu RPC lub odszukania numeru portu na podstawie podanego numeru programu RPC.

Żądanie rejestracji jest zgłaszane przez programy działające lokalnie. Każde zgłoszenie ma postać pary składającej się z numeru programu RPC i numeru portu. Po otrzymaniu żądania zarządca dopisuje otrzymaną parę do bazy odwzorowań.Żądania odszukania numeru portu mogą być nadsyłane z dowolnego komputera. Każde zgłoszenie zawiera numer programu RPC na podstawie którego zarządca wyszukuje w bazie odwzorowań numer portu.

Algorytm programu zarządcyAlgorytm programu zarządcy

Page 71: Współbieżność, tunelowanie i kapsułkowanie, XDR i RPCusers.uj.edu.pl/~ciesla/sieci_n/sieci_05n.pdf · Zewnętrzna reprezentacja danych - XDR. 6. Koncepcja programowania rozproszonego.

71

Poza klasycznymi zastosowaniami, model klient serwer może być wykorzystany także do innych celów. Przedstawione przykłady odnoszą się do przekazywania i konwersji pakietów. We wszystkich zastosowaniach należy pamiętać o konwersji danych pomiędzy różnymi architekturami sprzętowymi klienta i serwera. Najpowszechniej używany jest tu standard XDR zakładający symetryczną konwersję danych.

PodsumowaniePodsumowanie