Sygnalizacyjne ABC

Poniższy artykuł oparty jest na wspaniałej pozycji książkowej “System Sygnalizacji nr 7 G. Danielewicz, W.Kabaciński”. Gorąco zachęcam do lektury!!:)

Sterowanie

W wiekszości przypadków jeżeli coś działa dłużej niż okres potrzebny na zaparzenie herbaty to znaczy, że coś nim steruje. Podobnie jest w telekomunukacji, wszystko co dzieje sie w sieci wynika i jest oparte na przesyłaniu i wymianie informacji sterujących pomiędzu jej elementami. Siec telekomunikacyjna jest przykladem sieci zorientowanej polaczeniowo, tzn takiej w ktorej zanim dojdzie do wymiany danych, zarówno w fazie zestawiania jak i rozlaczania połaczenia, realizowana jest wymiana informacji sterujących. Proces za pomocą, którego przekazywane są informacje sterujące nazywamy sygnalizacja.

W telekomunikacji podstawowym zastosowaniem sygnalizacji jest zestawienie połaczenia pomiedzy dwoma abonentami. Nomenklatura nazywa abonenta inicjującego połacznie jako ‘abonenta wywołującego’ a abonenta do którego kierowanie jest połaczenie abonentem wywoływanym. Podobnie w przypadku central (punktów przyłaczenia do sieci) do których dołaczeni są abonenci, centrala wywołująca i wywoływaną. Nawiązanie połaczenia wymaga sygnalizacji pomiedzy:

  • abonentem wywołującym a cetrala wywołującą
  • abonentem wywoływanym a centralą wywoływaną
  • miedzy centrala wywołujacą i wywoływana bezpośrednio lub poprzez inne centrale

Funkcje i rodzaje sygnalizacji

Funkcje i rodzaje sygnalizacji zmieniały się na przestrzeni czasu wraz z rozwojem i ewolucja technologiczną. Niegdyś abonent chcąc nawiązać połaczenie podnosił sluchawke telefoniczną i krecił metalową korbką. To indukowało prąd, który powodował zapelenie się malej lampki w centrali ‘manualnej’ obsługiwanej przez grupę procesorów płci pięknej. Taka pani podłączała swoją sluchawkaę do drugiego konca przewodu i rozpoczynała “obsługę zgłoszenia w centrali”. Dowiadywała się od delikwenta gdzie chce się dodzwonić, po czym odłaczała swoją słuchawkę i za pomocą krótkiego drutu łaczyła dwa odpowiednie przewody.

Z pośród wielu różnych kryteriów za pomocą, których moglibyśmy sklasyfikować sygnalizacje dwa bezwątpienia najważniejsze to funkcje jakie realizuje w danym kontekscie oraz obszar ich zastosowania.

Funkcje

Sygnalizacja spełni trzy zasadnicze funckje:

  • adresową – jest odpowiedzialna za przekazywanie w sieci informacji adresowych dotyczących abonenta wywoływanego. Informacje adresowe zawierają wskazany przez abonenta wywołujacego identyfikator abonenta wywoływanego. Najcześciej identyfikator ten jest podstawą do kierowania sygnalizacji pomiedzy kolejnymi elementami w sieci.
  • nadzorczą – jest odpowiedzialna za kontrolowanie stanu łacza, wykrywa zmiany i przekazuje informacje z nimi związane
  • zarządzającą – jest odpowiedzialna za przesyłanie informacji służacej do zarządzania łączami

Obszar funkcjonowania

Z zależności od obaszaru funkcjonowania syganlizację dzieli się na:

  • abonencką – obejmuje wymianę informacji sterujących pomiędzy centralą i abonentem
  • międzycentrolową – obejmuje wymianę informacji sterujących pomiędzy centralami biorącymi udział w połaczeniu
  • wewnątrz centralowa – jest to wymiana informacji pomiędzy wewnętrznymi komponentami centrali

Zarówno sygnalizacja abonencka jak i między centralowa są objęte przez procesy standaryzacyjne na poziomie międzynarodowym i krajowym, natomiast sygnalizacja wewnątrz centralowa jest niezależnym rozwiązanie danego producenta.

Typy sygnalizacji

Biorąc pod uwagę inne aspekty sygnalizacji związane z jej własciwościami fizycznymi można dokonać ponownej klasyfikacji za pomocą dwóch kryteriów, rodzaju syganału oraz zależności pomiedzy informacjami sterujacymi a danymi.

Rodzaj sygnału

W zależności od tego kryterium możemy wyróżnić dwa rodzaje sygnałów analogowe i cyfrowe.

Sygnały analogowe do przesyłania informacji wykorzystują sygnał analogowy, który może być prądem stałym lub przemiennym o określonej czestotliowśći lub złożonym z większej liczby sygnałów o danych częstotliwościach. W przypadku sygnalizacji prądem stałym informacja może być przesyłana w postaci obecności lub braku prądu oraz poprzez kierunek jego przepływu. W przypadku sygnalizacji prądem przemiennym informacje mogą być przekazywane za pomocą obecności lub braku sygnału oraz jako jego częstotliwość lub kombinacja zbioru częstotliwości. Jeśli częstotliwość sygnalizacji mieści sie w pasmie sygnału danych to jest to tak zwana sygnalizacja w pasmie jeśli nie to poza pasmem.

W przypadku gdy sygnalizacja przyjmuje postać cyfrową jest ona przesyłana w postaci ciągów bitów. O systemach w których informacje przesyłane są w postaci cyfrowej mówimy systemy transmisji cyfrowej. W takich systemach dane transmitowane są w  określonej szczelinie czasowej, w której w zależności od szybkości łacza umieszczane są paczki bitów. Taka przydzieloną szczelinę nazywamy kanałem. Jeśli w ramach takiej szczeliny określona liczba bitów zarezerwowana jest dla informacji sygnalizacyjnych to mamy do czynienia z sygnalizacją w szczelinie natomiast jesli na potrzebę sygnalizacji rezerowana jest niezależna szczelina to mowimy o sygnalizacji poza szczeliną.

Media

Kluczowym aspektem sygnalizacji jest powiązanie pomiędzy przesyłanymi informacjami sygnalizacyjnymi a mediami czyli danymi.  Przesyłanie informacji sygnalizacyjnych może być skojarzone z łaczem danych lub nie. W zależności od charakterystyki skojarzenia sygnalizację dzielimy na skojarzona z kanałem lub we wspólnym kanale. W sygnalizacji skojarzonej z kanałem dla każdego kanału przydzielane są zasoby transmisyjne do przesyłania informacji sterujących związanych wyłacznie z tym łaczem. W sygnalizacji ze wspólnym kanałem zasoby dla informacji sygnalizacyjnych są współdzielone przez wiele kanałów danych. W przypadku gdy mamy do czynienia z całkowitym oddzieleniem sygnalizacji od danych mowimy, że sieć jest podzialona na dwie niezależne warstwy sterująca i transportu danych.

CD..?

W kolejnych postach dokładniej opisze poszczególne formy sygnalizacji ze względu na obszar funckjonowania.

You May Also Like

Custom SonarQube rules for Unit Tests

It's a tutorial about creating new rules for SonarQube analysis to be applied to Unit Tests. It is not trivial and involves a few tricky database steps, so I want to share my tutorial about it.It's a tutorial about creating new rules for SonarQube analysis to be applied to Unit Tests. It is not trivial and involves a few tricky database steps, so I want to share my tutorial about it.

Log4j and MDC in Grails

Log4j provides very useful feature: MDC - mapped diagnostic context. It can be used to store data in context of current thread. It may sound scary a bit but idea is simple.

My post is based on post http://burtbeckwith.com/blog/?p=521 from Burt Beckwith's excellent blog, it's definitely worth checking if you are interested in Grails.

Short background story...


Suppose we want to do logging our brand new shopping system and we want to have in each log customer's shopping basket number. And our system can be used at once by many users who can perform many transactions, actions like adding items and so on. How can we achieve that? Of course we can add basket number in every place where we do some logging but this task would be boring and error-prone. 

Instead of this we can use MDC to store variable with basket number in map. 

In fact MDC can be treated as map of custom values for current thread that can be used by logger. 


How to do that with Grails?


Using MDC with Grails is quite simple. All we need to do is to create our own custom filter which works for given urls and puts our data in MDC.

Filters in Grails are classes in directory grails-app/conf/* which names end with *Filters.groovy postfix. We can create this class manually or use Grails command: 
grails create-filters info.rnowak.App.Basket

In result class named BasketFilters will be created in grails-app/conf/info/rnowak/UberApp.

Initially filter class looks a little bit empty:
class BasketFilters {
def filters = {
all(controller:'*', action:'*') {
before = {

}
after = { Map model ->

}
afterView = { Exception e ->

}
}
}
}
All we need to do is fill empty closures, modify filter properties and put some data into MDC.

all is the general name of our filter, as class BasketFilters (plural!) can contain many various filters. You can name it whatever you want, for this post let assume it will be named basketFilter

Another thing is change of filter parameters. According to official documentation (link) we can customize our filter in many ways. You can specify controller to be filtered, its actions, filtered urls and so on. In our example you can stay with default option where filter is applied to every action of every controller. If you are interested in filtering only some urls, use uri parameter with expression describing desired urls to be filtered.

Three closures that are already defined in template have their function and they are started in these conditions:

  • before - as name says, it is executed before filtered action takes place
  • after - similarly, it is called after the action
  • afterView - called after rendering of the actions view
Ok, so now we know what are these mysterious methods and when they are called. But what can be done within them? In official Grails docs (link again) under section 7.6.3 there is a list of properties that are available to use in filter.

With that knowledge, we can proceed to implementing filter.

Putting something into MDC in filter


What we want to do is quite easy: we want to retrieve basket number from parameters and put it into MDC in our filter:
class BasketFilters {
def filters = {
basketFilter(controller:'*', action:'*') {
before = {
MDC.put("basketNumber", params.basketNumber ?: "")
}
after = { Map model ->
MDC.remove("basketNumber")
}
}
}
}

We retrieve basket number from Grails params map and then we put in map under specified key ("basketNumber" in this case), which will be later used in logger conversion pattern. It is important to remove custom value after processing of action to avoid leaks.

So we are putting something into MDC. But how make use of it in logs?


We can refer to custom data in MDC in conversion patter using syntax: %X{key}, where key is our key we used in filter to put data, like:
def conversionPattern = "%d{yyyy-MM-dd HH:mm:ss} %-5p %t [%c{1}] %X{basketNumber} - %m%n"


And that's it :) We've put custom data in log4j MDC and successfully used it in logs to display interesting values.