SIECI KOMPUTEROWE WYKŁAD 4. WARSTWA ŁĄCZA DANYCH

Slides:



Advertisements
Podobne prezentacje
Sieci komputerowe Protokół TCP/IP Piotr Górczyński 27/09/2002.
Advertisements

dr A Kwiatkowska Instytut Informatyki
MODEL OSI.
SIECI KOMPUTEROWE WYKŁAD 10. RÓWNOWAŻENIE OBCIĄŻEŃ
SIECI KOMPUTEROWE WYKŁAD 2. STANDARDY. PROJEKTY. MODELE WARSTWOWE.
Architektura protokołu ATM
Sieci X.25 standard opracowany w 1974 r. przez CCITT dla publicznych sieci pakietowych (kolejne modyfikacje i usprawnienia 1976, 1978, 1980, 1984, 1988,
Stream Control Transmission Protocol
Sieci komputerowe Model warstwowy OSI Piotr Górczyński 20/09/2003.
Wykład 2: Metody komutacji w sieciach teleinformatycznych
Wykład 3: Zasady Działania Protokołów Telekomunikacyjnych
Architektura Systemów Komputerowych
WPROWADZENIE DO SIECI I INTERSIECI
Systemy plików FAT12, FAT16, FAT32, NTFS.
Obliczalność i złożoność obliczeniowa
SIECI KOMPUTEROWE.
Sieci komputerowe.
Instytut Informatyki Teoretycznej i Stosowanej Polskiej Akademii Nauk Gliwice, ul. Bałtycka 5, Protokół TCP – kształtowanie.
Komunikaty sterujące zestawu protokołów TCP/IP
5. WARSTWA ŁĄCZA Zadaniem warstwy łącza jest zapewnienie transmisji informacji pomiędzy stacjami końcowymi oraz węzłami podłączonymi do wspólnego medium.
Sieci rozległe WAN – standardy telekomunikacyjne - ciąg dalszy
PRZEDMIOT:PK20 - Sieci komputerowe
Sieci lokalne – protokoły warstwy łącza danych
Protokoły sieciowe.
Powstanie Frame Relay Sieć Frame Relay zastąpiła sieć X.25;
Przełączanie OSI warstwa 2
Protokół Komunikacyjny
Informatyka I - Wykład ANSI C
RODZAJE TRANSMISJI PRZESYŁANIE INFORMACJI W MODELU WARSTWOWYM
Wymiana informacji w sieciach komputerowych
Rozdział 5: Protokoły sieciowe
SEMINARIUM DIAGNOSTYKA SYSTEMÓW KOMPUTEROWYCH TEMAT Pomiary przepustowości ruterów programowych na bazie systemu Windows 2003/2008 AUTORZY Robert Święcki.
Frame Relay mgr inż. Łukasz Dylewski
Wymiana informacji w sieciach komputerowych Opracowanie: Maria Wąsik.
Model OSI Model OSI (Open Systems Interconnection Reference Model) został wprowadzony w celu ujednolicenia regół komunikacji sieciowej. Obejmuje on cały.
Informatyka I Wykład 4 Stałe Stałe liczbowe Stałe znakowe Stałe tekstowe Jerzy Kotowski Politechnika Wroclawska var = 5L - 0xA; -5.
Jerzy Kotowski Politechnika Wrocławska
Warstwa łącza danych.
Sieci komputerowe Wprowadzenie Adam Grzech Instytut Informatyki
Systemy operacyjne i sieci komputerowe
Systemy operacyjne i sieci komputerowe
Model warstwowy sieci ISO/OSI
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
System emulacji bezprzewodowych sieci komputerowych
Temat 11: Modele warstwowe sieci
Systemy operacyjne i sieci komputerowe
Systemy operacyjne i sieci komputerowe
Sieci komputerowe Model warstwowy OSI.
Model OSI.
Wiadomości sygnalizacyjne DSS1
1 dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! )
PODSTAWY SIECI KOMPUTEROWYCH - MODEL ISO/OSI. Modele warstwowe a sieci komputerowe Modele sieciowe to schematy funkcjonowania, które ułatwią zrozumienie.
Języki formalne Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
ATXMEGA128A4U 128 kB pamięci Flash Zasilanie 1.6V-3.6V Maksymalne taktowanie 32 MHz 34 Programowalne WE-WY System zdarzeń (Event System) 4 kanały DMA.
Systemy operacyjne i sieci komputerowe DZIAŁ : Systemy operacyjne i sieci komputerowe Informatyka Zakres rozszerzony Zebrał i opracował : Maciej Belcarz.
Model warstwowy ISO-OSI
Model OSI. Aplikacji Prezentacji Sesji Transportowa Sieciowa Łącza Danych Fizyczna WARSTWY: Aplikacji Prezentacji Sesji Transportowa Sieciowa Łącza Danych.
VG – AnyLAN NetWorld kwiecień 96 str.34.
Detekcja i korekcja błędów w transmisji cyfrowej.
5. WARSTWA ŁĄCZA Zadaniem warstwy łącza jest zapewnienie transmisji informacji pomiędzy stacjami końcowymi oraz węzłami podłączonymi do wspólnego medium.
Sadsadafghfhfghg POLITECHNIKA RZESZOWSKA WYDZIAŁ ELEKTROTECHNIKI I INFORMATYKI POLITECHNIKA RZESZOWSKA im. Ignacego Łukasiewicza WYDZIAŁ ELEKTROTECHNIKI.
SIECI KOMPUTEROWE WYKŁAD 5. WARSTWA SIECIOWA
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Model TCP/IP Wykład 6.
SIECI KOMPUTEROWE WYKŁAD 2. STANDARDY. PROJEKTY. MODELE WARSTWOWE.
SIECI KOMPUTEROWE WYKŁAD 4. WARSTWA ŁĄCZA DANYCH
Podstawy sieci komputerowych
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Transmisja radiowa Arduino & nRF24L01P
Adresowanie bezklasowe Podział sieci na podsieci
Zapis prezentacji:

SIECI KOMPUTEROWE WYKŁAD 4. WARSTWA ŁĄCZA DANYCH PROF. CZESŁAW SMUTNICKI czeslaw.smutnicki@pwr.wroc.pl, p.216 C-3 POLITECHNIKA WROCŁAWSKA INSTYTUT INFORMATYKI, AUTOMATYKI I ROBOTYKI www.iiar.pwr.wroc.pl

RAMKOWANIE Podział strumienia bitów na ramki, przerwy czasowe pomiędzy ramkami, błedne ramki, uszkodzenia ramek. METODY SEPARACJI RAMEK Zliczanie znaków Bajty znacznikowe z napełnianiem bajtami Znaczniki początku i końca z napełnianiem bitami Zmiany kodowania w warstwie fizycznej ZLICZANIE ZNAKÓW 5 1 2 3 4 5 6 7 8 9 8 3 4 5 2 3 5 1 6 3 4 5 2 3

RAMKOWANIE C.D. N – nagłówek S – stopka F – flaga E - Esc BAJTY ZNACZNIKOWE Z NAPEŁNIANIEM BAJTAMI N – nagłówek S – stopka F – flaga E - Esc F N ŁADUNEK S F Ciąg we Napełnianie bajtami (byte stuffing) A F B A E F B A E B A E E B A E F B A E E E F B A E E B A E E E E B

RAMKOWANIE C.D. ZNACZNIKI POCZĄTKU I KOŃCA Z NAPEŁNIANIEM BITAMI F N ŁADUNEK S F F = 01111110 Gdy warstwa łącza danych napotyka w danych pięć jedynek wstawia zawsze dodatkowo zero; sześć jedynek ma jedynie znacznik

KONTROLA BŁĘDÓW KONTROLA BŁĘDÓW Potwierdzenie (ACK, NAK, na barana, „piggybacking”) Zaginięcie (utracenie) ramki Czasomierze Numery sekwencyjne ramek Kody korekcyjne i detekcyjne (bit parzystości, CRC, Cyclic Redundancy Check, kod wielomianowy…) Zdarzenia (timeout, frame_arrival, checksum_error, ack, nak,…) STEROWANIE PRZEPŁYWEM Na podstawie informacji zwrotnych Na podstawie szybkości transmisji

PROTOKOŁY ŁĄCZA DANYCH PROTOKOŁY SIMPLEKSOWE Nieograniczony protokół simpleksowy Simpleksowy protokół stop-and-wait Protokół simpleksowy dla kanału z zakłóceniami PROTOKOŁY Z OKNEM PRZESUWNYM (akceptowane są ramki o nr mieszczących się w oknie przesuwnym; wysyłane są ramki o nr z okna przesuwnego) Z jednobitowym oknem przesuwnym Wróć do „n” (go back to „n”): odrzucenia kolejnych ramek po błędnej Powtórzeń selektywnych: błędna ramka odrzucona, kolejne buforowane

PROTOKOŁY ŁĄCZA DANYCH C.D. typedef enum {frame_arrival} event type; // zdarzenia #define MAX_PKT 1024 // wielkosc pakietu w bajtach typedef enum {false,true} boolean; // boolean typ typedef unsigned int seq_nr; // numer sekwencyjny lub ack typedef struct {unsigned char data[MAX_PKT];} packet; // pakiet typedef enum {data, ack, nak} frame_kind; // ramka typedef struct { frame_kind kind; // rodzaj ramki seq_nr seq; // nr ramki seq_nr ack; // nr potwierdzenia // pakiet packet info; } frame;

PROTOKOŁY ŁĄCZA DANYCH C.D. // czekaj na zdarzenie, zwroc jego typ void wait_for_event(event_type *event); // pobierz z warstwy sieciowej pakiet do przeslania kanalem void from_network_layer(packet *p); // doręcz informacje z przychodzącej ramki do warstwy sieciowej void to_network_layer(packet *p); // pobierz z warstwy fizycznej ramke i skopiuj do r void from_physical_layer(frame *r); // przekaz ramke do warstwy fizycznej w celu transmisji void to_physical_layer(frame *s); // uruchom zegar i aktywuj zdarzenie timeout void start_timer(seq_nr k); // zatrzymaj zegar i dezaktywuj zdarzenie timeout void stop_timer(seq_nr k); // uruchom czasomierz pomocniczy i aktywuj zdarzenie ack_timeout void start_ack_timer(); // zatrzymaj czasomierz pomocniczy i dezaktywuj zdarzenie ack_timeout void stop_ack_timer(); // pozwol warstwie sieciowej powodowac zdarzenie network_layer_ready void enable_network_layer(); // zabron warstwie sieciowej powodowac zdarzenie network_layer_ready void disable_network_layer(); #define inc(k) if (k<MAX_SEQ) k=k+1; else k=0;

PROTOKOŁY ŁĄCZA DANYCH C.D. // NIEOGRANICZONY PROTOKOL SIMPLEKSOWY // KANAL IDEALNY (BEZ BLEDOW) // ODBIORNIK NIESKONCZENIE SZYBKI typedef enum {frame_arrival} event_type; void sender() { frame s; // bufor dla ramki packet buffer; // bufor dla pakietu while(true) { from_network_layer(&buffer); // pobierz cos do wyslania s.info=buffer; // skopiuj do s w celu transmisji to_physical_layer(&s); // wyslij ramke } void reciver() frame r; event_type event; while (true) { wait_for_event(&event); // zdarzy sie tylko frame_arrival from_physical_layer(&r); // pobierz przychodzaca ramke to_network_layer(&r.info); // przekaz do warstwy sieciowej

PROTOKOŁY ŁĄCZA DANYCH C.D. // SIMPLEKSOWY PROTOKOL STOP-AND-WAIT // KANAL IDEALNY (BEZ BLEDOW) // ODBIORNIK O SKONCZONEJ SZYBKOSCI PRZETWARZANIA typedef enum {frame_arrival} event_type; void sender() { frame s; // bufor dla ramki packet buffer; // bufor dla pakietu event_type event; // zdarzy sie tylko frame_arrival while(true) { from_network_layer(&buffer); // pobierz cos do wyslania s.info=buffer; // skopiuj do s w celu transmisji to_physical_layer(&s); // wyslij ramke wait_for_event(&event); // czekaj na pozwolenie } void reciver() frame r,s; event_type event; while (true) { wait_for_event(&event); // zdarzy sie tylko frame_arrival from_physical_layer(&r); // pobierz przychodzaca ramke to_network_layer(&r.info); // przekaz do warstwy sieciowej to_physical_layer(&s); // obudz nadajnik

PROTOKOŁY ŁĄCZA DANYCH C.D. // PROTOKOL POTWIERDZEN POZYTYWNYCH Z RETRANSMISJA // KANAL Z BLEDAMI #define MAX_SEQ 1 typedef enum {frame_arrival, checksum_err, timeout} event_type; void sender() { seq_nr next_frame_to_send; // nr następnej ramki wy frame s; // bufor dla ramki packet buffer; // bufor dla pakietu event_type event; // tylko frame_arrival next_frame_to_send=0; // inicjuj nr seq wy from_network_layer(&buffer); // pobierz pierwszy pakiet while(true) { s.info=buffer; // skopiuj do s do transmisji s.seq=next_frame_to_send; // wstaw nr seq do ramki to_physical_layer(&s); // wyslij ramke start_timer(s.seq); // nie czekaj zbyt dlugo wait_for_event(&event); // czekaj na zdarzenie if (event==frame_arrival) { from_physical_layer(&s); // pobierz potwierdzenie if (s.ack==next_frame_to_send) { stop_timer(s.ack); // wylacz czasomierz from_network_layer(&buffer); // pobierz nastepny inc(next_frame_to_send); } void reciver() { seq_nr frame_expected; frame r,s; event_type event; frame_expected=0; while (true) { wait_for_event(&event); // czekaj na zdarzenie if (event==frame_arrival) { // dotarla ramka OK from_physical_layer(&r); // pobierz ramke if (r.seq==frame_expected) { to_network_layer(&r.info); // do warstwy sieciowej inc(frame_expected); // nastepny nr seq } s.ack=1-frame_expected; // nr ramki potwierdz. to_physical_layer(&s); // wyslij potwierdzenie

PROTOKOŁY ŁĄCZA DANYCH C.D. // DWUKIERUNKOWY PROTOKOL Z JEDNOBITOWYM OKNEM PRZESUWNYM #define MAX_SEQ 1 typedef enum {frame_arrival, checksum_err, timeout} event_type; void protocol() { seq_nr next_frame_to_send; // nr następnej ramki wy seq_nr frame_expected; // nr ramki oczekiwanej frame r,s; // bufory dla ramki packet buffer; // bufor dla pakietu event_type event; // zdarzenia next_frame_to_send=0; // inicjuj nr seq wy frame_expected=0; // oczekiwana ramka from_network_layer(&buffer); // pobierz pakiet s.info=buffer; // pierwsza ramki s.seq=next_frame_to_send; // wstaw nr seq do ramki s.ack=1-frame_expected; // ack na barana to_physical_layer(&s); // wyslij ramke start_timer(s.seq); // nie czekaj zbyt dlugo while(true) { wait_for_event(&event); // czekaj na zdarzenie if (event==frame_arrival) { // przyszla ramka from_physical_layer(&r); // pobierz ja if (r.seq==frame_expected) { to_network_layer(&r.info); //do w. sieciowej inc(frame_expected); } if (s.ack==next_frame_to_send) { stop_timer(r.ack); // wylacz czasomierz from_network_layer(&buffer); // pobierz nastepny inc(next_frame_to_send); s.info=buffer; // zbuduj ramke wy s.seq=next_frame_to_send; // nr seq do ramki s.ack=1-frame_expected; // ack na barana to_physical_layer(&s); // wyslij ramke start_timer(s.seq); // nie czekaj zbyt dlugo

PROTOKOŁY ŁĄCZA DANYCH C.D. TECHNIKA WRÓĆ DO „N” Interwał oczekiwania 1 2 3 4 5 6 7 8 2 3 4 5 ACK 0 ACK 1 ACK 2 ACK 3 1 E D D D D D D 2 3 4 BŁĄD Ramki odrzucane TECHNIKA POWTÓRZEŃ SELEKTYWNYCH 1 2 3 4 5 2 6 7 8 9 10 11 ACK 0 NAK 2 ACK 8 ACK 9 ACK 1 ACK 1 ACK 1 ACK 5 ACK 6 ACK 7 1 E 3 4 5 2 6 7 8 9 10 BŁĄD Ramki buforowane

PROTOKOŁY ŁĄCZA DANYCH C.D. // PROTOKOL Z OKNEM PRZESUWNYM MAX_SEQ I TECHNIKA WROC DO N #define MAX_SEQ 7 typedef enum {frame_arrival, checksum_err, timeout, network_layer_ready} event_type; static boolean between(seq_nr a, seq_nr b, seq_nr c) { if (((a<=b)&&(b<c))||((c<a)&&(a<=b))||((b<c)&&(c<a))) return true; else return false } static void send_data(seq_nr frame_nr, seq_nr frame_expected, packet buffer[]) frame s; s.info=buffer[frame_nr]; // wstaw pakiet do ramki s.seq=frame_nr; // wstaw nr seq do ramki s.ack=(frame_expected+MAX_SEQ)%(MAX_SEQ+1); // ack na barana to_physical_layer(&s); // wyslij ramke start_timer(frame_nr); // nie czekaj zbyt dlugo

PROTOKOŁY ŁĄCZA DANYCH C.D. // PROTOKOL Z OKNEM PRZESUWNYM MAX_SEQ I TECHNIKA WROC DO N, c.d. void protocol() { seq_nr next_frame_to_send; // nr następnej ramki wy seq_nr ack_expected; // najstarsza niepotwierdzona ramka seq_nr frame_expected; // nr ramki oczekiwanej frame r; // bufor dla ramki packet buffer[MAX_SEQ+1]; // bufory strumienia wy pakietow seq_nr nbuffered; // liczba aktualnie uzywanych buforow seq_nr i; // indeks buforow event_type event; // zdarzenia enable_network_layer(; // zezwol na network_layer_ready ack_expected=0; next_frame_to_send=0; // inicjuj nr seq wy frame_expected=0; // oczekiwana ramka nbuffered=0; while(true) { wait_for_event(&event); // czekaj na zdarzenie switch (event) { case network_layer_ready: from_network_layer(&buffer[next_frame_to_send]); // pobierz nastepny nbuffered++; send_data(next_frame_to_send,frame_expected,buffer); inc(next_frame_to_send); break;

PROTOKOŁY ŁĄCZA DANYCH C.D. // PROTOKOL Z OKNEM PRZESUWNYM MAX_SEQ I TECHNIKA WROC DO N, c.d. case frame_arrival: from_physical_layer(&r); // pobierz nastepny if (r.seq==frame_expected) { to_network_layer(&r.info); // przekaz do warstwy sieciowej inc(frame_expected); } while(between(ack_expected,r.ack,next_frame_to_send)) { nbuffered--; stop_timer(ack_expected); // wylacz czasomierz inc(ack_expected); break; case checksum_err: break; case timeout: next_frame_to_send=ack_expected; for (i=1;i<=nbuffered;i++) { send_data(next_frame_to_send,frame_expected,buffer); inc(next_frame_to_send); if (nbuffered<MAX_SEQ) enable_network_layer(); else disable_network_layer();