Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k...
Transcript of Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k...
![Page 1: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/1.jpg)
Jak naprogramovat internetovou komunikaci?
![Page 2: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/2.jpg)
PřipomenutíIP paket v. 4
![Page 3: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/3.jpg)
TCP protokol
• transportní protokol – RFC 793• spojovaná spolehlivá služba
– zajišťuje číslování paketů a potvrzovánípříjmu mezi koncovými stanicemi
• na počátku komunikace je potřeba navázat spojení
– chová se jako plně duplexní virtuální kanál• řízení toku
![Page 4: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/4.jpg)
TCP paketpseudohlavička
![Page 5: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/5.jpg)
• číslování paketů– SEQ number, ACK number
• control bits:– URG – příznak urgentních dat– ACK- platnost hodnoty ACK number
– PSH – požadavek na bezprostř. předání– RST – žádost o okamžité ukončení spojení
– SYN – otevírání spojení– FIN – uzavření spojení v jednom směru
![Page 6: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/6.jpg)
Navazování spojení
• 3 fázové potvrzovací schéma– three way handshake
• využívají se řídící bity pole CODE a čísla SEQ number a ACK number
• vytvoří se dva jednosměrné kanály (duplex)
![Page 7: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/7.jpg)
1 2
SYN seqno=x
SYN seqno=x
SYN seqno=y, ACK ackno=x+1
SYN seqno=y, ACK ackno=x+1
ACK ackno=y+1ACK ackno=y+1
![Page 8: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/8.jpg)
Uzavírání spojení
• každý jednosměrný kanál se uzavírásamostatně
![Page 9: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/9.jpg)
1 2
FIN seqno=x
FIN seqno=x
ACK ackno=x+1
ACK ackno=x+1
ACK ackno=y+1
ACK ackno=y+1
FIN seqno=y, ackno=x+1
FIN seqno=y, ackno=x+1
![Page 10: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/10.jpg)
Porty• přípojné místo aplikace
port port
proces proces
?
vyššívrstvatransportnívrstva
![Page 11: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/11.jpg)
„Dobře známé porty“ (vyhrazené)
• některé porty mohou existovat trvale a jejich čísla (adresy) jsou vyhrazeny– tzv. dobře známé porty
(well-known ports)
• slouží např. k přijímánížádostí o konkrétníslužby– např. na portu 80 se
přijímají požadavky na WWW stránky
• jiné porty mohou vznikat dynamicky– a dostávat dynamicky
přidělovaná čísla od OS
• takovéto porty jsou zřizovány pro potřeby již navázaných komunikací– např. pro vlastní přenos
souborů, přičemž žádost je směrována na vyhrazený port
![Page 12: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/12.jpg)
1/tcp tcpmux TCP Port Service Multiplexer2/tcp compressnet Management Utility 3/tcp compressnet Compression Process5/tcp rje Remote Job Entry7/tcp echo Echo9/tcp discard Discard11/tcp systat Active Users13/tcp daytime Daytime (RFC 867) 17/tcp qotd Quote of the Day18/tcp msp Message Send Protocol19/tcp chargen Character Generator20/tcp ftp-data File Transfer [Default Data] 21/tcp ftp File Transfer [Control] 22/tcp ssh SSH Remote Login Protocol23/tcp telnet Telnet24/tcp any private mail system any private mail system25/tcp smtp Simple Mail Transfer 27/tcp nsw-fe NSW User System FE 29/tcp msg-icp MSG ICP 31/tcp msg-auth MSG Authentication33/tcp dsp Display Support Protocol35/tcp any private printer server any private printer server 37/tcp time Time38/tcp rap Route Access Protocol39/tcp rlp Resource Location Protocol41/tcp graphics Graphics42/tcp nameserver Host Name Server 43/tcp nicname Who Is44/tcp mpm-flags MPM FLAGS Protocol45/tcp mpm Message Processing Module [recv] 46/tcp mpm-snd MPM [default send] 47/tcp ni-ftp NI FTP 48/tcp auditd Digital Audit Daemon49/tcp tacacs Login Host Protocol (TACACS) 50/tcp re-mail-ck Remote Mail Checking Protocol51/tcp la-maint IMP Logical Address Maintenance52/tcp xns-time XNS Time Protocol53/tcp domain Domain Name Server 54/tcp xns-ch XNS Clearinghouse55/tcp isi-gl ISI Graphics Language56/tcp xns-auth XNS Authentication57/tcp any private terminal access any private terminal access58/tcp xns-mail XNS Mail 59/tcp any private file service any private file service
60/tcp Unassigned Unassigned61/tcp ni-mail NI MAIL 62/tcp acas ACA Services63/tcp whois++ whois++ 64/tcp covia Communications Integrator (CI) 65/tcp tacacs-ds TACACS-Database Service66/tcp sql*net Oracle SQL*NET 67/tcp bootps Bootstrap Protocol Server 68/tcp bootpc Bootstrap Protocol Client69/tcp tftp Trivial File Transfer 70/tcp gopher Gopher71/tcp netrjs-1 Remote Job Service72/tcp netrjs-2 Remote Job Service73/tcp netrjs-3 Remote Job Service74/tcp netrjs-4 Remote Job Service75/tcp any private dial out service any private dial out service76/tcp deos Distributed External Object Store77/tcp any private RJE service any private RJE service78/tcp vettcp vettcp79/tcp finger Finger80/tcp http-www World Wide Web HTTP 81/tcp hosts2-ns HOSTS2 Name Server 82/tcp xfer XFER Utility 83/tcp mit-ml-dev MIT ML Device 84/tcp ctf Common Trace Facility85/tcp mit-ml-dev MIT ML Device 86/tcp mfcobol Micro Focus Cobol 87/tcp any private terminal link any private terminal link88/tcp kerberos Kerberos89/tcp su-mit-tg SU/MIT Telnet Gateway90/tcp dnsix DNSIX Securit Attribute Token Map 91/tcp mit-dov MIT Dover Spooler92/tcp npp Network Printing Protocol93/tcp dcp Device Control Protocol94/tcp objcall Tivoli Object Dispatcher95/tcp supdup SUPDUP96/tcp dixie DIXIE Protocol Specification97/tcp swift-rvf Swift Remote Virtural File Protocol98/tcp tacnews TAC News99/tcp metagram Metagram Relay101/tcp hostname NIC Host Name Server 102/tcp iso-tsap ISO-TSAP Class 0 103/tcp gppitnp Genesis Point-to-Point Trans Net104/tcp acr-nema ACR-NEMA Digital Imag. & Comm. 300
![Page 13: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/13.jpg)
UDP protokol
• nadstavba protokolu IP – RFC 768• nepotvrzovaná datagramová služba
– rozšiřuje IP protokol o porty
![Page 14: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/14.jpg)
UDP paket
![Page 15: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/15.jpg)
ICMP• Internet Control Message Protocol• služební (řídicí) protokol internetu• musí jej implementovat každé zařízení• zprávy ICMP jsou „zabaleny“ do IP paketu• příklady zpráv (pole Type):
• 0 Echo reply (odpověď na požadavek, při PINGu)• 3 Destination unreachable (dále se větví dle pole
CODE)• 5 Redirect• 6 Alternate host address• 8 Echo Request• 11 Time Exceeded (TTL k 0)
![Page 16: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/16.jpg)
ICMP paket
![Page 17: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/17.jpg)
Co nám nabízejí některéprogramátorské nástroje?
• „nižší úroveň programování“– programování pomocí tzv. „socketů“
• UNIX, Linux, Windows, Python, JAVA
• „vyšší úroveň“– zapouzdření služeb (socketů) do tříd v rámci
objektově orientovaného programování• JAVA, .NET (Microsoft), Python• MFC – třída CSocket• Code Gear: TBaseSocket, TCPClient, ...
![Page 18: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/18.jpg)
Rozhraní socketů
Je sice nejstarší, na nízké úrovni, ale stále se používá …
![Page 19: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/19.jpg)
Rozhraní socket
BSD (Berkley Socket Distribution)• jde o standardní softwarové rozhraní pro
zasílání dat pomocí rodiny IP protokolů• vymyšleno a poprvé implementováno na
univerzitě v Berkley do OS UNIX• umožňuje programátorům používat
TCP/IP, resp. UDP, obdobným způsobem, jako se pracuje se soubory
![Page 20: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/20.jpg)
• poprvé implementováno v jazyce C• implementace do operačních systémů
– UNIX (Linux) - knihovna socket.h – MS Windows – knihovna winsock.h
• programátorské funkce jsou navrženy tak, aby bylo snadné naprogramovat aplikaci klient -server
Charakteristika
![Page 21: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/21.jpg)
Princip práce se soubory v jazyce C
• nejprve se soubor „otevře“; informace o otevřeném souboru se uloží do specálnídatové struktury OS (file descriptor)– zde proměnná f (ukazatel na typ FILE*)
f = fopen( ″text.doc ″, ″rb ″)
jméno souboru mód otev ření
r – čtení, w – zápis
b – binární mód
![Page 22: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/22.jpg)
• ze souboru čteme data pomocí funkce fread (…) , zapisujeme data pomocí funkce fwrite (…)– zde v ukázce např. do pole data přečteme 10 bloků
po 1 bytu ze souboru f, který jsme předtím otevřeli
fread(data,1,10,f)
• po skončení práce „uzavřeme“ soubor voláním funkce fclose (…)
fclose(f)
![Page 23: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/23.jpg)
• návrháři přenesli tento jednoduchý princip do programování komunikace sítí
Je to ale přece o trochu složitější …
• programujeme aplikaci klient/server– server čeká na příchod požadavku klienta
• TCP je orientované na spojení– funkce navazující spojení
• musíme znát mnoho údajů– IP adresu vlastní a partnera, port
![Page 24: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/24.jpg)
Co je to socket?
• učeně– koncový komunikační uzel (endpoint)
• méně učeně– datová struktura (data), nesoucí informaci o
stavu síťového spojení; • musíme jej vytvořit voláním speciální funkce
podobně jako fopen pro otevření souboru
– komunikujeme pomocí funkcí write() a read(), jejichž parametr je otevřený socket (kam se posílají data)
![Page 25: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/25.jpg)
Základní funkce rozhraní
• socket ()– vytvoří strukturu socket– používá jej klient i server– argumentem je rodina a typ protokolu
(TCP,UDP), typ služby (spojovaná/nespojovaná)
– vrací „nový“ socket• closesocket ()
– dealokuje (zavírá) socket
![Page 26: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/26.jpg)
Funkce používané serverem• bind ()
– připojí do socketu identifikaci lokálního uzlu, tj. „moji“IP adresu a port
• listen() – spojovaná služba– „pasivuje“ socket, vytvoří frontu pro požadavky na
spojení (přes rezervovaný port)
• accept () - spojovaná služba– přijde-li požadavek, accept vytvoří nový socket,
pomocí něhož server komunikuje s klientem; původnísocket je nadále v pasivním stavu a očekává příchod nového požadavku (na rezervovaném portu)
![Page 27: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/27.jpg)
Funkce používané klientem • connect () - spojovaná služba
– vytvoří spojení ke vzdálenému serveru• v případě TCP – 3-fázový potvrzovací protokol
– parametrem je adresa a port vzdáleného serveru
– po vytvoření spojení lze zahájit výměnu dat se serverem
![Page 28: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/28.jpg)
Funkce přenosu dat • read () , write () - spojovaná služba
• recv (), recvfrom () , recvmsg
• send (), sendto (), sendmsg ()
– čtení a zápis dat „do socketu– recvfrom zaznamená i příjemce
![Page 29: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/29.jpg)
Spojované služby
close
read
write
connect
socket
Klient
close
write
read
bind
socket
Server
listen
accept
![Page 30: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/30.jpg)
Nespojované služby
close
read
write
connect
socket
Klient
close
sendtosendmsg
bind
socket
Server
recvfromrecvmsg
![Page 31: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/31.jpg)
Konkurentní TCP server
Server(proces)
Operační systém
Aplikace
rezervovaný port
Vlákno(syn)
individuální socketya porty
Vlákno(syn)
![Page 32: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/32.jpg)
Ukázky, jak se to programuje …
s=socket(PF_INET,SOCK_STREAM, IPPROTO_TCP)
rodina protokol ů
spojovanáslužba
protokol TCP
1. Vytvoření socketu
![Page 33: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/33.jpg)
Ukázky, jak se to programuje …
addr.sin_family = AF_INET;
addr.sin_port = hston(3434);addr.sin_addr.S_un.S_addr = INADDR_ANY;
bind(s,(sockaddr*)&addr,sizeof(addr))
port, kde poslouchám
moje adresa
(0.0.0.0)
2. Bind – server: vložení vlastní IP adresy a portu k socketu
• naplním datovou strukturu pro adresu a port
![Page 34: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/34.jpg)
Ukázky, jak se to programuje …
li sten (s, SOMAXCON);
max. délka fronty
socket
3. listen – server: čeká na příchod požadavku
![Page 35: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/35.jpg)
Ukázky, jak se to programuje …
//vytvo ření nov ého procesu sx =accept (s, adresa,d élka );read (sx ,data ,vel );write (sx ,data ,vel );
nový socket
4. accept – server: po příchodu požadavku vytvořínový socket a zpravidla vytvoří nový proces, který dále komunikuje
![Page 36: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/36.jpg)
• algoritmičtěji (Linux)listen(s,SOMAXCON);
while (nen í_konec)
{
SOCKET sx = accept (s, addr ,& delka );
fork() //vytvo ření syn. procesu
{
read(s,data,vel );
write(s,data,vel );
}
}
![Page 37: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/37.jpg)
• k dispozici je mnoho pomocných funkcí– pro získání informací o počítači:
• gethostbyname()• GetAddressByName - ve winsock2.h
– čtení a změna parametrů socketu• getsockopt(), setsockopt()
– převodní funkce• getservbyport() – zjistí informace o serveru, např.
voláme z řetězcem FTP, vrátí port 21
– přidělení náhodného čísla portu
![Page 38: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/38.jpg)
Princip socketů je stále využíván i v nových programátorských prostředcích!
![Page 39: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/39.jpg)
Programování pomocí OOP(objektově orientovaného programování)
![Page 40: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/40.jpg)
JAVA• sockety, třídy pro práci s adresami
Microsoft• MFC
– objektové prostředí pro tvorbu aplikací ve Windows
• pro síťové poskytuje zapouzdřený socket jako CSocket
• .NET– definovány třídy na vyšší úrovni (TCPClient,
WebClient)
![Page 41: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/41.jpg)
Code Gear C++ Builder
• TCP spojení– TBaseSocket
– TIpSocket– TServerWinSocket
– TClientWinSocket– aj.
![Page 42: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/42.jpg)
Microsoft .NET
![Page 43: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/43.jpg)
Prostředí .NET
• generace systému vývoje aplikací pro operační systémy Windows založeném na řízeném běhovém prostředí
• založeno na OOP – je realizováno pomocí velkého počtu
speciálních tříd
• podporuje více programovacích jazyků– C++, C#, J++, Visual Basic
![Page 44: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/44.jpg)
TCP/UDP komunikace
Třídy• IPEndPoint
– práce s IP adresou a port
• TcpClient, TcpListener– spojovaná služba
• UdpClient– nespojovaná služba
![Page 45: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/45.jpg)
IPEndPoint
• nese informaci o adrese a portu• atributy
– Address, AdressFamily, Port
• zajímavé metody– ToString
• převede adresu na řetězec
– Create• vytvoří objekt podle socketu
![Page 46: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/46.jpg)
TCPClient
• zapouzdřuje kompletní TCP komunikaci pro stranu klienta
• zajímavé atributy– ReceiveBufferSize, ReceiveTimeout,
SendBufferSize
• zajímavé metody– Connect(IPEndpoint endpoint)
• spojí se se serverem na adrese dané parametrem endpoint
![Page 47: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/47.jpg)
– NetworkStream GetStream()• vrátí objekt typu Stream, pomocí jehož metod
zasíláme/přijímáme data; zasílání dat se neprovádípřímo pomocí metod této třídy
– Close()• uzavření spojení
![Page 48: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/48.jpg)
TCPListener
• zapouzdřuje kompletní TCP komunikaci pro stranu serveru
• zajímavé atributy– LocalEndpoint
• informace o „mé“ adrese a portu
• zajímavé metody– Start()
• začíná poslouchat na portu, ekvivalentní funkci listen()
![Page 49: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/49.jpg)
– Socket AcceptSocket(),– TcpClient AcceptTcpClient()
• vrací nový socket nebo objekt typu klient, pomocíkterého se zajišťuje další komunikace
– NetworkStream GetStream()– bool Pending()
• dotaz, zda není ve frontě nevyřízený požadavek na spojení
![Page 50: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/50.jpg)
Ukázka v C++//vytvorime instanci posluchace pro urcity//TCP portTCPListener *listener =
new TCPListener(IPAddress.Loopback, 2000);TcpClient *client = NULL;
//zacneme naslouchani na urcenem portulistener->Start();//pockame na pripojeni nejakeho klientaclient = listener->AcceptTcpClient();
![Page 51: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/51.jpg)
// po pripojeni si vyzvedneme proud a
nacteme z nej dataNetworkStream *clientStream =
client->GetStream();StreamReader *reader =
new StreamReader(clientStream);String *content = reader->ReadToEnd();
}
![Page 52: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/52.jpg)
UDPClient
• zapouzdřuje kompletní UDP komunikaci; využívají jej obě strany
• zajímavé metody– int Send(array <unsigned char >^
data, int velikost)• zašle druhému počítači UDP paket
– array <unsigned char >^ Receive ( IPEndPoint ^% remoteEP )
• čeká na příchod a přijme UDP paket• data vrátí v poli bytů• vedlejší efekt je adresa, odkud paket přišel
![Page 53: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/53.jpg)
– void Connect (IPEndPoind ^ remoteEP )
• do vlastních datových struktur uloží adresu a port cíle (spojení se ale nerealizuje, je to UDP!)
![Page 54: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/54.jpg)
Přístup k www
Třída• WebClient
– implementuje kompletní www klient s možností stahování dat, souborů
– umožňuje• download a upload ve formě souborů z/na server• download a upload dat (tj. do pole)• přistupovat k datům na serveru přímo jako k
souboru
![Page 55: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/55.jpg)
WebClient
• zajímavé atributy– BaseAddress
• URI adresa serveru
• zajímavé metody– DownloadData, DownloadFile– UploadData,UploadFile
– OpenRead, OpenWrite• otevře stream ke vzdálenému souboru
![Page 56: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/56.jpg)
Ukázka v C++
WebClient ^client = gcnew WebClient();Console::Write("Zadejte URI (napr. ) : ");//nacteme URIString ^uri = Console::ReadLine();Console::Write("Zadejte nazev stazenehosouboru (napr. C:/new.txt) :");//nacteme kam se ma soubor ulozitString ^fileName = Console::ReadLine();
![Page 57: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/57.jpg)
try{
//stahneme souborclient->DownloadFile(uri, fileName);Console::WriteLine("Soubor byl stazen.");
}catch(WebException ex){
Console::WriteLine("Pri stahovani souboru
doslo k vyjimce ");
}
![Page 58: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/58.jpg)
Poznámky
• pro třídy z .NET má Microsoft speciálníoznačení reference (^ místo &)
• třídy se dynamicky alokují pomocí gcnew– na hromadě se správou paměti pomocí CLR s
garbage collectorem
![Page 59: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/59.jpg)
Další třídy pro práci v síti
• Uri– práce s řetězcem URI (porovnání, parsing)
• IPAddress• Dns
– GetHostEntry, Resolve
• WebRequest, WebResponse– podle URI umí posílat/přijímat protokoly
HTTP, HTTPS, FILE, FTP
![Page 60: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/60.jpg)
Podpora v jiných jazycích
• podporu IP sítí mají i jiné jazyky, např. Python– sockety
– HTTP, FTP, SMTP
![Page 61: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší](https://reader034.fdocuments.net/reader034/viewer/2022042317/5f06c05a7e708231d4198d9b/html5/thumbnails/61.jpg)
Úkol
Napište hru hádání čísel jako síťovou hru. Klient zašle serveru požadavek na počátek hry. Server vygeneruje náhodné číslo. Klient zasílá hádané číslo zadávané uživatelem, server odpovídá, zda je číslo větší, menšínebo rovno hádanému. Navrhněte vlastníkomunikační protokol. Umožněte předčasněukončit hru ze strany klienta.