Unicast - rodzaj transmisji, w której dokładnie jeden punkt(komputer) wysyła pakiety do dokładnie jednego punktu(odbiorcy). Istnieje tylko jeden nadawca i jeden odbiorca. Wszystkie karty Ethernet posiadają zaimplementowany ten rodzaj transmisji.

Multicast - to sposób dystrybucji informacji, dla którego liczba odbiorców może być dowolna. Odbiorcy są widziani dla nadawcy, jako pojedynczy grupowy odbiorca dostępny pod jednym adresem dla danej grupy multicastowej. W transmisji multicastowej po każdym łączu sieciowym przesyłana informacja jest jednokrotnie, podczas gdy w unicastowej dystrybucji informacji do n odbiorców po niektórych łączach biorących udział w transmisji komunikat może być w najgorszym razie przesyłany nawet n razy.

Broadcast - rozgłoszeni owy tryb transmisji danych polegający na wysyłaniu przez jeden port pakietów, które powinny być odebrane przez wszystkie pozostałe porty przyłączone do danej sieci.

UDP (User Datagram Protocol) - jeden z podstawowych protokołów internetowych służący do komunikacji, datagramowej. Jest to protokół bezpołączeniowy nie ma narzutu na nawiązywanie połączenia i śledzenia sesji. Nie ma też mechanizmów kontroli przepływu i retransmisji(w przypadku zerwania połączenia).

Korzyści:

UDP często używany jest w takich zastosowaniach jak: wideokonferencje, strumienie dźwięku w internecie i gry sieciowe(gdzie dane muszą być przesyłane możliwie szybko)

Datagram - Podstawowa jednostka przesyłanych danych nazwana jest datagramem. Datagram podzielony jest na nagłówek i dane. Nagłówek datagramu zawiera adres nadawcy i odbiorcy oraz pole typu, które identyfikuje zawartość datagramu.

TCP - strumieniowy protokół informacji między dwoma komputerami. Jest protokołem działającym w trybie klient - serwer. Serwer oczekuje na nawiązanie połączenia na określonym porcie. Klient inicjuje połączenie do serwera. W przeciwieństwie do UDP, TCP gwarantuje wyższym warstwą komunikacyjnym dostarczenie wszystkich pakietów w całości, z zachowaniem kolejności i bez duplikatów. Zapewnia to wiarygodne połączenie kosztem większego narzutu w postaci nagłówka i większej liczby przesyłanych pakietów.

Winsock

By móc wykorzystać funkcje winsock należy dołączyć do programu jeden z nagłówków <winsock2.h> lub <winsock.h> oraz dołączyć biblioteki „ws2_32” lub „wsock32”.

Opis struktur:

- hostent przechowuje informacje na temat hosta(nazwa, adres IP itp)

Informacje te można uzyskać przy pomocy funkcji gethostbyname() i gethostbyaddr().

- sockaddr_in przechowuje informacje o sokecie np. na jakim porcie nasłuchuje lub nadaje adres ip do jakiego jest przypisany itp

Struktura programu realizująca komunikację datagramową (UDP)

Nadawca:

1 Inicjalizacja WinSock'a WSAStartup()

2Utworzenie gniazda SOCKET nadawca = socket()

3 Pobranie adresu IP, numeru portu odbiorcy i ustawienie tymi danymi pól struktury `sockaddr_in' Przykład:

struct sockaddr_in addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(4000);

addr.sin_addr.s_addr = inet_addr("127.0.0.1");

4 wysłanie wiadomości do odbiorcy Przykład:

char buffor[256] = "wiadomosc ";

int wyslano = sendto(klient, buffor, strlen(buffor), 0, (struct sockaddr *)&addr, sizeof(struct sockaddr));

5 zamknięcie gniazda - closesocket(nadawca)

6 zwolnienie WinSock'a WSACleanup();

Odbiorca:

1 Inicjalizacja WinSock'a WSAStartup()

2Utworzenie gniazda SOCKET odbiorca= socket()

3 Pobranie adresu IP, numeru portu na którym ma nasłuchiwać Przykład:

struct sockaddr_in myAddr;

myAddr.sin_family = AF_INET;

myAddr.sin_port = htons(4000);

myAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

4 Przypisanie portu i adresu do socketu na którym ma nasłuchiwać -bind() Przykład

bind(odbiorca, (struct sockaddr *)&myAddr, sizeof(struct sockaddr)

5 odbiór danych recvfrom()

6 zamknięcie gniazda - closesocket(odbiorca)

7 zwolnienie WinSock'a WSACleanup();

Struktura programu realizująca komunikację połączeniową (TCP)

Nadawca:

1 Inicjalizacja WinSock'a WSAStartup()

2Utworzenie gniazda SOCKET nadawca= socket()

3 Pobranie adresu IP, numeru portu

4 Ustawienie danymi z pkt 3 struktury `sockaddr_in' struct sockaddr_in myAddr

5 Nawiązanie połączenia z odbiorcą connect(nadawca, (struct sockaddr *)&myAddr, sizeof(myAddr))

6 Wysłanie wiadomości send()

7 zamknięcie gniazda - closesocket(odbiorca)

8 zwolnienie WinSock'a WSACleanup();

Odbiorca:

1 Inicjalizacja WinSock'a WSAStartup()

2Utworzenie gniazda SOCKET odbiorca= socket()

3 Pobranie adresu IP, numeru portu na którym ma nasłuchiwać

4 Ustawienie danymi z pkt 3 struktury `sockaddr_in'

5 Przypisanie portu i adresu do socketu na którym ma nasłuchiwać -bind()

6 Nasłuchiwanie nadchodzącego połączenia listen(odbiorca, 1);

7 Akceptacja nawiązanego połączenia SOCKET klient = accept()

8 Odbiór danych recv() Przykład

char buffor[256];

recv(klient, buffor, 255, 0);

9 zamknięcie gniazda - closesocket(odbiorca)

10 zwolnienie WinSock'a WSACleanup();

NETBIOS

Struktura NCB:

typedef struct _NCB {

UCHAR ncb_command;

UCHAR ncb_retcode;

UCHAR ncb_lsn;

UCHAR ncb_num;

PUCHAR ncb_buffer;

WORD ncb_length;

UCHAR ncb_callname[NCBNAMSZ];

UCHAR ncb_name[NCBNAMSZ];

UCHAR ncb_rto;

UCHAR ncb_sto;

void (CALLBACK *ncb_post)(struct _NCB*);

UCHAR ncb_lana_num;

UCHAR ncb_cmd_cplt;

UCHAR ncb_reserve[10];

HANDLE ncb_event;

}

Opis funkcji:

Wykonanie określonej funkcji NetBios polega na odpowiednim ustawieniu określonych pól struktury _NCB.

Funkcja

Zmiany w NCB

Opis działania

RESET

ncb_command = NCBADDNAME

ncb_lana_num = (nr karty sieciowej)

Resetowanie węzła net bios

Wykonywane przed rozpoczęciem pracy z netbios

ADD NAME

ncb_command = NCBADDNAME

ncb_name = (nazwa wezla)

ncb_lana_num = (nr karty sieciowej)

Dodanie nazwy indywidualnej. Po zarejestrowaniu nazwy net bios nadaje jej unikalny id

ADD GROUP NAME

ncb_command = NCBADDGRNAME

ncb_name = (nazwa grupy)

ncb_lana_num = (nr karty sieciowej)

Dodanie nazwy grupowej. Po zarejestrowaniu nazwy net bios nadaje jej unikalny id

DELETE NAME

ncb_command = NCBDELNAME

ncb_name = (nazwa do usunięcia)

ncb_lana_num = (nr karty sieciowej)

Usunięcie określonej nazwy

SENDBROADCASTDATAGRAM

ncb_command = NCBDGSENDBC

ncb_lana_num = (nr karty sieciowej)

ncb_buffer = (wiadomość)

ncb_length = (wielkość wiadomośći)

Wysłanie wiadomości za pomocą datagramu broadcastowego

RECEIVEBROADCASTDATAGRAM

ncb_command = NCBDGRECVBC

ncb_lana_num = (nr karty sieciowej)

ncb_buffer = (bufor odbioru wiadomości)

ncb_length = (wielkość bufora)

Odbiór wiadomości wysłanej za pomocą datagramu broatcastowego

SEND DATAGRAM

ncb_command = NCBDGSEND

ncb_lana_num = (nr karty sieciowej)

ncb_buffer = (bufor wysyłania wiadomości)

ncb_length = (wielkość bufora)

ncb_callname = (nazwa unikatowa na ktorą wysyłamy)

Wysłanie datagramu do konkretnej nazwy

RECV DATAGRAM

ncb_command = NCBDGRECV

ncb_lana_num = (nr karty sieciowej)

ncb_buffer = (bufor odbioru wiadomości)

ncb_length = (wielkość bufora)

Odebranie datagramu specyficznego

LISTEN

ncb_command = NCBLISTEN

ncb_lana_num = (nr karty sieciowej)

ncb_name=(nazwa lokalna na której nasłuchujemy)

ncb_ callname=(nazwa z której połączenia się spodziewamy)

Nasłuchuje na połączenie na nazwie lokalnej ncb_name, ncb_callname może być równe „*” wtedy połączenie zostanie przyjęte od każdej nazwy

CALL

ncb_command = NCBCALL

ncb_lana_num = (nr karty sieciowej)

ncb_name=(nazwa lokalna)

ncb_ callname=(nazwa do której się łączymy)

Podłącza się do nazwy podanej jako parametr ncb_callname.

SEND

ncb_command = NCBDGSEND

ncb_lana_num = (nr karty sieciowej)

ncb_buffer = (bufor wysyłania wiadomości)

ncb_length = (wielkość bufora)

ncb_lsn = (numer połączenia)

Wysłanie wiadomości poprzez połączenie identyfikowane przez ncb_lsn. (Ustawione przez CALL albo LISTEN).

RECV

ncb_command = NCBRECV

ncb_lana_num = (nr karty sieciowej)

ncb_buffer = (bufor odbioru wiadomości)

ncb_length = (wielkość bufora)

ncb_lsn = (numer połączenia)

Odebranie wiadomości poprzez połączenie identyfikowane przez ncb_lsn.(Ustawione przez CALL albo LISTEN).

Sekwencja czynności podczas transmisji bezpołączeniowej

Klient

Serwer

  1. RESET odbiornika

  2. ADD NAME - dodanie nazwy unikatowej

  3. NCB RECV BROADCAST DATAGRAM/ NCB RECV DATAGRAM - pobranie datagramu ogólno dostępnego (broadcast) albo specyficznego (unicast)

  4. DELETE NAME - usunięcie nazwy unikatowej

  1. RESET odbiornika

  2. ADD NAME - dodanie nazwy unikatowej

  3. NCB SEND BROADCAST DATAGRAM/NCB SEND DATAGRAM - wysłanie datagramu ogólnego albo specyficznego

  4. DELETE NAME - usunięcie nazwy unikatowej

Sekwencja czynności podczas transmisji połączeniowej (sesyjnej)

Klient

Serwer

  1. RESET odbiornika

  2. ADD NAME - dodanie nazwy unikatowej

  3. NCB CALL - nawiązanie połączenia z inną nazwą unikatową

  4. NCB RECV - pobranie wiadomości od podłączonego programu

  5. NCB HANGUP - zakończenie sesji

  6. DELETE NAME - usunięcie nazwy unikatowej

  1. RESET odbiornika

  2. ADD NAME - dodanie nazwy unikatowej

  3. NCB LISTEN - nasłuchiwanie na połączenie z konkretnej nazwy lub z dowolnej (ncb_callname = nazwa albo *)

  4. NCB SEND - wysłanie wiadomości do podłączonego programu

  5. NCB HANGUP - zakończenie sesji

  6. DELETE NAME - usunięcie nazwy unikatowej