Networking. Zaawansowane technologie Javy 2019

Podobne dokumenty
Java programowanie sieciowe

Programowanie sieciowe

Adresy URL. Zaawansowane technologie Javy 2019

Programowanie współbieżne i rozproszone

Przykłady interfejsu TCP i UDP w Javie

Programowanie rozproszone w języku Java

Programowanie w języku Java

Platformy Programistyczne Zagadnienia sieciowe i wątki

Lab5 - Badanie protokołów pocztowych

Zadanie 2: transakcyjny protokół SKJ (2015)

Wybrane działy Informatyki Stosowanej

JAVA I SIECI. MATERIAŁY:

URL. Budowa URL (ang. Uniform Resource Locator): working#downloading

Komunikacja z użyciem gniazd aplikacje klient-serwer

Przesyłania danych przez protokół TCP/IP

Programowanie aplikacji w architekturze Klient-Serwer - UDP

Java a dost p do Internetu.

Klient-Serwer Komunikacja przy pomocy gniazd

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

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Gniazda komunikacji sieciowej w środowisku Java

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Sieci komputerowe i bazy danych

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Java programowanie w sieci. java.net RMI

Serwer współbieżny połączeniowy

Gniazda BSD implementacja w C#

Wydział Informatyki, Elektroniki i Telekomunikacji Katedra Telekomunikacji

Podstawowe typy serwerów

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

Java wybrane technologie

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

Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP.

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

ZiMSK. Konsola, TELNET, SSH 1

1. Model klient-serwer

Programowanie Sieciowe 1

Moduł Ethernetowy. instrukcja obsługi. Spis treści

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

Aplikacja wielowątkowa prosty komunikator

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

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

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

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

Protokoły sieciowe - TCP/IP

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

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

IP: Maska podsieci: IP: Maska podsieci: Brama domyślna:

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

Laboratorium Sieci Komputerowych - 2

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

Tomasz Greszata - Koszalin

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

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

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

SEGMENT TCP CZ. II. Suma kontrolna (ang. Checksum) liczona dla danych jak i nagłówka, weryfikowana po stronie odbiorczej

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

Moduł Ethernetowy EL-ETH. Instrukcja obsługi

Podstawowe pojł cia. Czego sił nauczymy? Pojł cia hosta. Hosty Adresowanie Internetowe Porty Protokoóy

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

OBSŁUGA I KONFIGURACJA SIECI W WINDOWS

Zarządzanie ruchem w sieci IP. Komunikat ICMP. Internet Control Message Protocol DSRG DSRG. DSRG Warstwa sieciowa DSRG. Protokół sterujący

Adresowanie grupowe. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 25 kwietnia 2006

SSL (Secure Socket Layer)

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

Na podstawie: Kirch O., Dawson T. 2000: LINUX podręcznik administratora sieci. Wydawnictwo RM, Warszawa. FILTROWANIE IP

Java Enterprise Edition spotkanie nr 1 (c.d.) JavaMail

Ćwiczenie 9 - Zaawansowane metody programowania w sieci komputerowej

Laboratorium - Przeglądanie tablic routingu hosta

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Aplikacje RMI

Problemy z bezpieczeństwem w sieci lokalnej

Komunikacja między sterownikami przez protokół ADS

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Iteracyjny serwer TCP i aplikacja UDP

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ ADRESACJA W SIECIACH IP. WSTĘP DO SIECI INTERNET Kraków, dn. 24 października 2016r.

Aplikacja Sieciowa wątki po stronie klienta

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

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

Tunelowanie, kapsułkowanie, XDR. 1. Transmisja tunelowa i kapsułkowanie serwery proxy. 2. Zewnętrzna reprezentacja danych XDR.

Protokoły wspomagające. Mikołaj Leszczuk

SIECI KOMPUTEROWE Adresowanie IP

Laboratorium 3.4.3: Usługi i protokoły

Warstwa sieciowa. Model OSI Model TCP/IP. Aplikacji. Aplikacji. Prezentacji. Sesji. Transportowa. Transportowa

Wykład Nr Sieci bezprzewodowe 2. Monitorowanie sieci - polecenia

PROTOKOŁY WARSTWY TRANSPORTOWEJ

INSTRUKCJA KONFIGURACJI KLIENTA POCZTOWEGO

Wireshark analizator ruchu sieciowego

pasja-informatyki.pl

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

Sieci komputerowe Warstwa aplikacji

Sieci komputerowe. Wykład dla studentów Informatyki Stosowanej i Fizyki Komputerowej UJ 2007/2008. Michał Cieśla

Router programowy z firewallem oparty o iptables

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n

MODEL OSI A INTERNET

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

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

Wszystkie parametry pracy serwera konfigurujemy w poszczególnych zakładkach aplikacji, podzielonych wg zakresu funkcjonalnego.

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Transkrypt:

Networking Zaawansowane technologie Javy 2019

Model klient-serwer W modelu klient-serwer (ang. client-server) dane trzymane są na serwerze, interfejs użytkownika i logika przetwarzania danych są realizowane na kliencie. Zadaniem serwera jest przetwarzanie i analizowanie danych przed odesłaniem ich do klienta. Przykłady takich modeli: FTP, WWW. Przeciwieństwem tego modelu jest model równorzędny (ang. peer-to-peer) takie jak gry sieciowe, system telefoniczny, itp.

Gniazda Transmitowanie danych w pakietach to bardzo skomplikowana czynność na szczęście berkeleyowkie gniazda pozwalają traktować połączenie sieciowe jak strumień. Gniazdo obsługuje połączenie między dwoma hostami w sieci: łączy się ze zdalną maszyną, wysyła dane, odbiera dane, zamyka połączenie, a także łączy się z portem, czeka na dane i odbiera połączenie o zdalnej maszyny na porcie granicznym. Klasa Socket jest wykorzystywana przez klienty i serwery posiada metody pozwalające wykonywać pierwsze cztery z wymienionych operacji.

Klasa Socket Socket to podstawowa klasa do wykonywania operacji TCP po stronie klienta. W czasie konstrukcji obiektu klasy Socket od razu jest nawiązywane połączenie: Socket (String host, int port) throws UnknownHostException, IOException Socket (InetAddress host, int port) throws IOException Na końcu pracy z gniazdem należy zamknąć połączenie: socket.close()

Klasa Socket Obiekt klasy Socket posiada kilka metod udostępniających informacje o gnieździe: getinetaddress() getport() getlocalport() isclosed()

Komunikacja z hostem za pomocą obiektu Socket Komunikacja z hostem jest realizowana za pomocą zwykłych strumieni bajtowych, do których dostęp uzyskuje się za pomocą metod: getinputstream() getoutputstream() Zwykle strumienie te są opakowywane: Socket s = new Socket( ); BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream())); PrintWriter out = new PrintWriter( new OutputStreamWriter(s.getOutputStream()));

Komunikacja z hostem za pomocą obiektu Socket Metoda close() gniazda zamyka automatycznie jego strumienie do komunikacji. Gdy jeden ze strumieni do komunikacji zostanie zamknięty, całe gniazdo jest zamykane. Gdy w czasie pracy z gniazdem chcemy zamknąć tylko strumień do czytania lub pisania należy użyć jednej z metod: shutdowninput() shutdownoutput()

Opcje gniazda Socket Opcje gniazda określają, w jaki sposób gniazda wysyłają i odbierają dane: TCP_NODELAY wartość true wyłącza schemat buforowania; SO_LINGER określa, co należy zrobić z datagramami, które nie zostały wysłane przed zamknięciem gniazda; SO_TIMEOUT wartość wyrażona w milisekundach powoduje, że gniazdo nie zablokuje się na dłużej w trakcie czytania (zgłaszany jest wyjątek InterruptedException ale gniazdo nie jest zamykane); SO_KEEPALIVE wartość true włącza system kontrolowania bezczynnych połączeń (raz na dwie godziny).

Serwer Pisząc serwer zawsze trzeba opracować protokół rozmowy z klientami. Cykl życiowy serwera: serwer zajmuje port; w pętli: serwer czeka na klienta, prowadzi z nim rozmowę a na końcu zamyka połączenie z klientem; serwer zwalnia port po zakończonej pracy.

Klasa ServerSocket Gniazdo serwera zajmuje lokalny port i czeka na nadchodzące połączenia TCP. W czasie konstrukcji obiektu klasy ServerSocket od razu jest zajmowany lokalny port: ServerSocket (int port) throws IOException ServerSocket (int port, int queue) throws IOException

Klasa ServerSocket Przyjmowanie i zamykanie połączeń: ServerSocket server = new ServerSocket(4444); Socket s = server.accept(); // rozmowa z klientem s.close(); Dostęp do strumieni za pomocą gniazda roboczego: OutputStream os = s.getoutputstream(); InputStream is = s.getinputstream();

Klasa ServerSocket Obiekt klasy ServerSocket posiada kilka metod udostępniających informacje o gnieździe: getinetaddress() getlocalport() Opcje gniazd serwera: SO_TIMEOUT wartość wyrażona w milisekundach określa czas akceptacji nowego połączenia (wartość 0 oznacza brak limitu).

Program telnet Przykład wysłania listu z konsoli: prz@sunflower:~$ telnet swiatowit 25 Trying 192.168.3.1... Connected to swiatowit.prac.ii. Escape character is '^]'. 220 swiatowit.ii.uni.wroc.pl ESMTP Postfix HELO neo.edu.pl 250 swiatowit.ii.uni.wroc.pl MAIL FROM: stirlitz 250 2.1.0 Ok. RCPT TO: prz@ii.uni.wroc.pl 250 2.1.5 Ok. DATA 354 End data with <CR><LF>.<CR><LF> to jest mail testowy wysłany z konsoli ;). 250 2.0.0 Ok: queued as C0E7E351A1 QUIT 221 2.0.0 Bye Connection closed by foreign host. prz@sunflower:~$

Program telnet Aby przetestować działanie różnych protokołów z wykorzystaniem gniazd można wykorzystać program telnet. Telnet łączy się ze wskazanym serwerem, czeka na polecenia użytkownika i zwraca odpowiedzi od serwera. Domyślnie telnet łączy się z portem 23, ale można mu wskazać dowolny port. Przykład: % telnet localhost 25 Aby skorzystać z programu telnet i porozmawiać z serwerem jakieś usługi należy poznać podstawowe elementy danego protokołu. Można wykorzystać program telnet do udawania klienta (testowanie własnych serwerów).

Bezpieczne gniazda Istnieje możliwość szyfrowania danych przesyłanych przez sieć za pomocą gniazd używając protokołu SSL (ang. Secure Sockets Layer). Rozszerzenie zwykłych gniazd o szyfrowanie jest dostępne w pakiecie javax.net.ssl w postaci klas SSLSocket i SSLServerSocket.

Klasa MulticastSocket Konstruktory: MulticastSocket () MulticastSocket (int port) Podstawowe metody: void joingroup (InetAddress ia) void leavegroup (InetAddress ia) void settimetolive (int ttl) int gettimetolive ()

Protokół UDP w porównaniu z TCP Implementacja UDP w Javie składa się z dwóch klas: klasa DatagramPacket pozwala umieścić albo odzyskać dane z pakietów UDP (czyli z datagramów); klasa DatagramSocket wysyła i odbiera datagramy UDP. W UDP nie istnieje pojęcia gniazda serwera używa się takich samych gniazd do wysyłania i odbierania datagtamów. W UDP nie pracuje się ze strumieniami zawsze operuje na paczkach z danymi. Gnizado UDP nie jest związane z żadnym konkretnym hostem może wysyłać i odbierać dane od wielu niezależnych hostów.

Klasa DatagramPacket Teoretycznie w datagramie UDP można zmieścić do 65507 bajtów danych, na wielu platformach jednak rzeczywistym ograniczeniem jest rozmiar 8192 bajtów ale naprawdę bezpiecznie jest wtedy, gdy rozmiar ten nie przekracza 512 bajtów. Datagram składa się z nagłówka IP (minimum 20 bajtów), nagłówka UDP (8 bajtów) i bloku danych (maksymalnie 65507).

Klasa DatagramPacket Konstruktory do odbierania datagramów: DatagramPacket (byte[] buf, int length) DatagramPacket (byte[] buf, int offset, int length) Przykład: byte[] data = new byte[8192]; DatagramPacket dp = new DatagramPacket(data,data.length);

Klasa DatagramPacket Konstruktory do wysyłania datagramów: DatagramPacket (byte[] buf, int length, InetAddress dest, int port) DatagramPacket (byte[] buf, int offset, int length, InetAddress dest, int port) Przykład: byte[] data = new byte[8192]; InetAddress ia = InetAddress.getByName(" "); int port = 7; DatagramPacket dp = new DatagramPacket(data,data.length,ia,port);

Klasa DatagramPacket Klasa DatagramPacket zawiera kilka metod do odczytywania informacji z datagramów: InetAddress getaddress () int getport () byte[] getdata () int getlength () int getoffset () Przykład: DatagramPacket dp = ; // String s = new String(dp.getData(),"utf-8"); // ByteArrayInputStream bis = new ByteArrayInputStream( dp.getdata(),dp.getoffset(),dp.getlength()); DataInputStream dis = new DataInputStream(bis);

Klasa DatagramPacket Klasa DatagramPacket zawiera kilka metod do wpisywania danych do datagramów oraz wprowadzania zmian w nagłówku: void setaddress (InetAddress ia) void setport (int port) void setdata (byte[] buf) void setdata (byte[] buf, int off, int len) void setlength (int len) Przykład: byte[] data = new byte[8192]; DatagramPacket dp = ; // dp.setdata(data); //

Klasa DatagramSocket Wszystkie gniazda datagramowe są powiązane z lokalnym portem. Jeśli piszesz serwer, klienty muszą wiedzieć, na którym porcie serwer czeka na przychodzące datagramy; wtedy używasz konstruktora: DatagramSocket (int port) Jeśli piszesz klienta, możesz użyć portu anonimowego; wtedy używasz konstruktora: DatagramSocket () Aby odczytać numer portu zajętego przez gniazdo UDP należy się posłużyć metodą getlocalport(). Aby zwolnić zajęty port UDP należy zamknąć gniazdo metodą close().

Klasa DatagramSocket Po skonstruowaniu datagramu można go wysłać metodą send: DatagramPacket dp = ; DatagramSocket ds = ; ds.send(dp); Metoda receive pozwala odczytać datagram (blokada bieżącego wątku aż do otrzymania datagramu) i po odczycie umieszcza dane w obiekcie datagramu: DatagramPacket dp = ; DatagramSocket ds = ; ds.receive(dp);

Klasa DatagramSocket Połączeniami UDP można zarządzać za pomocą następujących metod: void connect (InetAddress host, int port) określa wybrany host i port z którym będzie się komunikować gniazdo UDP; void disconnect () znosi ograniczenia nałożone przez metodę connect; int getport () zwraca numer portu, do którego gniazdo jest podłączone (albo -1); InetAddress getinetaddress () zwraca adres hosta, do którego gniazdo jest podłączone (albo null). Opcje gniazd serwera: SO_TIMEOUT wartość wyrażona w milisekundach określa czas akceptacji nowego połączenia (wartość 0 oznacza brak limitu).

Multicasting Unicasting zapewnia komunikację między dwoma punktami w sieci. Multicasting to transmisja grupowa realizowana przez dodatkowe protokoły warstwy aplikacji opierające się na TCP albo UDP. Broadcasting to komunikacja rozgłoszeniowa.

Multicasting Multicasting zaprojektowano z myślą o niewidocznym wpasowaniu go w strukturę Internetu większość pracy wykonują rutery, programiści nie powinni mieć z nim styczności. Rutery gwarantują, że pakiet zostanie dostarczony wszystkim hostom w grupie multicast.

Multicasting Przy multicastingu w nagłówku datagramu znajduje się dodatkowe pole TTL (ang. Time-To- Live), które określa maksymalną liczbę ruterów, przez które może przejść pakiet. Adresy multicast to adresy IP z zakresu 224.0.0.0 239.255.255.255 (klasa D). Adres 224.0.0.1 jest zarezerwowany dla grupy multicast w sieci lokalnej

Multicasting Kiedy host chce przesłać dane do grupy multicast, umieszcza je w zwykłych datagramach UDP adresowanych do grupy multicast. Dane rozsyłane za pomocą multicastingu to przede wszystkim obraz lub dźwięk.

Klasa MulticastSocket Klasa MulticastSocket odpowiada za obsługę multicastingu w Javie. Gniazdo MulticastSocket zachowuje się podobnie do DatagramSocket, czyli wysyła i odbiera dane za pomocą obiektów DatagramPacket.

Klasa MulticastSocket Konstruktory: MulticastSocket () MulticastSocket (int port) Podstawowe metody: void joingroup (InetAddress ia) void leavegroup (InetAddress ia) void settimetolive (int ttl) int gettimetolive ()

Klasa MulticastSocket Odczytywanie pakietów przeznaczonych dla grupy: MulticastSocket ms = new MulticastSocket(2468); InetAddress ia = InetAddress.getByName("224.0.0.1"); byte[] buf = new byte[8192]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ms.joingroup(ia); while (true) { ms.receive(dp); String s = new String(dp.getData(),"utf-8"); // }

Klasa MulticastSocket Wysyłanie pakietów do grupy: byte[] buf = "dane multicast\r\n".getbytes(); InetAddress ia = InetAddress.getByName("experiment.mc.net"); int port = 2468; DatagramPacket dp = new DatagramPacket(buf,buf.length,ia,port); MulticastSocket ms = new MulticastSocket(); ms.send(dp); //

Literatura E.R.Harold: Java. Programowanie sieciowe. Wydawnictwo RM, Warszawa 2001. C.S.Horstmann, G.Cornell: Java techniki zaawansowane. Wydanie 9. Rozdział 3: Programowanie aplikacji sieciowych. Wydawnictwo HELION, Gliwice 2013. Custom Networking (Java Tutorial): https://docs.oracle.com/javase/ tutorial/networking/