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

Slides:



Advertisements
Podobne prezentacje
Zdalne wywołania procedur
Advertisements

Jarosław Kuchta Semafory.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
Algorytmy – zapis struktur programowania
SIECI KOMPUTEROWE WYKŁAD 4. WARSTWA ŁĄCZA DANYCH
Języki programowania C++
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Dziel – Rządź - Złącz.
Wykład 3: Zasady Działania Protokołów Telekomunikacyjnych
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie wielowątkowe
Programowanie w C Wykład 3
Instytut Informatyki Teoretycznej i Stosowanej Polskiej Akademii Nauk Gliwice, ul. Bałtycka 5, Protokół TCP – kształtowanie.
Techniki programowania gier
Przełączanie OSI warstwa 2
RODZAJE TRANSMISJI PRZESYŁANIE INFORMACJI W MODELU WARSTWOWYM
Programowanie strukturalne i obiektowe
C# Platforma .NET CZ.3 Kuba Ostrowski.
INSTRUKCJE Umożliwiają zapis algorytmu, służą do sterowania przebiegiem programu. warunkowe (podejmowanie decyzji) 1. if-else „jeżeli”, 2. switch-case.
Gramatyki i translatory
Warstwa łącza danych.
PWSZ Gniezno // codefly 2009 Łukasz Tomczak
  ELEMENTY JĘZYKA JAVA komentarze w Javie, słowa kluczowe i operatory, proste typy danych, tablice, podstawowy zestaw instrukcji.
Dobry kod OO Jeżeli zapytamy statystycznego programistę z czym kojarzy mu się dobry kod OO to najprawdopodobniej będzie mówił o wzorcach projektowych.
Iteracje w C# Informatyka Cele lekcji: Wiadomości: Uczeń potrafi:
1 Zagadnienia na egzamin. 2 Język C podsumowanie Struktura programu w języku C Zmienne, Stałe Operacje arytmetyczne Operatory logiczne Priorytety operatorów.
Języki formalne Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
FORMAT WYMIANY DANYCH GEODEZYJNYCH TANAGO. TANGO V. 1.
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
Przeglądarki internetowe. Funkcje i możliwości przeglądarek.
20/09/ Model warstwowy OSI. Model warstwowy OSI (Open Systems Interconnection ) – standard wprowadzony przez organizację ISO (International Organization.
Model warstwowy OSI Model OSI (Open Systems Interconnection) opisuje sposób przepływu informacji między aplikacjami programowymi w jednej stacji sieciowej.
Sieci komputerowe. Podział sieci. Podstawowe pojęcia związane z sieciami. Internet - określenia podstawowych terminów. Komunikacja w sieci.
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy sekwencyjne.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
Fizyczne aspekty przesyłania informacji w neuronach Jakub Kwiecień Michał Bogdan Koło Naukowe Fizyków „Migacz” Uniwersytet Wrocławski.
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C
TEMAT: Omówienie programu Twido Soft i jego podstawowe możliwości
STEROWANIE RUCHEM METODĄ OKNA – SIEĆ PAKIETOWA
Programowanie Obiektowe – Wykład 1
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Przeglądarka stron WWW
Zasady transmisji w sieciach TCP/IP
Model ISO/OSI Wykład 4.
Transmisja radiowa Arduino & nRF24L01P
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Przetwarzanie języka Wprowadzenie do informatyki Jerzy Nawrocki
Wstęp do Informatyki - Wykład 3
Kurs języka C++ – wykład 13 ( )
Routing statyczny Sieci IP: / /24
Bezprzewodowa sieć EnOcean
Obliczenia w Matlabie Operatory, instrukcje sterujące, operacje bitowe
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Sieci komputerowe Protokół TCP/IP.
PAMIĘĆ mgr Jarosław Strzelecki D N I NAUKI OLSZTYN 2006.
dr hab. inż. Andrzej Bęben, pok. 336a
Sensory i ich interfejsy
Dane, zmienne, instrukcje
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Transmisja radiowa Arduino & nRF24L01P
Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Autor: Magdalena Linowiecka
Asynchroniczne operacje I/O za pomocą IOCP
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();