List

Komunikacja bezpołączeniowa

UDP (z ang. User Datagram Protocol – protokół  datagramów użytkownika) to bardzo lekki protokół umożliwiający przesyłanie komunikatów między klientem i serwerem, o następujących cecach:

  • brak utrzymania informacji o stanie połączenia,
  • brak potwierdzenia dotarcia komunikatu (w efekcie brak retransmisji w przypadku utraty komunikatu)
  • mały narzut komunikacyjny (wielkość nagłówka to 64 bity, podczas gdy w TCP to 160 bitów),
  • brak kontroli nad kolejnością docierania komunikatów (w szczególnych przypadkach jeden datagram może nawet zostać dostarczony dwa razy),
  • minimalne informacje przekazywane, 4 pola po 16 bitów:
    • port źródłowy
    • port docelowy (oba porty określają strony komunikacji),
    • suma kontrolna
    • długość datagramu UDP.

Podobnie jak w przypadku TCP porty o wartości poniżej 1024 są zarezerwowane dla znanych usług i wymagają uprawnień administratora w celu komunikacji.

 

Wykorzystywane funkcje:

  • sockfd = socket(int socket_family, int socket_type, int protocol); (dla komunikacji UDP należy podać odpowiednio AF_INET, SOCK_DGRAM, 0)
  • ssize_t sendto(int sockfd, const void *buf, size_t len, int flagsconst struct sockaddr *dest_addr, socklen_t addrlen);
  • ssize_t recvfrom(int sockfd, void *buf, size_t len, int flagsstruct sockaddr *src_addr, socklen_t *addrlen);
  • ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
  • ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
  • struktura msghdr: 
  • struktura iovec: 

 

Funkcje sendto i recvfrom są prostsze i będziemy  je wykorzystywać na zajęciach.

UDP server:

UDP client:

 Zadania:

W oparciu o kod z Przykładu 2 zaimplementować następujące przypadki:

  • Przesyłanie bloków 10000-bajtowych za pomocą protokołu UDP z pomiarem czasu. Program powinien działać wg schematu pomiar czasu, socket, 100 razy sendto i recvfrom, close, pomiar czasu, podanie czasu podzielonego przez 100.
  • Przesyłanie bloków 10000-bajtowych za pomocą protokołu TCP w jednej sesji z pomiarem czasu. Program powinien działać wg schematu pomiar czasu, socket, connect, 100 razy send i recv, close, pomiar czasu, podanie czasu podzielonego przez 100.

Przeimplementować należy zarówno stronę klienta, jak i stronę serwera.
Program proszę uruchamiać na dwóch komputerach w laboratoriach wydziału aby uzyskane wyniki faktycznie uwzględniały przesyłanie danych przez sieć.

Uwagi:

  • przykłady klienta i serwera UDP oraz zadanie wzięte ze strony Tomasza Tyrakowskiego http://www.staff.amu.edu.pl/~ttomek/sik/cwiczenia2.html),
  • opisy struktur i dokumentacje protokołu wzięte z manuala (podręcznika systemowego linux).

  Posts

May 20th, 2017

Different kernel types

https://en.wikipedia.org/wiki/Kernel_%28operating_system%29#Kernel-wide_design_approaches https://en.wikipedia.org/wiki/Unikernel https://en.wikipedia.org/wiki/Exokernel https://en.wikipedia.org/wiki/Nemesis_%28operating_system%29 http://windowsitpro.com/windows-server/top-ten-what-you-need-know-about-microsoft-nano-server

April 21st, 2017

Microsoft Roadmap for AzureStack

Microsoft’s Hyper-V looked really promising and it happened to be really good general purpose virtualization. Not it’s time for on-premise/hybrid […]

April 21st, 2017

Books reading :)

Mind development requires regular reading 🙂 Here are some advices: http://www.gq.com/story/how-to-read-a-whole-damn-book-every-week?mbid=synd_digg For me reading in the morning would be the best […]

October 25th, 2016

Linux – powłoka bash – skrypty 2

Wykorzystanie cydzysłowie: ‘   oraz   ‘ – apostfory służą do łączenia zawartych w nim znaków jako jeden ciąg znaków. Jest to […]

June 9th, 2016

Session data in Redis (with PHP exapmle)

Session data in Redis What is session Session is What is cookie Cookie is something you eat 🙂   How […]

June 7th, 2016

DSIK, DASL – Brama domyślna

Linux jako ruter Naszym celem będzie skonfigurowanie systemu linux jako urządzenia przesyłającego pakiety. W tym celu będziemy potrzebowali: uruchomić infrastrukturę (w […]

May 25th, 2016

How to change a hostname

Just a few easy steps: Manually update: /etc/hostname /etc/hosts it may be important to update some other files – see https://wiki.debian.org/HowTo/ChangeHostname […]

May 10th, 2016

Gartner Hype Cycle through last 10 years :)

I recently read about self driven cars and jumped into Gartner Hype Cycle term.   Brief introduction to the subject: […]

May 6th, 2016

Bug bounty program

I’ve recently heard about the Bug bounty idea – a program for rewarding IT geeks (with just recognition or even […]

April 26th, 2016

Is IBM’s Power8 powerful enough? :)

Recently I heard about Power8 platform designed “for Magento”.  Obviuosly, somebody from marketing had a great idea to ad the general platform […]

April 26th, 2016

DSIK – Zajęcia 8 – Raw Sockets

Surowe gniazda Na wcześniejszych zajęciach poznaliśmy metodę wykorzystywania funkcji systemowych do tworzenia nagłówków IP oraz warstwy TCP i UDP. Dzięki wykorzystanym funkcjom system automatycznie […]

April 25th, 2016

2016.04.25 – Etap 4

MedicaLibaro Paweł Banach, Rafał Pingot, Piotr Beczyński. Moodies Rafał Maszkowski, Mateusz Kulesza, Dawid Krawczyk.

April 24th, 2016

DSIK – Zajęcia 8 – Projekt – podział na grupy, wybór tematów

Wybrane grupy projektowe i przypisane tematy. Lista: Rutka, Sosnowski – serwer HTTP Nojnam, Ciuk – klient IRC Soprych, Macutkiewicz – […]

April 18th, 2016

DSIK – Zajęcia 0 – Plan zajęć.

Plan przedmiotu Zajęcia 1-8: Część zgodna z dotychczasowym harmonogramem. Wprowadzenie teoretyczne do warstwy 2 i 3. Diagnostyka sieci – polecenia. Gniazda […]

April 18th, 2016

DSIK – Zajęcia 7 – Projekt określenie wymagań

Zasady zaliczenia: projekt tworzy grupa 2 osobowa projekt obejmuje: napisanie programu: zaimplementowanie znanego protokołu (może być REST API, może być protokół […]

April 11th, 2016

DSIK – Zajęcia 5 – UDP, aplikacje socket bezpołączeniowe

Komunikacja bezpołączeniowa UDP (z ang. User Datagram Protocol – protokół  datagramów użytkownika) to bardzo lekki protokół umożliwiający przesyłanie komunikatów między klientem […]

April 7th, 2016

DSIK – Zajęcia 2 – Stos TCP/IP – Warstwa 3, polecenia diagnostyczne.

April 7th, 2016

DSIK – Zajęcia 6 – Sockety Unix.

Opis problemu Komunikacja sieciowa jest bardzo elastycznym elementem komunikacji, jednakże niesie za sobą narzut obliczeniowy w postaci obsługi stosu TCP/IP po […]

April 4th, 2016

DSIK – Zajęcia 4 – Nieblokujące programowanie gniazd.

Opis problemu Załóżmy, że napisaliśmy program działający jako serwer pewengo protokołu (np. xmpp), który oczekuje na komunikaty od użytkownika, ale […]

April 4th, 2016

DSIK – Zajęcia 4 – Aplikacje wielowątkowe

Aplikacje przetwarzające wiele wątków Rozważmy sytuację, gdy aplikacja serwera jest dostępna do publicznego użytku i potrzebuje np. 30 sekund ciągłych obliczeń […]

March 14th, 2016

DSIK – Zajęcia 3 – Sieci komputerowe – programowanie gniazd, wstęp (TCP klient i serwer).

Programowanie gniazd. Funkcje: ssize_t send(int sockfd, const void *buf, size_t len, int flags); – możliwość wykorzystnia tylko gdy socket jest […]

March 14th, 2016

DSIK – Zajęcia 1 – Stos TCP/IP – Warstwa 2, polecenia diagnostyczne.

Stos TCP/IP TCP/IP to rodzina protokołów stanowiących podstawę do komunikacji między komputerami w sieciach komputerowych. Do rodziny tej zaliczmy protokoły zapewniające adresowanie i […]