Zadanie zaliczeniowe na laboratorium z sieci komputerowych 1. Cel zadania NaleĹźy zaprojektowaÄ i zaimplementowaÄ protokóŠsterujÄ cy poĹÄ czeniami telefonicznymi w sieci IP. ProtokóŠma umoĹźliwiaÄ imitacjÄ dziaĹania typowej biurowej centralki telefonicznej. Przy czym bÄdziemy siÄ zajmowaÄ gĹĂłwnie wymianÄ informacji, ktĂłre umoĹźliwiajÄ realizacjÄ takich poĹÄ czeĹ gĹosowych i ewentualnie symulowaÄ przesyĹanie gĹosu. Sterowanie ma byÄ rozproszone, bez centralnego serwera. 2. Podstawowe pojÄcia W dalszej czÄĹci tego opisu *protokoĹem* nazywamy projektowany protokóŠsĹuĹźÄ cy do sterowania poĹÄ czeniami telefonicznymi w sieci IP. PoĹÄ czenie telefoniczne nazywamy dalej *poĹÄ czeniem*. PoĹÄ czenie skĹada siÄ z dwĂłch logicznych kanaĹĂłw: *sterujÄ cego* i *gĹosowego*. Oba kanaĹy sÄ dwukierunkowe. KanaĹ sterujÄ cy sĹuĹźy do wymiany informacji sterujÄ cych poĹÄ czeniem. KanaĹ gĹosowy sĹuĹźy do transmisji gĹosu. KanaĹ sterujÄ cy i gĹosowy mogÄ uĹźywaÄ tego samego lub róşnych mechanizmĂłw transportowych. JeĹźeli kanaĹ sterujÄ cy i gĹosowy uĹźywajÄ tego samego mechanizmu transportowego, to mogÄ uĹźywaÄ dwĂłch niezaleĹźnych kanaĹĂłw transportowych lub byÄ multipleksowane w jednym kanale transportowym. Proces budowania poĹÄ czenia (kanaĹu) nazywamy *zestawianiem*. Proces koĹczenia istnienia poĹÄ czenia (kanaĹu) nazywamy *rozĹÄ czaniem*. OfertÄ zestawienia poĹÄ czenia nazywamy *wywoĹaniem*. Zestawianie poĹÄ czenia rozpoczyna siÄ wywoĹaniem, a koĹczy zestawieniem kanaĹu gĹosowego lub rozĹÄ czeniem, gdy nie dojdzie do zestawienia kanaĹu gĹosowego. RozĹÄ czenie poĹÄ czenia oznacza rozĹÄ czenie wszystkich zestawionych w tym poĹÄ czeniu kanaĹĂłw. *Abonentem* nazywamy uĹźytkownika instancji protokoĹu. *Identyfikatorem* abonenta i zarazem instancji protokoĹu jest adres IP (lub nazwa hosta) i numer portu. KaĹźdy abonent posiada zadanÄ z gĂłry i staĹÄ liczbÄ wirtualnych linii telefonicznych, w skrĂłcie WLT. KaĹźda WLT umoĹźliwia prowadzenie jednego poĹÄ czenia. WLT jest *wolna*, jeĹli nie uczestniczy w Ĺźadnej aktywnoĹci zwiÄ zanej z zestawianiem, prowadzeniem lub rozĹÄ czaniem poĹÄ czenia. WLT jest *zajÄta*, jeĹli nie jest wolna. Abonent jest *wolny*, jeĹli posiada co najmniej jednÄ wolnÄ WLT. Abonent jest *zajÄty*, gdy wszystkie jego WLT sÄ zajÄte. Abonenta inicjujÄ cego poĹÄ czenie nazywamy abonentem *wywoĹujÄ cym*. Abonenta, do ktĂłrego kierowane jest poĹÄ czenie, nazywamy abonentem *wywoĹywanym*. MĂłwimy, Ĺźe dwaj abonenci sÄ *poĹÄ czeni*, gdy doszĹo do zestawienia miÄdzy nimi kanaĹu gĹosowego. 3. Opis funkcjonalnoĹci, ktĂłrÄ powinien realizowaÄ protokóŠZadaniem protokoĹu jest obsĹuga poĹÄ czeĹ. ProtokóŠmusi kanaĹem sterujÄ cym wymieniaÄ informacje niezbÄdne do zestawiania i rozĹÄ czania kanaĹu gĹosowego. ProtokóŠnie zajmuje siÄ zawartoĹciÄ kanaĹu gĹosowego. 3.A. Zestawianie poĹÄ czenia W celu zestawienia poĹÄ czenia wolny abonent wywoĹujÄ cy wybiera jednÄ ze swoich wolnych WLT i wprowadza identyfikator abonenta wywoĹywanego. JeĹli abonent wywoĹywany jest zajÄty, to jest to sygnalizowane abonentowi wywoĹujÄ cemu, a wywoĹanie zostaje zakoĹczone. JeĹli abonent wywoĹywany jest wolny, to jest to sygnalizowane abonentowi wywoĹujÄ cemu na wybranej przez niego WLT, a abonentowi wywoĹywanemu jest to sygnalizowane na jednej z jego wolnych WLT. Abonent wywoĹywany moĹźe odrzuciÄ lub odebraÄ sygnalizowane mu wywoĹanie. Odrzucenie wywoĹania jest sygnalizowane abonentowi wywoĹujÄ cemu i prowadzi do zakoĹczenia wywoĹania. JeĹli abonent wywoĹywany odbierze wywoĹanie, to zostaje utworzony kanaĹ gĹosowy - abonenci zostajÄ poĹÄ czeni. Abonent wywoĹujÄ cy moĹźe zrezygnowaÄ zanim abonent wywoĹywany odbierze wywoĹanie, co skutkuje zakoĹczeniem wywoĹania. NaleĹźy zwrĂłciÄ uwagÄ na moĹźliwoĹÄ rĂłwnoczesnego odebrania wywoĹania przez abonenta wywoĹywanego i rezygnacji z wywoĹania przez abonenta wywoĹujÄ cego. 3.B. RozĹÄ czanie poĹÄ czenia Gdy abonenci sÄ poĹÄ czeni, to obaj abonenci wywoĹujÄ cy i wywoĹywany mogÄ zainicjowaÄ rozĹÄ czanie poĹÄ czenia. RozĹÄ czenie jest sygnalizowane obu abonentom i prowadzi do zakoĹczenia poĹÄ czenia oraz zwolnienia obu WLT biorÄ cych udziaĹ w poĹÄ czeniu. NaleĹźy zwrĂłciÄ uwagÄ na moĹźliwoĹÄ rĂłwnoczesnego zainicjowania rozĹÄ czania przez obu abonentĂłw. 3.C. Zawieszanie i odwieszanie poĹÄ czenia Gdy abonenci sÄ poĹÄ czeni, to dowolny z nich moĹźe zawiesiÄ poĹÄ czenie. Zawieszenie poĹÄ czenia oznacza rozĹÄ czenie kanaĹu gĹosowego (abonenci przestajÄ siÄ sĹyszeÄ). Zawieszone poĹÄ czenie moĹźe byÄ odwieszone przez abonenta, ktĂłry je zawiesiĹ lub rozĹÄ czone przez abonenta, ktĂłry go nie zawiesiĹ. Odwieszenie powoduje ponowne zestawienie kanaĹu gĹosowego. Zawieszenie poĹÄ czenia nie powoduje zwolnienia WLT. NaleĹźy zwrĂłciÄ uwagÄ na moĹźliwoĹÄ rĂłwnoczesnego zainicjowania odwieszania i rozĹÄ czania. 3.D. Grupy abonentĂłw Kilku abonentĂłw moĹźe tworzyÄ grupÄ. Grupa abonentĂłw posiada wspĂłlne wszystkie WLT. WywoĹanie grupy nastÄpuje przez wywoĹanie dowolnego abonenta naleĹźÄ cego do tej grupy. WywoĹania sygnalizowane jest wszystkim abonentom w grupie. Odbieranie i odrzucanie wywoĹania skierowanego do grupy dokonuje siÄ na zasadzie "kto pierwszy ten lepszy". WywoĹywanie innych abonentĂłw i rozĹÄ czanie poĹaczeĹ przez abonenta bÄdÄ cego w grupie odbywa siÄ identycznie jak przez abonenta niebÄdÄ cego w grupie. PoĹÄ czenie zawieszone przez jednego z abonentĂłw w grupie moĹźe zostaÄ odwieszone (przejÄte) przez innego abonenta z tej samej grupy. Zmiany stanu poszczegĂłlnych WLT sÄ sygnalizowane u wszystkich abonentĂłw w grupie. ProtokóŠnie ma sĹuĹźyÄ do konfigurowania grup. PrzynaleĹźnoĹÄ do grupy ma byÄ konfigurowana w warstwie aplikacji i zakĹadamy, Ĺźe zawsze jest spĂłjna. NaleĹźy zwrĂłciÄ szczegĂłlnÄ uwagÄ na rozstrzyganie konfliktĂłw powstajÄ cych przy prĂłbie rĂłwnoczesnego wykonania operacji na tej samej WLT przez dwĂłch abonentĂłw z tej samej grupy. NaleĹźy teĹź zwrĂłciÄ uwagÄ, Ĺźe abonent bÄdÄ cy w grupie moĹźe wywoĹaÄ innego abonenta w tej samej grupie. 4. Uwagi odnoĹnie wykonania zadania Projekt protokoĹu ma byÄ wykonany zgodnie z zasadami opisanymi w dokumencie opis-protokolow.txt. Trzeba teĹź zaprojektowaÄ sposĂłb realizacji (mechanizm transportowy) kanaĹĂłw sterujÄ cego i gĹosowego. Przy projektowaniu protokoĹu trzeba mieÄ na uwadze, Ĺźe druga strona komunikacji moĹźe nigdy nie odpowiedzieÄ na wysĹanÄ wiadomoĹÄ. Trzeba wiÄc przewidzieÄ mechanizm przekraczania dopuszczalnego czasu oczekiwania na odpowiedĹş (ang. timeout). W niektĂłrych sytuacjach, np. oczekiwanie na odebranie poĹÄ czenia, moĹźna takiego mechanizmu nie projektowaÄ i zdaÄ siÄ na cierpliwoĹÄ abonenta. NaleĹźy napisaÄ prostÄ aplikacjÄ uĹźywajÄ cÄ zaprojektowanego protokoĹu. Implementacja protokoĹu powinna byÄ wykonana jako oddzielny moduĹ. Aplikacja powinna mieÄ prosty i intuicyjny interfejs uĹźytkownika oraz umoĹźliwiaÄ testowanie dziaĹania protokoĹu, w szczegĂłlnoĹci wyĹwietlaÄ informacje o wymienianych komunikatach. Aplikacja powinna zestawiaÄ kanaĹ gĹosowy i dla celĂłw testowych przesyĹaÄ nim napisy wpisywane z klawiatury. Zalecane jest, aby aplikacja byĹa konfigurowana za pomocÄ pliku zawierajÄ cego: - liczbÄ WLT abonenta, - fakt przynaleĹźnoĹci do grupy wraz z listÄ identyfikatorĂłw abonentĂłw w grupie, - ksiÄ ĹźkÄ telefonicznÄ - listÄ identyfikatorĂłw innych abonentĂłw. 5. Uwagi dodane po ogĹoszeniu treĹci zadania MoĹźna dzwoniÄ do samego siebie, o ile posiada siÄ co najmniej dwie WLT. Jedna z tych linii sĹuĹźy do wykonania wywoĹania, a druga do odebrania wywoĹania. Na tej samej zasadzie moĹźna zadzwoniÄ do abonenta bÄdÄ cego w tej samej grupie. Abonenci w grupie majÄ wszystkie WLT wspĂłlne. Stan poszczegĂłlnych WLT jest sygnalizowany u wszystkich abonentĂłw w grupie. W szczegĂłlnoĹci jeĹli abonent naleĹźÄ cy do grupy uĹźywa WLT do wywoĹania innego abonenta, to jest to odpowiednio sygnalizowane (WLT jest zajÄta) u innych abonentĂłw z tej grupy. Trzeba zaĹoĹźyÄ, Ĺźe wszystkie komputery w grupie dziaĹajÄ , bo problem uzgadniania (konsensusu), gdy komputery nagle przestajÄ dziaĹaÄ jest bardzo trudny algorytmicznie. Jedyne co byÄ moĹźe warto wymusiÄ, to Ĺźe sÄ jakieĹ timeouty. Tzn. jeĹli siÄ wyĹle komunikat do komputera, a on np. nie dziaĹa, to nie czekamy na potwierdznie w nieskoĹczonoĹÄ, tylko informujemy uĹźytkownika, Ĺźe coĹ jest Ĺşle i resetujemy stan protokoĹu, zwalniamy zasoby itd. MoĹźna oczywiĹcie zaprojektowaÄ protokóŠnie uĹźywajÄ cy potwierdzeĹ, ale sÄ sytuacje, w ktĂłrych potwierdzenie jest konieczne, np.: komunikacja za pomocÄ UDP, negocjowanie WLT w grupie, przejmowanie poĹÄ czenia w grupie.