Lab kolokwium cz1 NetBIOS

background image

Sieci Komputerowe – Laboratorium (2013)

Maksymalne dopuszczalne rozmiary pakietów danych w NetBIOS:

- Komunikacja za pomocą sesji umożliwia przesłanie w pakiecie do 64kb danych
- Komunikacja za pomocą datagramów umożliwia przesłanie w pakiecie do 512 bajtów danych

Budowa struktury NCB:

Pole struktury

Typ danych

Opis

ncb_command (COMMAND)

byte

Określa rodzaj używanej funkcji (reset, addname, deletename, itd.) w
postaci stałej (język C) lub liczby (Pascal)

ncb_retcode (RETCODE

)

byte

Zwraca wynik działania określonej funkcji. Zwraca 0 w przypadku
poprawnego wywołania, w razie błędu zwraca pewną wartość, która
określa konkretny typ błędu

ncb_lsn (LSN)

byte

Określa numer lokalnej sesji przydzielonej przez NetBIOS przy
ustanowieniu sesji. Wartość ta zwracana jest przez CALL i LISTEN i musi
być podana w funkcjach SEND i RECEIVE. Wartością tego pola mogą być
liczby z przedziału 1-254

ncb_num (NUM)

byte

Pole określające numer węzła NetBIOS. Zwracane jest przez funkcję
ADDNAME i wykorzystywane jest we wszystkich funkcjach odbierających
datagramy (RECEIVE). Wartością tego pola mogą być liczby z przedziału
1-254

ncb_buffer (BUFADR)

pointer

Wskaźnik (adres) na wiadomość, która ma zostać wysłana lub odebrana

ncb_length (BUFLEN)

word

Określa długość bufora wiadomości (w bajtach). W funkcjach odbioru
(RECEIVE) ustawia się to pole na maksymalną wartość (z reguły nie
wiemy jak długą wiadomość nadawca chce nam dostarczyć), a po
wykonaniu funkcji pole to określa dokładny rozmiar odebranej
wiadomości w bajtach

ncb_callname (CALLNAME)

array [1..16] of byte Pole określające nazwę węzła komputera z którym chcemy się połączyć

(zwykle jest to nazwa nadawcy) wykorzystywane w funkcjach CALL,
LISTEN oraz w datagramach (RECEIVE). W przypadku użycia funkcji CHAIN
SEND pierwsza połowa pola określa rozmiar bufora odbioru, a druga
połowa jego adres. Wszystkie bajty muszą być wykorzystane.

ncb_name (NAME)

array [1..16] of byte Określa nazwę węzła NetBIOS wykorzystywanego np. w funkcji ADD

NAME, DELETE NAME lub innych funkcjach.

ncb_rto (RTO)

byte

Określa czas na odbiór wiadomości (Receive Time-Out). Jednostką jest
pół sekundy czyli np. ustawienie tego pola na 1 bajt powoduje określenie
czasu odbioru na 0.5 sekundy. Po upłynięciu czasu funkcja odbioru
zwraca odpowiedni błąd. W ramach trwania sesji wartość ta pozostaje
stała. Pola te muszą być użyte w funkcjach CALL i LISTEN (jeśli nie chcemy
ustawiać czasu na odbiór, ustawiamy te pola na wartość 0)

ncb_sto (STO)

byte

Określa czas na wysłanie wiadomości (Send Time-Out). Jednostką jest pół
sekundy czyli np. ustawienie tego pola na 1 bajt powoduje określenie
czasu wysłania na 0.5 sekundy. Po upłynięciu czasu funkcja wysyłająca
zwraca odpowiedni błąd i sesja zostaje zerwana. W ramach trwania sesji
wartość ta pozostaje stała. Pola te muszą być użyte w funkcjach CALL i
LISTEN (jeśli nie chcemy ustawiać czasu na wysłanie, ustawiamy te pola
na wartość 0)

ncb_post (POST)

pointer

Pole wykorzystywane jedynie w trybie asynchronicznym (no-wait mode).
Przechowuje adres przerwania funkcji po jej poprawnym wykonaniu.

ncb_lana_num (LANA_NUM)

byte

Pole określające numer karty sieciowej komputera. W zależności od ilości
kart sieciowych danego komputera pole to przyjmuje różne wartości.
Zwykle pole to ma wartość 0 (jedna lokalna karta sieciowa). Pole
wykorzystywane w niemal każdej funkcji (RESET, ADDNAME,
DELETENAME itd.)

ncb_cmd_cplt (CMD_DONE)

byte

Pole to jest ustawiane w momencie wywołania funkcji. Wartość FF
określa, że dana funkcja się nie wykonała. W przypadku wykonania
funkcji pole to przyjmuje identyczną wartość jak RET_CODE czyli 0 jeśli
pomyślnie lub nr błędu w pozostałych przypadkach.

ncb_reserved (RES)

array [1..14] of byte Pole zarezerwowane. Nie powinno być używane.


Wait mode
– tryb synchroniczny (z odczekiwaniem) – tryb używany na laboratorium
No-wait mode – tryb asynchroniczny (bez odczekiwania)

background image

Sieci Komputerowe – Laboratorium (2013)

DODAWANIE WĘZŁA – schemat ogólny (Lab2)

1. Reset węzła Netbios (RESET).
2. Pobranie łańcucha tekstowego od użytkownika (nazwa dla węzła).
3. Dodanie nazwy jako unikatowej (ADDNAME).
4. Wstrzymanie działania programu do momentu naciśnięcia dowolnego klawisza przez użytkownika (w tym momencie
polecenie „nbtstat -n” wydane w wierszu poleceń powinno wyświetlić dodaną nazwę)
5. Usunięcie dodanej nazwy (DELETENAME)

BROADCAST (DATAGRAM) – schemat ogólny (Lab 2)

1. Reset węzła Netbios (RESET) – nadawca i odbiorca.
2. Pobranie łańcucha tekstowego od użytkownika (nazwa dla węzła) – nadawca i odbiorca.
3. Dodanie nazwy jako unikatowej (ADDNAME) – nadawca i odbiorca.
4. Pobranie łańcucha tekstowego od użytkownika (komunikat do wysłania) – nadawca.
5. Wysłanie datagramu (SENDBROADCASTDATAGRAM) – nadawca, odbiór datagramu (RECEIVEBROADCASTDATAGRAM) –
odbiorca.
6. Wyświetlenie odebranego komunikatu – odbiorca.
7. Usunięcie dodanej nazwy (DELETENAME) – nadawca i odbiorca.

MULTICAST i UNICAST (DATAGRAM) – schemat ogólny (Lab 4)

1. Reset węzła Netbios (RESET) – nadawca i odbiorca.
2. Pobranie łańcucha tekstowego od użytkownika (nazwa dla węzła) – nadawca i odbiorca.
3. Dodanie nazwy:
a) jako unikatowej (ADDNAME) – nadawca i odbiorca - transmisja unicast.
b) jako unikatowej (ADDNAME – nadawca) i jako grupowej (ADDGROUPNAME – odbiorca) – transmisja multicast.
4. Pobranie łańcucha tekstowego od użytkownika (komunikat do wysłania) oraz nazwy odbiorcy (adresata wysyłki, patrz pkt.3) –
nadawca.
5. Wysłanie datagramu (SENDDATAGRAM) – nadawca, odbiór datagramu (RECEIVEDATAGRAM) – odbiorca.
6. Wyświetlenie odebranego komunikatu – odbiorca.
7. Usunięcie dodanej nazwy (DELETENAME) – nadawca i odbiorca.

SESJA – schemat ogólny (Lab 5)

1.Dodanie unikalnych nazw nadawcy i odbiorcy do lokalnej tabeli nazw NetBIOSu - ADD NAME.
2.Nawiązanie logicznego połączenia (sesji) - CALL (nadawca) i LISTEN (odbiorca).
3.Transfer komunikatów/danych - SEND (nadawca) i RECEIVE (odbiorca).
4.Zakończenie/rozwiązanie sesji - HANG UP (nadawca lub odbiorca).
5.Usunięcie nazw nadawcy i odbiorcy z lokalnej tabeli nazw NetBIOSu - DELETE NAME.

Opis poszczególnych funkcji NetBIOS:

RESET COMMAND

Przyjmuje

Zwraca

ncb_command := $32;

ResetAdapter := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_lsn := 1; (dot. tylko sesji, max. 32)

ncb_num := NCBNUM; (liczba poleceń do obsługi w danym
czasie – zwykle 1, max. 32)

Implementacja:

Uwagi:
Po wywołaniu tej funkcji wszystkie dotychczas
istniejące nazwy węzłów oraz sesje NetBIOS
zostaną zlikwidowane.

Funkcja ta powinna być wywoływana przed
rozpoczęciem nawiązywania komunikacji za
pomocą pseudoprotokołu NetBIOS.

Za pomocą tej funkcji możemy ponadto
skonfigurować parametry naszego połączenia
(liczba wspieranych sesji 1-32, ilość funkcji
obsługiwanych w jednym czasie 1-32).

background image

Sieci Komputerowe – Laboratorium (2013)

ADD NAME COMMAND

Przyjmuje

Zwraca

ncb_command := $30;

NCBNUM := ncb_num; {numer węzła pomiędzy 1-254}

ncb_lana_num := NCBLANANUM;

AddName := ncb_retcode;

move(nazwa, ncb_name, 16); {nazwa węzła max. 16 znaków}

CMD_Done := ncb_cmd_cplt;

ncb_post := $seg:$ofs (dot. tylko no-wait mode)


Implementacja:

Uwagi:
Funkcja ta służy do nadawania
nazwy

węzła

w

protokole

NetBIOS. Nazwa węzła musi być
unikalna dla całej sieci.

ADD GROUP NAME COMMAND

Przyjmuje

Zwraca

ncb_command := $36;

NCBNUM := ncb_num; {numer węzła pomiędzy 1-254}

ncb_lana_num := NCBLANANUM;

AddGroupName := ncb_retcode;

move(nazwa, ncb_name, 16); {nazwa węzła max. 16 znaków}

CMD_Done := ncb_cmd_cplt;

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja ta służy do nadawania
grupowej

nazwy

węzła

NetBIOS – w tym przypadku
nie jest to nazwa unikalna.

Jeśli w sieci istnieje unikalna
nazwa węzła używana przez
inny proces o takiej samej
nazwie jaką chcemy nadać, to
funkcja zwraca błąd w polu
RETCODE.

Funkcji tej używa się w
transmisji typu BROADCAST.
Wszystkie komputery w sieci
nasłuchujące

spod

nazwy

grupowej

otrzymają

komunikat wysłany poprzez
SEND DATAGRAM.




background image

Sieci Komputerowe – Laboratorium (2013)

DELETE NAME COMMAND

Przyjmuje

Zwraca

ncb_command := $31;

NCBNUM := ncb_num; {numer węzła pomiędzy 1-254}

ncb_lana_num := NCBLANANUM;

DeleteName := ncb_retcode;

move(nazwa, ncb_name, 16); {nazwa węzła max. 16 znaków}

CMD_Done := ncb_cmd_cplt;

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Za pomocą tej funkcji usuwane są
nazwy węzłów z lokalnej tabeli
NetBIOS. Jeśli pod daną nazwą
istnieją jakieś aktywne sesje, to
taka nazwa nie zostanie usunięta
do momentu rozwiązania sesji.

Każda

z

poniższych

funkcji

związanych z funkcją usuwania
spowoduje zwrócenie błędu nr 17
(Name was deleted) w polu
RETCODE funkcji DELETE NAME:
- LISTEN
- RECEIVE
- RECEIVE ANY
- RECEIVE DATAGRAM

CALL COMMAND

Przyjmuje

Zwraca

ncb_command := $10;

NCBLSN := ncb_lsn; (Numer sesji pomiędzy 1, a 254)

ncb_lana_num := NCBLANANUM;

Call := ncb_retcode;

move(odbiorca, ncb_callname, 16);

(nazwa węzła odbiorcy)

CMD_Done := ncb_cmd_cplt;

move(nazwa, ncb_name, 16);

(nazwa węzła nadawcy)

ncb_rto := 0; {Receive Timeout}
ncb_sto := 0; {Send Timeout}

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja ta służy do nawiązania sesji z innym
komputerem w sieci lub z innym procesem.

Pokrewna funkcja LISTEN musi przyjąć tą samą
nazwę w polu NCB_NAME, aby udało się
nawiązać połączenie sesyjne.

Zwracany

numer

sesji

(NCB_LSN)

wykorzystywany jest podczas wysyłania i
odbierania danych oraz dla funkcji HANG UP
(rozwiązywanie sesji po numerze).

Czasy oczekiwania programów: nadawcy na
wysyłkę i odbiorcy na nadejście
komunikatu można ustawić na bezlimitowe za
pomocą przypisania do pól NCB_RTO i NCB_STO
wartości 0.

background image

Sieci Komputerowe – Laboratorium (2013)

LISTEN COMMAND

Przyjmuje

Zwraca

ncb_command := $11;

NCBLSN := ncb_lsn; (Numer sesji pomiędzy 1, a 254)

ncb_lana_num := NCBLANANUM;

Listen := ncb_retcode;

move(odbiorca, ncb_callname, 16);

(nazwa węzła odbiorcy)

CMD_Done := ncb_cmd_cplt;

move(nazwa, ncb_name, 16);

(nazwa węzła nadawcy)

move(ncb_callname, nadawca, 16);

ncb_rto := 0; {Receive Timeout}

ncb_sto := 0; {Send Timeout}

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja używana do nawiązywania sesji (po
stronie odbiorcy). Sesja zostanie nawiązana jeśli
nadawca w funkcji CALL podał tą samą nazwę
węzła co odbiorca w funkcji LISTEN.

Pod jedną nazwą lub jedną parą nazw można
zainicjować więcej niż jedną sesję.

Jeśli na pierwszej pozycji pola NCB_CALLNAME
znajduje się symbol „*” (gwiazdka) to funkcja
LISTEN będzie nasłuchiwać ze wszystkimi
nadawcami w sieci, którzy wywołali funkcje CALL.

Pierwszeństwo w nawiązywaniu sesji przez
funkcje

LISTEN

ma

ta,

która

w

polu

NCB_CALLNAME

zawiera

konkretną

nazwę

nadawcy, a nie symbol gwiazdki „*”.

Jeżeli użyto symbolu „*” w NCB_CALLNAME, to po
wywołaniu funkcji LISTEN w tym polu będzie
znajdować się nazwa węzła nadawcy.

HANG UP COMMAND

Przyjmuje

Zwraca

ncb_command := $12;

HangUp := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_lsn := 1;

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja ta przerywa lub zamyka sesję. Może być użyta
zarówno po funkcji CALL (u nadawcy) jak i LISTEN (u
odbiorcy).

Jeśli funkcja ta zostanie wywołana podczas gdy w sesji
„wisi” jeszcze:
a) któraś z funkcji odbioru RECEIVE, to funkcje te zwrócą
błąd 0A (Session closed).
b) funkcja SEND, to HANG UP odczeka na jej wykonanie i
dopiero zadziała.

W przypadku wywołania funkcji HANG UP dla sesji, która
nie istnieje, zostanie zwrócony błąd 08 (Invalid session)
lub 0A (Session closed).


background image

Sieci Komputerowe – Laboratorium (2013)

SEND COMMAND

Przyjmuje

Zwraca

ncb_command := $14;

Send := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_lsn := 1;

ncb_buffer:=@komunikat[1];
ncb_length:=length(komunikat);

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja ta służy do wysyłania danych do urządzeń lub
procesów w sieci w ramach nawiązanej sesji.

W sesji musi zostać wywołana funkcja RECEIVE lub
RECEIVE ANY, aby dane zostały przesłane.

Dane wysyłane są z opóźnieniem zgodnym z polem
NCB_STO w funkcji CALL.

Jeśli funkcja SEND zakończy się błędem, sesja zostaje
przerwana.

RECEIVE COMMAND

Przyjmuje

Zwraca

ncb_command := $15;

Receive := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_lsn := 1;

move(ncb_length, dlugosc, NCBNAMSZ);

ncb_buffer:=@komunikat[1];

ncb_length:=250;

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja ta służy do odbierania danych od urządzeń lub
procesów w sieci w ramach nawiązanej sesji.

Jeśli upłynął czas ustawiony w polu NCB_RTO w funkcji
LISTEN i nie wywołano w tym czasie funkcji SEND, to
funkcja RECEIVE zwróci błąd o numerze 05 (Timeout
error
).

Jeśli maksymalny rozmiar bufora odbioru jest mniejszy
od rozmiaru przesyłanej wiadomości, to odbiorca
otrzyma wiadomość skróconą do ilości miejsca w
buforze. Pozostała (ucięta) część wiadomości nie
przepada, a zostaje dosłana w kolejnym wywołaniu
funkcji RECEIVE. Ponadto w polu RETCODE znajdzie się
błąd o numerze 06 (Przepełniony bufor).

Po wywołaniu funkcji w polu NCB_LENGTH znajdzie się
długość otrzymanej wiadomości, natomiast przypisanie
do pomocniczej zmiennej zawartości bufora pozwoli
nam na odczytanie odebranego komunikatu.

background image

Sieci Komputerowe – Laboratorium (2013)

SEND DATAGRAM COMMAND

Przyjmuje

Zwraca

ncb_command := $20;

SendDatagram := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_num := NCBNUM;

move(odbiorca, ncb_callname, NCBNAMSZ);
ncb_buffer := @wiadomosc[1];
ncb_length := length(wiadomosc);

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja ta służy do wysyłania datagramów.

Datagram pozwala na transfer komunikatów
pomiędzy stacjami lub procesami w sieci, bez
konieczności nawiązywania sesji. Transfer odbywa
się na podstawie nazw węzłów NetBIOS
unikalnych, bądź grupowych lub też do wszystkich
stacji w sieci (w przypadku BROADCAST).

Protokół NetBIOS nie sprawdza, czy datagram
został wysłany czy nie, przez co nadawca
komunikatu nie dowie się, czy wiadomość dotarła
do odbiorcy/odbiorców, czy też nie, a co za tym
idzie sposób ten nie jest doskonały na tyle co sesja.

Komunikacja za pomocą datagramów umożliwia
przesłanie w pakiecie do 512 bajtów danych
(ncb_length).

RECEIVE DATAGRAM COMMAND

Przyjmuje

Zwraca

ncb_command := $21;

ReceiveDatagram := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_buffer:=@s[1];

move(ncb_length, dlugosc, NCBNAMSZ);

ncb_length:=250;

move(ncb_callname, odb, NCBNAMSZ);

ncb_num:=NCBNUM;

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Uwagi:
Funkcja ta służy do odbierania datagramów. Jej
wywołanie powinno nastąpić przed wywołaniem
funkcji SENDDATAGRAM. Funkcja ta nie posiada
żadnego timeout’u jak w przypadku sesji.

Jeśli maksymalny rozmiar bufora odbioru jest
mniejszy od rozmiaru przesyłanej wiadomości, to
odbiorca otrzyma wiadomość skróconą do ilości
miejsca w buforze. Pozostała (ucięta) część
wiadomości przepada (kolejna wada datagramów w
stosunku do sesji). Ponadto w polu RETCODE
znajdzie się błąd o numerze 06 (Przepełniony bufor).

Jeśli pole NCB_NUM zostanie wypełnione wartością
FF to funkcja będzie odbierać wszystkie datagramy
wysłane w sieci.

Funkcja ta zwraca długość komunikatu, nazwę
nadawcy, status wykonania i kod błędu.

background image

Sieci Komputerowe – Laboratorium (2013)

SEND BROADCAST COMMAND

Przyjmuje

Zwraca

ncb_command := $22;

SendBroadcastDatagram := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_num := NCBNUM;

move(odbiorca, ncb_callname, NCBNAMSZ);
ncb_buffer := @wiadomosc[1];
ncb_length := length(wiadomosc);

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja ta służy do wysyłania wiadomości
typu

BROADCAST

(do

wszystkich

nasłuchujących).

Aby wiadomość dotarła do odbiorców muszą
oni wywołać funkcję RECEIVE BROADCAST.

RECEIVE BROADCAST COMMAND

Przyjmuje

Zwraca

ncb_command := $23;

ReceiveBroadcastDatagram := ncb_retcode;

ncb_lana_num := NCBLANANUM;

CMD_Done := ncb_cmd_cplt;

ncb_num := NCBNUM;

move(ncb_length, dlugosc, NCBNAMSZ);

ncb_buffer := @wiadomosc[1];

move(ncb_callname, odb, NCBNAMSZ);

ncb_length := length(wiadomosc);

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

Implementacja:

Uwagi:
Funkcja

ta

służy

do

odbierania

wiadomości

typu

BROADCAST.

Jej

wywołanie powinno nastąpić przed
wywołaniem funkcji SENDBROADCAST.
Funkcja

ta

nie

posiada

żadnego

timeout’u jak w przypadku sesji.

Jeśli maksymalny rozmiar bufora odbioru
jest mniejszy od rozmiaru przesyłanej
wiadomości,

to

odbiorca

otrzyma

wiadomość skróconą do ilości miejsca w
buforze.

Pozostała

(ucięta)

część

wiadomości przepada (kolejna wada
datagramów w stosunku do sesji).
Ponadto w polu RETCODE znajdzie się
błąd o numerze 06 (Przepełniony bufor).

Funkcja ta zwraca długość komunikatu,
nazwę nadawcy, status wykonania i kod
błędu.


Wyszukiwarka

Podobne podstrony:
kolokwia, Kolokwium cz1
Spektroskopia LAB kolokwium, CHEMIA UŁ, 4 rok, Spektroskopia
cw1 elektr aparat w lab metrol cz1
Kolokwium cz1
`Glifosat (cw.2), biotransformacje LAB, Kolokwium materiały
mechanika gruntów I (lab) kolokwium
`Biotransformacje, biotransformacje LAB, Kolokwium materiały
Kolokwium lab 8 i
Zagadnienia do kolokwium z metr lab
kolokwium lab 1 i 2
trzecie kolokwium lab zagadnienia
kolokwium lab 6
lab(1), II rok, II rok CM UMK, Giełdy, od Joe, biochemia, BIOCHEMIA, GIEŁDY - KOLOKWIA, Giełdy - PRA
krystalografia kolokwium I LAB, CHEMIA UŁ, 4 rok, Krystalografia
odp, kolokwium lab u Mazurka

więcej podobnych podstron