sieci

  1. 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;

UCHAR ncb_lana_num;

} NCB;

Opis pól:

  1. ncb_command –pole zawierające kod lub mnemonik odpowiedniego polecenia

  2. ncb_retcode – pole zawierające kod zwracany przez NetBiosa

  3. ncb_lsn – pole zawierające identyfikator połączenia, nadawany przez NetBios po nawiązaniu połączenia

  4. ncb_num - pole zawierające identyfikator nazwy, nadawany przez NetBios po nadaniu nazwy (ADD NAME lub ADD GROUP NAME)

  5. ncb_buffer – wskaźnik na bufor danych

  6. ncb_length – pole zawierające długość bufora danych

  7. ncb_callname – pole zawierające nazwę zdalną, tj. nazwę odbiorcy lub nadawcy, używane przy transmisji połączeniowej

  8. ncb_name – nazwa lokalna, nadawana przez ADD NAME lub ADD GROUP NAME, nazwa węzła

  9. ncb_rto – czas oczekiwania na odbiór (receive time-out)

  10. ncb_sto – czas oczekiwania na wysyłkę (send time-out)

  11. ncb_lana_num – numer karty sieciowej

Najważniejsze możliwości ustawienia pola ncb_command:

  1. ncb_command = NCBRESET – resetowanie węzła NetBios

  2. ncb_command = NCBADDNAME – nadanie nazwy unikatowej węzła

  3. ncb_command = NCBADDGRNAME – nadanie nazwy grupowej

  4. ncb_command = NCBDELNAME – usunięcie nazwy węzła

  5. ncb_command = NCBDGSENDBC – broadcastowa wysyłka datagramu (do wszystkich)

  6. ncb_command = NCBDGRECVBC – odbiór broadcastowego datagramu

  7. ncb_command = NCBDGSEND – unicastowa lub multicastowa wysyłka datagramu (do konkretnego węzła lub grupy węzłów)

  8. ncb_command = NCBDGRECV – odbiór unicastowego lub multicastowego datagramu

  9. ncb_command = NCBCALL – nawiązanie sesji (połączenia) po stronie nadawcy

  10. ncb_command = NCBLISTEN – nawiązanie sesji (połączenia) po stronie odbiorcy

  11. ncb_command = NCBSEND – wysłanie danych za pomocą sesji

  12. ncb_command = NCBRECV – odebranie danych za pomocą sesji

  13. ncb_command = NCBHANGUP – zerwanie sesji (połączenia), po stronie nadawcy lub odbiorcy, nie obu

Szkielety programów:

  1. Transmisja broadcastowa

  1. Nadawca

1.Reset węzła (RESET)

2.Pobranie od użytkownika i nadanie unikatowej nazwy węzła (ADDNAME)

3.Pobranie danych do wysyłki i wysyłka broadcastowego datagramu (SENDBROADCASTDATAGRAM)

4.Usunięcie nazwy węzła (DELETENAME)

b) Odbiorca

1.Reset węzła (RESET)

2.Pobranie od użytkownika i nadanie unikatowej nazwy węzła (ADDNAME)

3.Odbiór broadcastowego datagramu (RECEIVEBROADCASTDATAGRAM) i wyświetlenie otrzymanych danych

4.Usunięcie nazwy węzła (DELETENAME)

  1. Transmisja unicastowa lub multicastowa

  1. Nadawca

1.Reset węzła (RESET)

2.Pobranie od użytkownika i nadanie unikatowej nazwy węzła (ADDNAME)

3.Pobranie danych do wysyłki

4.Pobranie nazwy odbiorcy

5.Wysyłka datagramu (SENDDATAGRAM)

6.Usunięcie nazwy węzła (DELETENAME)

b) Odbiorca unicastowy

1.Reset węzła (RESET)

2.Pobranie od użytkownika i nadanie unikatowej nazwy węzła (ADDNAME)

4.Odbiór datagramu (RECEIVEDATAGRAM)

5.Wyświetlenie otrzymanych danych

6.Usunięcie nazwy węzła (DELETENAME)

c) Odbiorca multicastowy

1.Reset węzła (RESET)

2.Pobranie od użytkownika i nadanie grupowej nazwy (ADDGROUPNAME)

4.Odbiór datagramu (RECEIVEDATAGRAM)

5.Wyświetlenie otrzymanych danych

6.Usunięcie nazwy węzła (DELETENAME)

  1. Transmisja połaczeniowa

  1. Nadawca

  1. Reset węzła (RESET)

  2. Pobranie od użytkownika i dodanie nazwy węzła (ADDNAME)

  3. Nawiązanie logicznego połączenia (sesji) (CALL)

  4. Pobranie i wysyłka danych (SEND)

  5. Zakończenie sesji (HANGUP) – nadawca lub odbiorca, nie obaj

  6. Usunięcie nazwy węzła (DELETENAME)

  1. Odbiorca

  1. Reset węzła (RESET)

  2. Pobranie od użytkownika i dodanie nazwy węzła (ADDNAME)

  3. Nawiązanie logicznego połączenia (sesji) (LISTEN)

  4. Odbiór danych (RECEIVE) i wyświetlenie otrzymanych danych

  5. Zakończenie sesji (HANGUP) – nadawca lub odbiorca, nie obaj

  6. Usunięcie nazwy węzła (DELETENAME)

  1. WINSOCK

Opis funkcji:

  1. WSAStartup(version, &wsadata) – służy do inicjalizacji WINSOCK, konieczna na początku każdego programu, jako parametry przyjmuje version – wersje WINSOCK i &wsadata – wskaźnik na strukturę WSAData zawierającej szczegóły implementacji WINSOCK, zwraca 0 jeżeli inicjalizacja się powiedzie lub kod błędu w przeciwnym wypadku

  2. gethostname(nazwa, sizeof(nazwa)) - pobiera nazwę hosta do zmiennej nazwa (typu string), zwraca 0 jeżeli operacja się powiedzie, w przeciwnym wypadku kod błędu

  3. gethostbyname(nazwa) – informacja zwraca strukturę hostent, zawierającą informacje o hoście o podanej nazwie (np. nazwę, IP etc.)

  4. gethostbyaddr(ipBin, 4, AF_INET) – zwraca strukturę hostent, zawierającą informacje o hoscie o ip podanym w izbin (adres w ipBin uzyskuje się poprzez potraktowanie adresu w formacie a.b.c.d zapisanego w stringu funkcją inet_addr, np. ipBin = inet_addr(nrIp)), 4 oznacza długość adresu ipBin która zawsze jest równa 4 dla AF_INET

  5. socket(AF_INET, typGniazda, rodzajProtokolu) – tworzy gniazdo i zwraca jego numer (będący intem) lub -1 jeżeli operacja się nie powiodła; pierwszy parametr to typ używanych adresów (dla Internetu AF_INET), drugim parametrem jest typ gniazda (SOCK_DGRAM dla transmisji bezpołączeniowej i SOCK_STREAM dla transmisji połączeniowej), trzeci to rodzaj używanego protokołu – IPPROTO_UDP dla transmisji bezpołączeniowej, IPPROTO_TCP dla transmisji połączeniowej (można też wpisać 0, wtedy program sam sobie wybierze (?) i też będzie działać)

  6. sendto(socketNum, wiadomosc, dlugoscWiad, 0, (struct sockaddr *)&socket, &x) - wysyłanie wiadomości w transmisji bezpołączeniowej, funkcja zwraca ilość wysłanych charów jeżeli wysyłka się powiodła, przyjmuje za parametry numer gniazda otrzymany po wykonaniu funkcji socket(), bufor z wiadomością do wysłania, długość wysyłanej wiadomości, 0 lub flagę mającą wpływ na wysyłanie danych, zmienną typu sockaddr_in zawierającą informacje o odbiorcy (ip, numer portu) rzutowaną na typ sockaddr, wskaźnik na zmienną zawierającą wielkość zmiennej socket

  7. recvfrom(socketNum, wiadomosc, długośćWiad, 0, (struct sockaddr *)&socket, &x) – odbieranie wiadomości w transmisji bezpołączeniowej, za parametry przyjmuje numer socketa zwrócony przez socket(), bufor do którego będzie zapisana otrzymana wiadomosc, długość wiadomości, 0 lub flagi, zmienną do której będzą zapisane informacje o nadawcy, wskaźnik na zmienną zawierająco wielkość zmiennej socket (która jest typu sockaddr_in); dwa ostatnie parametry można ustawić odpowiednio na NULL i 0

  8. bind(socketNum,(struct sockaddr *)&socket,&x) – nazwanie gniazda, tj. przypisanie gniazdu socketNum właściwości ze zmiennej socket, czyli np. określenie na którym porcie będzie wykonywany nasłuch; funkcja najczęściej używana w programie odbiorcy w transmisjach połączeniowych

  9. connect(socketNum, (struct sockaddr *) &socket, &x) – nawiązanie połączenia przez gniazdko socketNum z gniazdem, o którym informacje zawarte są w zmiennej socket

  10. listen(socketNum, 5) – nasłuch prowadzony przez gniazdo socketNum, drugi parametr określa ile połączeń jednocześnie może być obsłużonych (od 1 do 5)

  11. accept( socketNum, (struct sockaddr *) &socket,&x) – nawiązuje połączenie oczekujące w kolejce połączeń gniazda socketNum ustawionego w tryb nasłuchu funkcją listen(), dwa ostatnie parametry służą do identyfikacji nadawcy i są opcjonalne, funkcja tworzy nowe gniazdo i zwraca jego numer (odbiór wiadomości odbywa się na nowym gnieździe)

  12. send(socketNum, wiadomosc, dlugoscWiad, 0) – wysyłka w transmisji połączeniowej

  13. recv(socketNum, wiadomosc, długośćWiad, 0) – odbiór wiadomości w transmisji połączeniowej, tutaj socketNum nie jest numerem gniazda zwróconym przez akcept()

  14. closesocket(socketNum) – zamknięcie gniazda socketNum

  15. WSACleanup() – zwolnienie WinSocka

  16. htons(liczba) – konwertuje liczbę typu u_short (na dobrą sprawę może być int) z host na network byte order

  17. htonl(liczba) – konwertuje liczbę typu u_long (na dobrą sprawę może być int) z host na network byte order

  18. ntohs(liczba) – konwertuje liczbę typu u_short (na dobrą sprawę może być int) z network na host byte order

  19. ntohl(liczba) – konwertuje liczbę typu u_long (na dobrą sprawę może być int) z network na host byte order

  20. inet_addr(string) – konwertuje string zawierający IP w formacie a.b.c.d na typ in_addr która może być użyta w zmiennej typu sockaddr_in

  21. inet_ntoa(in_adrr) – zamienia adres IP w formacie in_addr na stringa zawierającego to IP w formacie a.b.c.d

Struktura sockaddr_in:

struct sockaddr_in{

short sin_family;

unsigned short sin_port;

struct in_addr sin_addr;

char sin_zero[8];};

Znaczenie pól sockaddr_in:

  1. sin_family – typ adresów, czyli znowu musi być AF_INET

  2. sin_port – nr portu hosta

  3. sin_addr – nr IP hosta

Szkielety programów:

  1. Transmisja bezpołączeniowa

  1. Nadawca

  1. Inicjalizacja WinSOCKA (WSAStartup(version, &wsadata))

  2. Utworzenie gniazda (socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))

  3. Pobranie IP i nr portu odbiorcy oraz komunikatu do wysłania

  4. Wypełnienie struktury sockaddr_in pobranymi danymi

  5. Wysłanie danych (sendto(socketNum, wiadomosc, dlugoscWiad, 0, (struct sockaddr *)&socket, &x))

  6. Zamkniecie gniazda (closesocket(socketNum))

  7. Zwolnienie WinSOCKA (WSACleanup())

  1. Odbiorca

  1. Inicjalizacja WinSOCKA (WSAStartup(version, &wsadata))

  2. Utworzenie gniazda (socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))

  3. Pobranie IP i nr portu na którym będzie nasłuchiwał odbiorca

  4. Wypełnienie struktury sockaddr_in pobranymi danymi

  5. Nazwanie gniazda (bind(socketNum,(struct sockaddr *)&socket,&x))

  6. Odbiór danych (recvfrom(socketNum, wiadomosc, długośćWiad, 0, (struct sockaddr *)&socket, &x))

  7. Wyświetlenie danych

  8. Zamkniecie gniazda (closesocket(socketNum))

  9. Zwolnienie WinSOCKA (WSACleanup())

  1. Transmisja połączeniowa

  1. Nadawca

  1. Inicjalizacja WinSOCKA (WSAStartup(version, &wsadata))

  2. Utworzenie gniazda (socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))

  3. Pobranie IP i nr portu odbiorcy oraz komunikatu do wysłania

  4. Wypełnienie struktury sockaddr_in pobranymi danymi

  5. Nawiązanie połączenia (connect(socketNum, (struct sockaddr *) &socket, &x))

  6. Wysłanie danych (send(socketNum, wiadomosc, dlugoscWiad, 0))

  7. Zamkniecie gniazda (closesocket(socketNum))

  8. Zwolnienie WinSOCKA (WSACleanup())

  1. Odbiorca

  1. Inicjalizacja WinSOCKA (WSAStartup(version, &wsadata))

  2. Utworzenie gniazda (socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))

  3. Pobranie IP i nr portu na którym będzie nasłuchiwał odbiorca

  4. Wypełnienie struktury sockaddr_in pobranymi danymi

  5. Nazwanie gniazda (bind(socketNum,(struct sockaddr *)&socket,&x))

  6. Nasłuch na gnieździe (listen(socketNum, 5))

  7. Akceptacja połączenia i automatyczne utworzenie nowego gniazda (accept( socketNum, (struct sockaddr *) &socket,&x))

  8. Odbiór danych (recv(socketNum, wiadomosc, długośćWiad, 0))

  9. Wyświetlenie danych

  10. Zamkniecie gniazda (closesocket(socketNum))

  11. Zwolnienie WinSOCKA (WSACleanup())


Wyszukiwarka

Podobne podstrony:
Wirtualne sieci LAN
9 Sieci komputerowe II
Sieci bezprzewodowe Wi Fi
BAD WYKŁAD SIECI 2
Sieci komputerowe 7
Bezpieczenstwo w sieci SD
sieci komputerowe 2
Sieci media transmisyjne
TS Rozlegle sieci komputerowe
sieci Techniki komutacji
urzadzenia sieci lan wan
Bezpieczne sieci bezprzewodowe
sieci dla II roku
4 Koszty Logistyki w sieci dystrybucji
wprowadzenie do systemu win i podst sieci

więcej podobnych podstron