Jak zarządzać sesjami przez UDP dla pośredniego serwera pomostowego między wieloma klientami a serwerem cła? - Linux, programowanie sieciowe, udp

Muszę wykonać most jak na poniższej ilustracji. To tylko serwer UDP, który odbiera pakiety od klientów, przekazuje je na inny serwer. Scenariusz zostanie dobrze zrozumiany na rysunku.

+--------+sendto()  recvfrom()+-----------+
| client |------------------->|           |                         +-------------+
|        |        1           | bridge    |sendto()      recvfrom() |             |
|        |                    |           |------------------------>|    duty     |
|        |                    |           |           2             |   server    |
|        |                    |           |recvfrom()      sendto() | processing  |
|        |                    |           |<------------------------|             |
|        |recvfrom()  sendto()|           |            3            |             |
|        |<-------------------|           |                         +-------------+
+--------+         4          +-----------+

Oto funkcja wysyłania i odbierania danychsą pisane wzdłuż boku urządzenia. Procesy komunikacyjne są identyfikowane numerami 1,2,3 i 4, pod znakami strzałek. Próbowałem narysować rysunek w taki sposób, aby mógł reprezentować oś czasu: od góry do dołu.

Teraz przejdź do rzeczy.Kiedy mam tylko jednego klienta do zarządzania, jest to dość łatwe zadanie. Ale załóżmy, że numer klienta może być wiele. Załóżmy, że klienci są telefonami podłączonymi do Internetu za pomocą dialera, a serwer jest serwerem SIP z uruchomionym Asterisk / Freeswitch lub czymś podobnym. W takim scenariuszu może być obecnych wielu klientów. Nie chcę używać serwera pomostowego jako serwera proxy (działającego kamailio i rtpproxy), aby komunikacja była wydajna.

Gwiazdka lub serwer SIP może zarządzać sesjami udpWiem. Ale w jaki sposób most. Ponieważ udp nie utrzymuje sesji, jak mogę ukończyć czwarty krok. Jak mogę zidentyfikować odpowiedź serwera cła dla klienta? Jaki rodzaj oprogramowania (oczywiście lekki pod względem wydajności, i sam muszę go napisać) powinien być napisany do obsługi sesji. Jeśli ktokolwiek może mi dać pojęcie zarządzania sesją za pomocą udp, będzie dla mnie bardzo pomocny. Dużo szukałem, ale nie znalazłem żadnej odpowiedniej odpowiedzi.

Z góry dziękuję.

Odpowiedzi:

1 dla odpowiedzi № 1

Oto algorytm używany na ogólnej implementacji proxy dla ruchu TCP / UDP:

Moduły programowe:

Jeden twórca połączenia i wielu prokurentów

Są one implementowane jako samodzielne wątki.

Pływ:

Moduł Creator jest odpowiedzialny za zaakceptowanie iobsłużyć nowe połączenia. Informuje i przekazuje początkowe dane pracownikowi, który będzie obsługiwał od tego momentu wszystkie wejścia / wyjścia dla tego połączenia, równolegle otworzy połączenie z drugą stroną (może to również zrobić pracownik).

Pracownik otrzyma połączenie i będzie odpowiedzialny za to podczas swojego cyklu życia.

Niektóre punkty techniczne:

Połączenie UDP jest określane przez IP i PORT (SRC i DEST).

Twórca może czekać na wiadomości ze wszystkich źródeł, podczas gdy robotnik może czekać na wiadomości z określonego źródła (wiążąc gniazdo UDP).

Aby uzyskać wydajność, pracownicy powinni pasować do liczbyrdzenie system ma i pozwala każdemu obsłużyć gniazda asynchroniczne. Ponadto, jeśli pracownik obsługuje kilka gniazd, należy umieścić algorytm, aby uzyskać równowagę między pracownikami, gdy twórca / szef dystrybuuje nowe połączenia.


Menu