Sít ová komunikace v C++

Podobné dokumenty
Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

7. Aplikační vrstva. Aplikační vrstva. Počítačové sítě I. 1 (5) KST/IPS1. Studijní cíl. Představíme si funkci aplikační vrstvy a jednotlivé protokoly.

Y36PSI Protokolová rodina TCP/IP

MODELY POČÍTAČOVÝCH SÍTÍ

6. Transportní vrstva

Počítačové sítě Transportní vrstva. Transportní vrstva

Protokoly přenosu. Maturitní otázka z POS - č. 15. TCP/IP (Transmission Control Protocol/Internet Protocol)

Relační vrstva SMB-Síťový komunikační protokol aplikační vrstvy, který slouží ke sdílenému přístupu k souborům, tiskárnám, sériovým portům.

Model ISO - OSI. 5 až 7 - uživatelská část, 1 až 3 - síťová část

Úvod Virtuální kanál TCP Datagramová služba UDP URL TCP, UDP, URL. Fakulta elektrotechnická

Identifikátor materiálu: ICT-3-03

Přednáška 3. Opakovače,směrovače, mosty a síťové brány

Transportní vrstva. RNDr. Ing. Vladimir Smotlacha, Ph.D.

Síťové programování. Berkeley sockets Zdroje. Wikipedia Google Jan Kubr

Hypertext Transfer Protocol (HTTP/1.1 RFC 2616) Počítačové sítě Pavel Šinták

Počítačové sítě II. 14. Transportní vrstva: TCP a UDP. Miroslav Spousta, 2005

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Počítačové sítě. Lekce 4: Síťová architektura TCP/IP

Vlastnosti podporované transportním protokolem TCP:

Inovace bakalářského studijního oboru Aplikovaná chemie

Inovace a zkvalitnění výuky prostřednictvím ICT Počítačové sítě Vrstvový model TCP/IP Ing. Zelinka Pavel

Komunikační sokety. teorie a implementace v C#, C++ a Javě. Aleš Keprt Katedra informatiky UP duben 2006, revize květen 2007

Počítačová síť. je skupina počítačů (uzlů), popřípadě periferií, které jsou vzájemně propojeny tak, aby mohly mezi sebou komunikovat.

RESTful API TAMZ 1. Cvičení 11

Technologie počítačových sítí 8. přednáška

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

4. Síťová vrstva. Síťová vrstva. Počítačové sítě I. 1 (6) KST/IPS1. Studijní cíl. Představíme si funkci síťové vrstvy a jednotlivé protokoly.

Od CGI k FastCGI. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko.

JAK ČÍST TUTO PREZENTACI

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Počítačové sítě Systém pro přenos souborů protokol FTP

Protokoly: IP, ARP, RARP, ICMP, IGMP, OSPF

DUM 16 téma: Protokoly vyšších řádů

Počítačové sítě 1 Přednáška č.6 Transportní vrstva

File Transfer Protocol (FTP)

Instalace a konfigurace web serveru. WA1 Martin Klíma

Analýza aplikačních protokolů

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Internet protokol, IP adresy, návaznost IP na nižší vrstvy

Paralelizace datových přenosů

CCNA 2/10 Další funkce TCP/IP Aleš Mareček Jaroslav Matějíček 1

Tvorba informačních systémů

metodický list č. 1 Internet protokol, návaznost na nižší vrstvy, směrování

Rozhraní Sockets Java a C (BSD)

Vstupní a vstupní proudy v C++

Úvod do Web Services

Michal Krátký, Miroslav Beneš

EU-OPVK:VY_32_INOVACE_FIL9 Vojtěch Filip, 2013

Platební systém XPAY [

Komunikační protokoly počítačů a počítačových sítí

Radek Krej í. NETCONF a YANG NETCONF. 29. listopadu 2014 Praha, IT 14.2

Ukázka testu Informatiky pro přijímací zkoušky do navazujícího magisterského studia

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky UPS. FTP Klient. A05463 fboranek@atlas.

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

Site - Zapich. Varianta 1

Uživatelský modul. DF1 Ethernet

PROTOKOL RDS. Dotaz na stav stanice " STAV CNC Informace o stavu CNC a radiové stanice FORMÁT JEDNOTLIVÝCH ZPRÁV

Počítačové sítě II 17. WWW, HTTP. Miroslav Spousta, 2005

4. Transportní vrstva

TFTP Trivial File Transfer Protocol

Inovace bakalářského studijního oboru Aplikovaná chemie

Vývoj multiplatformní aplikace v Qt

Martin Flusser. December 15, 2016

Inovace výuky prostřednictvím šablon pro SŠ

Ing. Jitka Dařbujanová. TCP/IP, telnet, SSH, FTP

Protokoly a Internet. Miloš Hrdý. 19. listopadu 2007

Inovace bakalářského studijního oboru Aplikovaná chemie

Počítačové sítě II. 18. World Wide Web, HTTP Miroslav Spousta,

Zjednodusene zaklady ARP,TCP/IP Jiri Kubina Ver. 1.0 leden 2006

Programování v C++ 1, 1. cvičení

Y36PSI QoS Jiří Smítka. Jan Kubr - 8_rizeni_toku Jan Kubr 1/23

Se vznikem internetu se můžeme na síťovou komunikaci v Javě (komunikace mezi více JVM) dívat dvěma pohledy-způsoby:

Datum vytvoření. Vytvořeno 18. října Očekávaný výstup. Žák chápe pojmy URL, IP, umí vyjmenovat běžné protokoly a ví, k čemu slouží

VZOROVÝ STIPENDIJNÍ TEST Z INFORMAČNÍCH TECHNOLOGIÍ

Rodina protokolů TCP/IP. Rodina protokolů TCP/IP. verze 3. Téma 9: Transportní protokoly. Jiří Peterka

NAS 323 NAS jako VPN Server

I/O a SCADA systémy. iologik I/O Servery. iologik iologik 2000

Webový server lapache

Technologie počítačových sítí 2. přednáška

Rozklad na prvočinitele. 3. prosince 2010

Aplikační vrstva. PB002: Základy informačních technologíı. Eva Hladká. Slidy připravil: Eva Hladká a Tomáš Rebok

Obsah PODĚKOVÁNÍ...11

Zásobník protokolů TCP/IP

Server-side technologie pro webové aplikace

Protokol HTTP 4IZ228 tvorba webových stránek a aplikací

Komunikace v sítích TCP/IP (2)

Profibus (EN 50170) Standard pro distribuované průmyslové řízení. Distribuované systémy: ISO 7498 (Open System Interconnect)

Schéma e-pošty. UA (User Agent) rozhraní pro uživatele MTA (Message Transfer Agent) zajišťuje dopravu dopisů. disk. odesilatel. fronta dopisů SMTP

Protokol TELNET. Schéma funkčních modulů komunikace protokolem TELNET. Telnet klient. login shell. Telnet server TCP/IP.

SIP Session Initiation Protocol

Úvod do síťových technologií

Obsah. O autorech 9. Předmluva 13. KAPITOLA 1 Počítačové sítě a Internet 23. Jim Kurose 9 Keith Ross 9

ZÁKLADNÍ ANALÝZA SÍTÍ TCP/IP

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Telekomunikační sítě Protokolové modely

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

SSL Secure Sockets Layer

Nové jazykové brány do Caché. Daniel Kutáč

Internet & Sítě (1. přednáška)

Transkript:

5. prosince 2016, Brno Připravil: David Procházka Sít ová komunikace v C++ Programovací jazyk C++

Protokoly Strana 2 / 28 Obsah přednášky 1 Protokoly 2 Typy aplikací 3 CGI 4 Samostatná TCP aplikace 5 Vyšší úroveň 6 Shrnutí

Protokoly Strana 3 / 28 UDP UDP protokol (User Datagram Protocol) je tzv. nespolehlivý protokol ze sady protokolů internetu. UDP protokol přenáší datagramy mezi počítači v síti, ale narozdíl od TCP nezaručuje, zda přenášený paket neztratí, nezmění pořadí paketů, nebo zda některý paket nedoručí vícekrát. Díky tomu je UDP pro lehké a časově citlivé účely rychlejší a efektivnější. UDP se používá například pro DNS, streamovaná média, přenos hlasu nebo videa (VoIP) a online hry. Některé aplikace (jako třeba TFTP) mohou podle potřeby přidávat jednoduchý mechanismus spolehlivosti do aplikační vrstvy.

Protokoly Strana 4 / 28 Hlavička UDP UDP hlavička se skládá jen ze 4 políček, z nichž 2 jsou volitelná. Políčka zdrojového a cílového portu jsou 16bitová a identifikují odesílající a přijímající proces. Protože UDP je bezestavový a odesilatel nemusí vyžadovat odpověd, zdrojový port je volitelný. Pokud se nepoužije, zdrojový port by měl být nastaven na nulu. Po číslech portů následuje povinná délka UDP paketu včetně dat, v bytech. Minimální hodnota je 8 bajtů. Zbývající políčko hlavičky je 16bitový kontrolní součet pokrývající hlavičku i data. Tento součet je také vynechatelný, ale v praxi se téměř vždy používá.

Protokoly Strana 5 / 28 TCP TCP protokol (Transmission Control Protocol) je jedním ze základních protokolů sady protokolů Internetu, konkrétně představuje transportní vrstvu. Protokol garantuje spolehlivé doručování a doručování ve správném pořadí. TCP protokol ověřuje, zda přenesená data nebyla poškozena šumem tím, že před odesláním spočte kontrolní součet, uloží jej do odesílaného paketu a příjemce kontrolní součet vypočte znovu a ověří, že se shodují. TCP také rozlišuje data pro vícenásobné, současně běžící aplikace (například webový server a emalový server) běžící na stejném počítači. TCP podporuje mnoho na Internetu populárních protokolů a aplikací, včetně WWW, emailu a SSH.

Protokoly Strana 6 / 28 Princip funkce TCP Aplikace posílá proud (stream) 8bitových bajtů TCP protokolu k doručení sítí, TCP rozděluje proud bajtů do přiměřeně velkých segmentů. (Velikost segmentů je určena parametrem Maximum Transmission Unit linkové vrstvy sítě, ke které je počítač připojen.) TCP pak předá takto vzniklé pakety IP protokolu k přepravě internetem do TCP modulu na druhé straně TCP spojení. TCP ověří, že se pakety neztratily tím, že každému paketu přidělil číslo sekvence, které se také použije k ověření pořadí. TCP modul na straně příjemce posílá zpět potvrzení pro pakety které byly úspěšně přijaty. Pokud by se odesilateli potvzení nevrátilo do rozumné doby (round-trip time, RTT), vypršel by odesilatelův časovač a (pravděpodobně ztracená) data by vyslal znovu.

Protokoly Strana 7 / 28 Schéma TCP komunikace socket() bind() Server Client listen() socket() accept() recv() send() connect() send() recv() close() close()

Protokoly Strana 8 / 28 Zdroj http://cs.wikipedia.org/wiki/tcp http://cs.wikipedia.org/wiki/udp http://en.wikipedia.org/wiki/tcp http://en.wikipedia.org/wiki/udp

Typy aplikací Strana 9 / 28 Obsah přednášky 1 Protokoly 2 Typy aplikací 3 CGI 4 Samostatná TCP aplikace 5 Vyšší úroveň 6 Shrnutí

Typy aplikací Strana 10 / 28 Typy sít ových aplikací CGI (Common Gateway Interface) Aplikace spolupracuje s webovým serverem. Pokud prijde je zavolána, vytvoří se její instance. Jednoduché na programování, ale nevhodné pro frekventované služby. Permanentně běžící aplikace na určitém portu Instance aplikace obsadí určitý port a na něm přijímá požadavky. Nevyužívá webový server. Komplikovanější, ale obvykle rychlejší než ekvivalent v CGI. Může mít neustále zaalokované prostředky (připojení k databázi, načtená data v paměti, atp.)

CGI Strana 11 / 28 Obsah přednášky 1 Protokoly 2 Typy aplikací 3 CGI 4 Samostatná TCP aplikace 5 Vyšší úroveň 6 Shrnutí

CGI Strana 12 / 28 CGI: Získání informací o klientovi 1 # include < iostream.h> 2 # include <stdlib.h> 3 4 void main (){ 5 char * lpszremotehost = getenv (" REMOTE_ HOST "); 6 7 cout << " Content - type : text / html " << endl << endl ; 8... 9 cout << lpszremotehost << endl ; 10... 11 } Data zasílaná klientovi odešleme na cout. Webový server (Apache) je odešle.

CGI Strana 13 / 28 CGI: Převzetí parametrů Metod je několik. Subjektivně nejjednodužší je načíst proměnnou QUERY STRING. Tu pak rozparsovat podle symbolu & oddělujícího parametry. 1 char * data = getenv (" QUERY_STRING "); 2 string parametry = data ; string obsahuje něco jako "jmeno=jana&vek=12&vaha=39"

Samostatná TCP aplikace Strana 14 / 28 Obsah přednášky 1 Protokoly 2 Typy aplikací 3 CGI 4 Samostatná TCP aplikace 5 Vyšší úroveň 6 Shrnutí

Samostatná TCP aplikace Strana 15 / 28 Permanentně běžící aplikace v C/C++ Následující slidy se váží k příkladům o sít ových aplikacích v C/C++. Tento přístup nevyžaduje žádné speciální knihovny, ale je vzhledem k céčkovské orientaci relativně komplikovaný. Pokud to typ projektu umožňuje je lépe pokusit se použít některou z objektových knihoven (např. Qt).

Samostatná TCP aplikace Strana 16 / 28 TCP klient: vytvoření socketu hostent *host vzdálený počítač sockaddr in serversock socket (potrubí) 1 if (( host = gethostbyname ( argv [ 1])) == NULL ) { 2 cerr << " Spatna adresa " << endl ; 3 return 1; 4 } 5 6 int mysocket ; // na kterem bude server naslouchat 7 if (( mysocket = socket ( AF_INET, SOCK_STREAM, IPPROTO_TCP )) 8 == -1) { 9 cerr << " Nelze vytvorit soket " << endl ; 10 return 2; 11 }

Samostatná TCP aplikace Strana 17 / 28 TCP klient: connect 1 // Zaplnime strukturu sockaddr_ in 2 // Rodina protokolu 3 serversock. sin_ family = AF_ INET ; 4 // Cislo portu, ke kteremu se pripojime 5 serversock. sin_ port = htons ( serverport ); 6 // Nastaveni IP adresy, ke ktere se pripojime 7 memcpy (&( serversock. sin_addr ), host -> h_addr, 8 host -> h_length ); 9 10 // Pripojeni soketu 11 if ( connect ( mysocket, ( sockaddr *)& serversock, 12 sizeof ( serversock )) == -1) { 13 cerr << " Nelze navazat spojeni " << endl ; 14 return -1; 15 }

Samostatná TCP aplikace Strana 18 / 28 TCP klient: zasílání a příjem 1 if (( size = send ( mysocket, text. c_str (), 2 text. size () + 1, 0)) == -1){ 3 cerr << " Problem s odeslanim dat " << endl ; 4 return -1; 5 } 6 cout << " Odeslano " << size << endl ; 7 8 // Prijem dat 9 text = ""; 10 while (( size = recv ( mysocket, buf, BUFSIZE, 0))!= -1){ 11 cout << " Prijato " << size << endl ; 12 text += buf ; 13 } 14 // Uzavru spojeni 15 close ( mysocket );

Samostatná TCP aplikace Strana 19 / 28 TCP server: start a příjem 1 sockname. sin_addr. s_addr = INADDR_ANY ; 2... 3 if ( bind ( mainsocket, ( sockaddr *)& sockname, 4 sizeof ( sockname )) == -1){ 5 cerr << " Problem s pojmenovanim soketu." << endl ; 6 return -1; 7 } 8 listen ( listensocket, 5); 9 10... 11 sockaddr_ in clientinfo ; 12 addrlen = sizeof ( clientinfo ); 13 // Vyberu z fronty pozadavek na spojeni. 14 // " client " je novy soket spojujici klienta se serv. 15 int client = accept ( mainsocket, 16 ( sockaddr *)& clientinfo, & addrlen );

Samostatná TCP aplikace Strana 20 / 28 UDP Princip komunikace pomocí UDP je implementačně velice podobný. Viz vzorové příklady k přednášce.

Vyšší úroveň Strana 21 / 28 Obsah přednášky 1 Protokoly 2 Typy aplikací 3 CGI 4 Samostatná TCP aplikace 5 Vyšší úroveň 6 Shrnutí

Vyšší úroveň Strana 22 / 28 Použijte připravené třídy: např. v Qt Pokud chcete využívat třídy na práci se sítí, je nutné přidat do projektového souboru řádek 1 QT += network Pokud navíc pracujete pod OS X a nechcete, aby se Vám vytvořila aplikace s GUI tak: 1 CONFIG -= app_ bundle Hlavní funkce programu pak bude obsahovat instaci třídy QCoreApplication místo QApplication 1 QCoreApplication a( argc, argv ); 2... 3 return a. exec ();

Vyšší úroveň Strana 23 / 28 Stažení vzdáleného souboru 1 QNetworkAccessManager * manager ; 2 = new QNetworkAccessManager ( this ); 3 4 connect ( manager, SIGNAL ( finished ( QNetworkReply *)), 5 this, SLOT ( showfinished ( QNetworkReply *))); 6 7 m_manager -> get ( QNetworkRequest ( address )); 8... 9 10 void Downloader :: showfinished ( QNetworkReply * reply ){ 11 QFile file (ui -> targetlineedit -> text ()); 12 file. open ( QIODevice :: WriteOnly ); 13 file. write ( reply -> readall ()); 14 file. flush (); 15 file. close (); 16 delete reply ; 17 }

Vyšší úroveň Strana 24 / 28 Použijte protokoly Existuje celá řada standardizovaných protokolů pro přenos dat. Neposílejte proto surová data. Protokol REST: často používaný prokol pro internetové aplikace Protokol SOAP: protokol známý nejen z různých enteprise systémů

Vyšší úroveň Strana 25 / 28 SOAP Nástupce XML-RPC. Protokol pro komunikaci mezi webovými službami. Zaměřen na tvorbu složitější komunikace. Lze použít více prokolů na aplikační vrstvě, ale nejrozšířenější je HTTP. Standard pro výměnu zpráv je XML (dobře čitelné, hůře parsovatelné). 1 <soap : Envelope xmlns : soap =" http :// schemas. xmlsoap. org / 2 <soap :Body > 3 < getproductdetails xmlns =" http :// app. com /ws"> 4 < productid >827635 </ productid > 5 </ getproductdetails > 6 </ soap :Body > 7 </ soap : Envelope >

Vyšší úroveň Strana 26 / 28 REST 1 Spojen s protokolem HTTP. Požadavek je kódován do URI. Existují 4 základní požadavky: GET (vrat ), PUT (upravit/zaměnit), POST (vyvtořit) a DELETE (smazat). http://example.com/resources/ http://example.com/resources/142 Pro datovou výměnu se používá ATOM/RSS nebo JSON. Jeho výhodou je: jednoduché snad rozšiřitelné rozhraní snadné zpracování a implementace 1 https://www.ibm.com/developerworks/webservices/library/ws-restful/

Shrnutí Strana 27 / 28 Obsah přednášky 1 Protokoly 2 Typy aplikací 3 CGI 4 Samostatná TCP aplikace 5 Vyšší úroveň 6 Shrnutí

Shrnutí Strana 28 / 28 Shrnutí CGI aplikace se implementují snadno, ale je nutné počítat s režií inicializace. Samostatné sít ové aplikace jsou komplexní, ale mohou být výrazně výkonnější. V C++ je možné používat běžné příkazy z C, ale je nutné počítat s komplexními strukturami. Qt 2, Boost 3 a jiné knihovny poskytují komfortnější nástavbu, která řeší řadu problémů za vás. 2 http://doc.qt.io/qt-5/examples-network.html 3 http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio.html