SKM2 – projekt: specyfikacja wstępna
Transkrypt
SKM2 – projekt: specyfikacja wstępna
27.11.2006 Marek Szyprowski Marcin Goliszewski SKM2 – projekt: specyfikacja wstępna Treść zadania Przy pomocy języka ESTELLE zaprojektować, zasymulować i porównać wydajności 2 protokołów: protokołu wykorzystującego technikę przesuwnego okna i potwierdzenie pozytywne pozycji w oknie oraz protokołu wykorzystującego technikę przesuwnego okna i potwierdzenie pozytywne pakietu w oknie. Przyjąć arbitralnie rozmiary okien. Ramki protokołu wyspecyfikować przy pomocy notacji ASN.1. Na podstawie specyfikacji, za pomocą odpowiedniego narzędzia, wygenerować kod wczytujący i zapisujący ww. struktur. Wstęp Projektujemy 2 protokoły, które różnią się sposobem potwierdzania. Protokół A wykorzystuje potwierdzanie pakietu w oknie (potwierdzanie każdego pakietu), a protokół B – potwierdzanie pozytywne pozycji w oknie (potwierdzenie bajtu nr x oznacza jednocześnie potwierdzenie wszystkich bajtów o numerach mniejszych od x). Ponieważ oba protokoły są do siebie bardzo podobne, tworzymy ich wspólną specyfikację, w której zaznaczone będą różnice pomiędzy obydwoma protokołami. Przyjęte typy komunikatów Przyjęliśmy, że w protokołach występować będą następujące typy komunikatów: ● CON (id: integer) – nawiązanie połączenia ● CONACK (id: integer) – akceptacja połączenia ● DATA (id: integer, seqnum: integer, data: array of byte) – przesłanie danych ● ACK (id: integer, seqnum: integer) – potwierdzenie danych ● FIN (id: integer) – zakończeni połączenia Parametr id pozwala na odróżnienie komunikatów z kilku różnych połączeń obsługiwanych jednocześnie. Parametr seqnum oznacza numer sekwencyjny pakietu lub bajtu danych. W komunikacie DATA oznacza numer nadawanych danych, a w komunikacie ACK potwierdzanych. Parametr data przenosi dane. Założenia projektowe 1. Komunikacja rozpoczyna się od nadania komunikatu CON i komunikatu zwrotnego – potwierdzenia nawiązania połączenia CONACK z identyfikatorem połączenia takim samym jak w komunikacie CON. 2. W przypadku zagubienia komunikatu CON po ustalonym czasie (CONACK TIMEOUT) następuje ponowna próba nawiązania połączenia. Jeżeli połączenia nie udało się nawiązać po czasie CONACKWAIT TIMEOUT klient rezygnuje z próby połączenia. 3. W przypadku zagubienia komunikatu CONACK a co za tym idzie nie otrzymaniu jakiegokolwiek pakietu z danymi od nadawcy po określonym czasie (CONNECTION TIMEOUT) odbiorca uznaje połączenie za zerwane. 4. Nadawca kończy połączenie wysyłając komunikat FIN lub nie otrzyma żadnego potwierdzenia od odbiorcy w określonym czasie (CONNECTION TIMEOUT). Odbiorca kończy połączenie jeżeli otrzyma komunikat FIN lub dane nie przyjdą w określonym czasie (CONNECTION TIMEOUT). 5. Komunikacja jest jednostronna – po nawiązaniu połączenia dane są przesyłane tylko od nadawcy do odbiorcy, a potwierdzenia w stronę przeciwną. 6. Zaraz po nawiązaniu połączenia (pomyślne przesłanie komunikatów CON i CONACK) są wysyłane komunikaty z danymi. 7. Każdy kolejny komunikat z danymi jest wysyłany z kolejnym numerem sekwencyjnym. 8. Stosowana jest technika przesuwnego okna – nadawca nie musi czekać na potwierdzenie wysłanego komunikatu, może nadać maksymalnie tyle komunikatów, ile mieści się w oknie. 9. Rozmiar okna jest taki sam dla nadawcy i odbiorcy i ustala się go arbitralnie na poziomie implementacji. Wyraża on: ● protokół A: ilość pakietów ● protokół B: ilość bajtów 10. Nadawca wysyła wszystkie dane, które są w danej chwili są do wysłania, jednocześnie: ● protokół A: wysyłany jest ciągły ciąg danych od początku okna aż do ostatniego pakietu przed pierwszym pakietem niepotwierdzonym znajdującym się w oknie ● protokół B: wysyłane są wszystkie dane z okna 11. Odbiorca potwierdza: ● protokół A: każdy otrzymany komunikat (pakiet). ● protokół B: ostatni otrzymany bajt z ciągłej sekwencji bajtów otrzymanych w określonym odstępie czasu (ACKDELAY TIMEOUT) od otrzymania pierwszego bajtu z tej sekwencji lub zapełnieniu okna. 12. Otrzymanie potwierdzenia oznacza: ● protokół A: poprawne odebranie pakietu o podanym numerze sekwencyjnym. ● protokół B: poprawne odebranie wszystkich bajtów do bajtu o zadanym numerze. 13. Gdy nadawca otrzyma potwierdzenie, przesuwa swoje okno o najdłuższy możliwy ciągły zakres danych z początku okna. W protokole A dodatkowo oznaczane jako potwierdzone są pakiety nie należące do tego zakresu, a też potwierdzone. Następnie powstałe w ten sposób wolne miejsce na końcu okna zapełniane jest nowymi komunikatami, przy zachowaniu warunku, że w każdej chwili niepotwierdzone dane mieszczą się w oknie. 14. Niepotwierdzone będą retransmitowane po upływie pewnego ustalonego czasu (ACK TIMEOUT). Po jego upływie retransmitowane są wszystkie niepotwierdzone dane. Dla uproszczenia sterowania protokołem przyjmujemy, że czas nie jest liczony dla poszczególnych danych osobno, tylko dla całej grupy danych dany wysłanych z jednego okna (założenie, że zawartość okna wysłana była w tym samym momencie). 15. Potwierdzenia, w przypadku zagubienia, nie są retransmitowane – musi nastąpić retransmisja danej ramki, aby otrzymać ponowne potwierdzenie. 16. Otrzymanie danych, które zostały już potwierdzona skutkuje nadaniem ich kolejnego potwierdzenia. Specyfikacja PDU w postaci struktur ASN.1 DatagramType ::= ENUMERATED { connect(1), conack(2), data(3), ack(4), fin(5) } Datagram ::= SEQUENCE { type DatagramType, connection_id INTEGER, sequence_number INTEGER, data OCTET STRING } Poszczególne pola oznaczają: ● type – rodzaj ramki, który może przyjąć następujące wartości: connect – ramka nawiązująca połączenie, conack – ramka potwierdzająca nawiązanie połączenia, data – ramka niosąca dane, ack – ramka potwierdzająca odebranie danych, fin – ramka kończąca połączenie, ● connection_id – numer identyfikacyjny połączenia, ● sequence_number – numer sekwencyjny danych w pakiecie (ramka DATA) lub numer potwierdzanej ramki (ramka ACK), ● data – przesyłane dane. Schemat działania protokołu A Przyjęte oznaczenia: przejścia między stanami mają postać „warunek / akcja” bez nawiasów napisane są otrzymane i nadawane komunikaty w nawiasach <> są warunki i akcje związane z odliczaniem czasu (skrót „T.” oznacza timeout) ● w nawiasach [] są warunki i akcje związane z danymi i buforami nadawczymi i odbiorczymi ● sytuacje nie przedstawione na diagramach są ignorowane ● ● ● Nadawca: idle / CON <start CONACK T.> <start CONACKWAIT T.> <CONACK T.> / CON conack wait <CONACKWAIT T.> / CONACK / <start CONNECTION T.> <CONNECTION T.> / / FIN connected / [w ypełnienie danymi w olnej przestrzeni w oknie] <ACK T.> or [okno puste] / [przesunięcie okna do pierw szego niepotw iedzonego pakietu] DATA - [tylko niepotw ierdzone pakiety z okna] <start ACK T.> data sent ACK / <start CONNECTION T.> [oznaczenie potw ierdzonych pakietów w oknie] Odbiorca: idle CON / CONACK <start CONNECTION T.> FIN / <CONNECTION T.> connected DATA / ACK <start CONNECTION T.> Schemat działania protokołu B Nadawca: idle / CON <start CONACK T.> <start CONACKWAIT T.> <CONACK T.> / CON conack wait <CONACKWAIT T.> / CONACK / <start CONNECTION T.> <CONNECTION T.> / / FIN connected / [w ypełnienie danymi w olnego miejsca w oknie] <ACK T.> or ACK / <start CONNECTION T.> [przesunięcie okna za ostatni potw ierdzony bajt] DATA <start ACK T.> data sent Odbiorca: idle CON / CONACK <start CONNECTION T.> FIN / <CONNECTION T.> connected DATA / <start ACKDELAY T.> <start CONNECTION T.> [umieszczenie otrzymanych danych w buforze] <ACKDELAT T.> or [bufor pełny ] / [w yznaczenie ostatniego bajta z odebranej ciągłej sekw encji danych] ACK collecting data DATA / [umieszczenie otrzymanych danych w buforze]