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

Podobné dokumenty
Rozhraní Sockets Java a C (BSD)

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

Rozhraní Sockets Java a C (BSD)

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

Úvod do po íta ových sítí KIV/UPS. Ing. Petr V elák 16. prosince 2008

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

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

Téma 10 SíťovéIP protokoly a API

Téma 10 SíťovéIP protokoly a API

C++ a vnější svět. David Bednárek Jakub Yaghob Filip Zavoral

Sít ová komunikace v C++

Téma 11. ICMP, IPv6 Transportní vrstva

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Operační systémy a databáze. Téma 13. Počítačové sítě

Studijní osnova pro předmět: Programování v operačních systémech. Ing. Petr Olivka, Ph.D.

PLATFORMÁCH FAKULTA INFORMAČNÍCH TECHNOLOGIÍ MARTIN VACH BRNO UNIVERSITY OF TECHNOLOGY

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

Paralelizace datových přenosů

Implementace aplikační vrstvy pro jednočipové mikrokontroléry

NPRG051 Pokročilé programování v C /17 Úkol 2

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

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

A7B38UOS Sítě LAN Ethernet Síťové nástroje

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

Analýza protokolů rodiny TCP/IP, NAT

Osnova přednášky. Informační a řídicí systémy I. Úvod do počítačových sítí. Doporučená literatura. Motivace

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Metody připojování periferií

Řídicí modul pro systém na monitorování polohy mobilních objektů

Linux Teorie operačních systémů a realita

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

Rodina protokolů TCP/IP verze 3

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

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

Fakulta elektrotechnická

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

Arduino Ethernet Shield W5100 R3

X36PKO Úvod Protokolová rodina TCP/IP

IUJCE 07/08 Přednáška č. 1

Open Source Programování

Jak naprogramovat internetovou komunikaci?

Site - Zapich. Varianta 1

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

SSL Secure Sockets Layer

Fakulta elektrotechnická

České vysoké učení technické v Praze Fakulta jaderná a fyzikálně inženýrská BAKALÁŘSKÁ PRÁCE Radek Vláčil

Práce s pamětí. Tématicky zaměřený vývoj aplikací v jazyce C skupina Systémové programování Linux. Martin Husák, Petr Velan, Martin Drašar

Internet Information Services (IIS) 6.0

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

Administrace OS Windows

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

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

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

ové služby na IPv6-only

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

Streamové a socketové operace

Diplomová práce. Analýza síťového provozu

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

libpcap Tématicky zaměřený vývoj aplikací v jazyce C skupina Systémové programování Linux Martin Drašar, Martin Husák, Petr Velan

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

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.

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

11. Implementace ovladače ve Windows

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

Management procesu II Mgr. Josef Horálek

termín: utorok :00 (poledne) Cíle: Zadání:

Load Balancer. Softwarový projekt, MFF UK Praha. Programátorská dokumentace

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

Metody připojování periferií

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

Obsah PODĚKOVÁNÍ...11

Zajištění kvality služby (QoS) v operačním systému Windows

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.

Úvod do analýzy. Ústav informatiky, FPF SU Opava Poslední aktualizace: 8. prosince 2013

Téma bakalářských a diplomových prací 2014/2015 řešených při

Procesy a vlákna (Processes and Threads)

Počítačové sítě Aplikační vrstva Domain Name System (DNS)

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

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

Webový server lapache

TFTP Trivial File Transfer Protocol

Přístup k transportní vrstvě z vrstvy aplikační rozhraní služeb služby pro systémové aplikace, služby pro uživatelské aplikace DNS

Vláknové programování část I

íta ové sít TCP/IP Protocol Family de facto Request for Comments

ové služby a IPv6

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

Technologie počítačových sítí AFT NAT64/DNS64. Bc. Lumír Balhar (BAL344), Bc. Petr Kadlec (KAD0019)

Analýza síťového provozu. Ing. Dominik Breitenbacher Mgr. Radim Janča

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

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

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

POČÍTAČE A PROGRAMOVÁNÍ

Připravil: David Procházka. Vertex Buffer Objects

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

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Y36PSI Protokolová rodina TCP/IP

Transkript:

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

Co víte o souborech a operacích s nimi Deskriptor (fd) popisovač, číslo Zápis (write, fwrite, ) - deskriptor, data Čtení (read, fread, ) - deskriptor, data

Sockety Socket = koncový bod dvousměrné komunikace, koncept využívaný v řadě OS. V našem kontextu bereme jako koncový bod IPenabled zařízení Síťový socket je reprezentován adresou soketu = kombinace IP(4/6) adresy a portu Např. 147.32.83.180:12345 Socket je operačním systémem mapován na konkrétní proces či thread

Ukázka socketů z Linuxu Příkaz lsof

Typy soketů Datagram socket Connectionless, pro UDP Stream socket Connection-oriented, TCP Raw socket Transportní vrstva se vynechá Typické aplikace ICMP, IGMP, OSPF,...

Implementace socketů Berkeley sockets, 1983 Operační systém 4.2BSD C Z BSD sockets vycházejí další implementace Winsock windows atd

TCP Socket flow diagram

Klient: socket() Volání socket() - vytvoří socket datovou strukturu. Vrací deskriptor socketu (číslo) sockfd = socket(int socket_family, int socket_type, int protocol); socket_family = PF_UNIX PF_LOCAL PF_INET PF_INET6 PF_IPX PF_NETLINK PF_X25 PF_AX25 PF_ATMPVC PF_APPLETALK PF_PACKET socket_type = SOCK_STREAM SOCK_DGRAM SOCK_SEQPACKET SOCK_RAW WOCK_RDM SOCK_PACKET protocol = u IP 0, jinak specifikace protokolu umíme vytvořit socket...

Klient: connect() Navázání spojení na daném socketu. int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); struct sockaddr { }; unsigned short sa_family; // address family, AF_xxx char sa_data[14]; // 14 bytes of protocol address Ipv4: struct sockaddr_in { short sin_family; // e.g. AF_INET, AF_INET6 unsigned short sin_port; // e.g. htons(3490) struct in_addr sin_addr; // see struct in_addr, below char sin_zero[8]; // zero this if you want to }; Ipv6: sockaddr_in_6 struct sockaddr_in6 { u_int16_t sin6_family; // address family, AF_INET6 u_int16_t sin6_port; // port number, Network Byte Order u_int32_t sin6_flowinfo; // IPv6 flow information struct in6_addr sin6_addr; // IPv6 address u_int32_t sin6_scope_id; // Scope ID }; umíme se připojit k protistraně...

Klient: Příklad - připojení if ((sfd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR) { perror ("socket"); return (ERROR); } /* bind not required - port number is dynamic */ /* build server socket address */ sockaddrsize = sizeof (struct sockaddr_in); bzero ((char *) &serveraddr, sockaddrsize); serveraddr.sin_family = AF_INET; serveraddr.sin_len = (u_char) sockaddrsize; serveraddr.sin_port = htons (SERVER_PORT_NUM); if ((serveraddr.sin_addr.s_addr = gethostbyname (servername)) == ERROR) { perror ("unknown server name"); close (sfd); return (ERROR); } /* connect to server */ if (connect (sfd, (struct sockaddr *) &serveraddr, sockaddrsize) == ERROR) { perror ("connect"); close (sfd); return (ERROR); }

Klient: send(), recv() Čtení/zápis ze soketu TCP: ssize_t send(int s, const void *buf, size_t len, int flags); ssize_t recv(int s, void *buf, size_t len, int flags); UDP: sendto recvfrom umíme poslat/přijmout data...

Příklad - send/recv /* Send the word to the server */ echolen = strlen(argv[2]); if (send(sock, argv[2], echolen, 0)!= echolen) { Die("Mismatch in number of sent bytes"); } /* Receive the word back from the server */ fprintf(stdout, "Received: "); while (received < echolen) { int bytes = 0; if ((bytes = recv(sock, buffer, BUFFSIZE-1, 0)) < 1) { Die("Failed to receive bytes from server"); } received += bytes; fprintf(stdout, buffer); }

close() int close(int fd); zavře soket a uklidí po něm Nezapomínat, zejména u multithreaded serveru!!! jsme povinni zavřít soket...

Opakování: socket flow diagram

Server: bind() Volání bind() namapuje adresu k soketu Budete používat primárně na spojení IP adresy (pozor NE hostname) se soketem int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen); umíme namapovat adresu k soketu...

Server: listen() Naslouchej na soketu, zda je nové spojení int listen(int sockfd, int backlog); sockfd už znáte backlog = délka pro frontu příchozích spojení umíme naslouchat...

Příklad č. 1 spuštění serveru listenfd=socket(af_inet,sock_stream,0); // bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr=htonl(inaddr_any); servaddr.sin_port=htons(32000); bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); listen(listenfd,1024);

Vložka č. 1 Network byte order Big endian vs. Little endian Network byte order BIG-endian (definuje IP) Host byte order host = váš hostitelský OS Je zavedena sada funkcí pro portovatelnost programů

Funkce pro převod NBO na HBO The htonl() function converts the unsigned integer hostlong from host byte order to network byte order. The htons() function converts the unsigned short integer hostshort from host byte order to network byte order. The ntohl() function converts the unsigned integer netlong from network byte order to host byte order. The ntohs() function converts the unsigned short integer netshort from network byte order to host byte order.

accept() přijmi spojení na daném soketu int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); Vrátí NOVÝ soket! Pokračování příkladu: clilen=sizeof(cliaddr); connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&clilen); umíme přijmout spojení...

Opakování: socket flow diagram

TCP three-way handshake

Oboustranné ukončení spojení Zde ještě je možnost zapisovat data!

Souběžné zpracování požadavků connect(s) connect(s) c=accept(s) send(c) send(c) recv(c) recv(c) a t d close(c) close(c) Vlákno č. 1 Vlákno č. 2 3 4 n Pozor vytvoření vlákna v OS trvá Pro aplikace s velkým množstvím současných spojení různé metody alokace threadů, např. thread pool

TCP souběžné zpracování bez vláken connect(s) send(s) c[i]=accept(s) connect(s) send(s) select({s,c}) if s accept(s) for c[i] recv(c[i]) Jediné vlákno (resp. proces)

select()/poll() Volání select() sleduje I/O operace na vícero deskriptorech Změna na deskriptoru vyvolá návrat z funkce Poll() - obdobná funkčnost Rozdíl je v předávaných parametrech, v různých implementacích v různých systémech

Vaše možnosti fork() select()/poll() Thready doporučeno nepotřebujete žádnou synchronizaci, jde pouze o volbu knihovny a volání správných metod Např. Knihovna pthreads