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

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

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

Iteracyjny serwer TCP i aplikacja UDP

Klient-Serwer Komunikacja przy pomocy gniazd

Programowanie sieciowe

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

Standardy programowania protokołów komunikacyjnych Laboratorium nr 5 komunikacja multicastowa IPv6

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

socket(int domain, int type, int protocol)

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

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

Programowanie współbieżne i rozproszone

Architektura typu klient serwer: uproszczony klient POP3

Winsock. Sieci Komputerowe II Wyk ład 3

Aplikacja Sieciowa wątki po stronie klienta

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Programowanie Sieciowe 1

Podstawowe typy serwerów

Tworzenie aplikacji rozproszonej w Sun RPC

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

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

Gniazda BSD implementacja w C#

Projektowanie oprogramowania systemów KOMUNIKACJA SIECIOWA I SYSTEMY RPC

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Zwielokrotnianie wejścia wyjścia

Narzędzia diagnostyczne protokołów TCP/IP

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

Programowanie przy użyciu gniazdek

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

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

Gniazda BSD. komunikacja bezpołączeniowa

Przykład. Podaj nazwę domenową hosta a odczytaj jego adres IP, lub odwrotnie:

Sieci komputerowe i bazy danych

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

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

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

TRX API opis funkcji interfejsu

Instytut Teleinformatyki

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

1 Moduł Konfigurowanie Modułu

Krótkie wprowadzenie do korzystania z OpenSSL

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

System operacyjny UNIX Internet. mgr Michał Popławski, WFAiIS

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

IPC: Kolejki komunikatów

Laboratorium 3.4.2: Zarządzanie serwerem WWW

Twisted. Silnik Twojego Internetu. Jan Urbański Ducksboard. PyWaw #25, Warszawa, 10 czerwca 2013

Kolejki FIFO (łącza nazwane)

Tomasz Greszata - Koszalin

Problemy techniczne SQL Server

Symulacja Packet Tracer - Komunikacja z użyciem protokołów TCP i UDP

Wybrane działy Informatyki Stosowanej

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

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Router programowy z firewallem oparty o iptables

Seria i7-n9500. Uwagi: 1.Urządzenia NVR są dostarczane bez dysków HDD 2.Należy używać dysków HDD zalecanych przez producenta.

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Routing. część 1: adresowanie. Sieci komputerowe. Wykład 2. Marcin Bieńkowski

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Jadro monolityczne vs. mikrojadro. Mikrojadro. Olga Kowalczuk. 9 grudnia 2008

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

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

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

Ping. ipconfig. getmac

Sockety TCP/IP - podstawy. Sieci Komputerowe II Wyk ład 2

Wybrane działy Informatyki Stosowanej

Dokumentacja interfejsu MySQL. Platforma BSMS.PL Instrukcja podłączenia po przez mysql

Relacyjne, a obiektowe bazy danych. Bazy rozproszone

Instytut Teleinformatyki

Systemy rozproszone. Krzysztof Banaś Obliczenia równoległe 1

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Dokumentacja programu sieciowego - komunikacja z portem szeregowym

MODEL WARSTWOWY PROTOKOŁY TCP/IP

SIECI KOMPUTEROWE I TECHNOLOGIE INTERNETOWE

Instrukcja obsługi modułu MPlatform.

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

T: Konfiguracja interfejsu sieciowego. Odwzorowanie nazwy na adres.

Opis protokołu RPC. Grzegorz Maj nr indeksu:

TM PROGRAM TERMINALA RS232 DLA MULTIPLEKSERA 8XRS232 / ETHERNET 10BASE-T

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

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

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane

ArtPlayer oprogramowanie do odtwarzania plików video sterowane Artnet/DMX V1.0.1

Wykład 3 / Wykład 4. Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak

Sieci komputerowe i bazy danych

iptables -F -t nat iptables -X -t nat iptables -F -t filter iptables -X -t filter echo "1" > /proc/sys/net/ipv4/ip_forward

Futex (Fast Userspace Mutex) Łukasz Białek

Zarządzanie bezpieczeństwem w sieciach

PROTOKOŁY WARSTWY TRANSPORTOWEJ

Wykaz zmian w programie SysLoger

Bezpieczeństwo w M875

Gniazda. S. Samolej: Gniazda 1

Programowanie aplikacji w architekturze Klient-Serwer - UDP

Transkrypt:

BSD sockets c.d.

TCP - receive buffer (queue), send buffer (queue) Z każdym gniazdem sieciowym są skojarzone: Bufor do odbierania danych (ang. receive buffer) Przychodzące dane są umieszczane w buforze Dane są przekazywane z buforu do aplikacji (zwrócenie kontroli z read/recv) Bufor do zapisu (ang. send buffer) Wysyłane dane są zapisywane do buforu Dane z buforu są wysyłane przez sieć Rozmiary buforów zależą od ustawień systemu operacyjnego Systemy wbudowane Możliwe jest zapełnienie buforów Częściowy odczyt - gdy w buforze do odczytu jest mniej danych niż oczekiwano Częściowy zapis - gdy w buforze do zapisu brakuje miejsca

TCP - fragmentacja WYSŁANO ODEBRANO

TCP - sklejanie WYSŁANO ODEBRANO M 1 \n M 2 \n M 1 \n M 2 \n

I/O multiplexing: select/poll/epoll Oczekiwanie na zdarzenia powiązane z deskryptorami plików select przyjmuje zbiór deskryptorów, powoduje modyfikację przekazanego zbioru (wynik), raczej przestarzałe rozwiązanie, ale wspierane prawie wszędzie maks. około 1000 deskryptorów poll przyjmuje zbiór deskryptorów i interesujących zdarzeń, nie modyfikuje zbioru bez twardego limitu na liczbę deskryptorów

I/O multiplexing: select/poll/epoll epoll wyłącznie dla systemu Linux, inny mechanizm: komunikacja z jądrem systemu, zwraca wyłącznie aktywne deskryptory (przy select/poll trzeba iterować po wszystkich deskryptorach i sprawdzać czy są aktywne), bardziej skomplikowany w użyciu

select fd_set fd_in, fd_out; struct timeval tv; FD_ZERO( &fd_in ); FD_ZERO( &fd_out ); FD_SET( sock1, &fd_in ); FD_SET( sock2, &fd_out ); int largest_sock = sock1 > sock2? sock1 : sock2; tv.tv_sec = 10; tv.tv_usec = 0; Przykład: http://www.cs.put.poznan.pl/mkal ewski/documents/select.php int ret = select( largest_sock + 1, &fd_in, &fd_out, NULL, &tv ); if ( ret == -1 ) else if ( ret == 0 ) else { if ( FD_ISSET( sock1, &fd_in ) ) // input event on sock1 } if ( FD_ISSET( sock2, &fd_out ) ) // output event on sock2

poll struct pollfd fds[2]; fds[0].fd = sock1; fds[0].events = POLLIN; fds[1].fd = sock2; fds[1].events = POLLOUT; Przykład: https://beej.us/guide/bgnet/html/m ulti/pollman.html int ret = poll( fds, 2, 10000 ); if ( ret == -1 ) else if ( ret == 0 ) else { if ( pfd[0].revents & POLLIN ) pfd[0].revents = 0; // input event on sock1 if ( pfd[1].revents & POLLOUT ) pfd[1].revents = 0; // output event on sock2 }

getaddrinfo() - użycie nazwy domenowej int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node - nazwa domenowa; np. wp.pl service - numer portu lub nazwa usługi; np. http, 80 hints - wskazówki, filtry wyników; np. AF_INET (tylko IPv4), SOCK_STREAM (TCP) res - wyniki w postaci linked list Zwraca: 0 (ok) lub kod błędu Przykład: http://www.cs.put.poznan.pl/mboron/templates/nametoip.c

netstat Pokazuje m.in. aktywne połączenia (czy działa instancja serwera) netstat --tcp --listening -c

telnet zdalny dostęp do systemu telnet [nazwa serwera] [numer portu] może być użyty do debugowania aplikacji sieciowych przesyłających dane w formie tekstowej np. połącz się z serwerem chatu z ostatnich zajęć przez telnet Ciekawostka: wykonaj telnet towel.blinkenlights.nl 23

nc (netcat) arbitralne połączenia i nasłuchiwania TCP i UDP nc [nazwa serwera] [numer portu] połączenie nc -l [numer portu] nasłuchiwanie może być użyty do debugowania aplikacji sieciowych

Zadanie 1 Stwórz serwer TCP, który w pętli akceptuje nowe połączenia i je ignoruje (tzn. nie odbiera ani nie wysyła danych, nie zamyka połączeń). Stwórz klienta TCP, który w pętli: wysyła dane, wypisuje kolejny numer, wypisuje ilość wysłanych danych. Obserwuj komunikaty wypisywane przez klienta. Obserwuj stan zapełnienia buforów przez netstat -tn (Recv-Q, Send-Q).

Zadanie 2 Napisz serwer TCP który po odebraniu połączenia, do jego zamknięcia, wykonuje w pętli: odbiera do 10 bajtów, wypisuje ile bajtów odebrał i co odebrał. Napisz klienta TCP który wysyła cały alfabet po jednej literze. Podłącz się (wielokrotnie) do serwera.

Zadanie 3 Napisz serwer TCP który po odebraniu połączenia, do jego zamknięcia, wykonuje w pętli: odbiera do 10 bajtów, wypisuje ile bajtów odebrał i co odebrał. Napisz klienta TCP który wysyła wielokrotnie po kilkanaście liter. Podłącz się (wielokrotnie) do serwera.

Literatura https://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-difference-for-s ystem-architects/ Kerrisk rozdział 63 select/poll/epoll Kerrisk rozdział 61 partial r/w, netstat, tcpdump, UDP vs. TCP, https://beej.us/guide/bgnet/html/single/bgnet.html