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:
większa szybkość transmisji danych(szybsza niż w TCP)
brak dodatkowych zadań, którymi musi się zajmować host posługujący się tym protokołem
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 |
|
|
Sekwencja czynności podczas transmisji połączeniowej (sesyjnej) |
|
Klient |
Serwer |
|
|