[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

[Pytalem tez na lang.c] Messaging na socketach (?

news_reader

6/14/2007 7:11:00 PM

Witam,

Zastanawiam sie ostatnio nad najlepsza implementacja malego systemu
"gadajacego" poprzez komunikaty. Od razu pisze, ze tez chce na tym
skorzystac edukacyjnie wiec uzywanie gotowych bibliotek - jesli sa - raczej
mnie nie intersuje. Oczywiscie chetnie przegladnalbym jakis dobrze napisany
przyklad (najlepiej open source), wiec jesli ktos zna cos godnego
polecenia - bylbym zobowiazany ;-)
Mam tez pytanie odnosnie samej organizacji komunikatu i transportu. Od
razu napisze, ze nie chodzi mi raczej o komunkat typu "xml wysylany poprzez
siec".
1. Jaka jest Waszym zdaniem najlepsza struktura komunikatu. Najbardziej
bezpieczna jest chyba ta ze stala dlugoscia ale z drugiej strony najmniej
rozwojowa.
2. Jaka jest najoptymalniejsza zawartosc naglowka. Kolejno: Dlugosc,
Wersja_Protokolu, Opcode, Subopcode, CRC_Naglowka ? Dla krotkich komunikatow
to troche chyba zbyt duzo ?
3. Czy jest sens stosowac obok naglowka takze czesc konczaca (trailer) ?
4. Jak jest w kwestii wysylania. Rozumiem, ze po stronie nadawczej, pakuje
wszystko w strukture (najlepiej spakowana) i wolam funkcje typu send. Ale
jak jest z odbieraniem ? Socket odbierajacy powinien najpierw pobrac znana
ilosc bajtow jako naglowek a potem ewentualnie doczytac zawartosc ? Co jesli
naglowki sa rozne w zaleznosci od wersji ? Czyli najpier wersja protokolu ?
5. Niezbyt wiem jak traktowac problem atakow typu wysylanie wadliwych
komunikatow do odbiorcy ? Zakladajac, ze odbierajacy serwer to jakas usluga
o dobrze_znanym porcie, to atakujacy moze wysylac komunikaty np. z blednie
ustawiona wartoscia pola dlugosc co powoduje to, ze potem 'doczytamy' zbyt
duzo lub zbyt malo ?
6. Czy wg. Was metoda pol CRC dla calosc, dla naglowka lub dla danych jest
dobra metoda na zabezpieczenie sie przed 5 ?
7. Jak wyglada w praktyce kwestia UDP vs TCP ? Co lepiej stosowac w tego
typu komunikacji ? Czy strumieniowosc TCP nie pasuje do messagingu jak wol
do karety ? Z drugiej strony wysylajac przez UDP musze nianczyc w aplikacji
retransmisje, fragmentacje (jak dobrac wielkosc fragmentow - testowanie
linka przy starcie to chyba glupi pomysl, bo za chwile routery moga wybrac
juz inna trase), oraz pakiety przychodzace w zlej kolejnosci ?
8. Czy znacie moze jakas dobra ksiazke na temat protokolow. Nie chodzi mi o
konkretny protokol (rfc moim przyjacielem jest) ale raczej pozycja ktora
mowi jak atakowac konkretne klasy problemow (np. jesli to jest system w
elektrowni atomowej to wyrozna go niezawodnosc, hard real time oraz
gwarantowanie dostarczenie komunikatu. Aby uzysak to mamy takie techniki ...
czyli inaczej mowiac design patterns dla tego tematu). Moze jakies ciekawe
case study ?
9. Czy sa jakies szczegolne problemy przy stosowaniu tego rodzaju
komunikacji dla urzadzen bezprzewodowych (Teraz w prawie kazdym
telefoniejest jakis GPRS albo inny EDGE i dodatkowo mozna czasami napisac
cos swojego) ?

Z gory dziekuje za uwagi
Marcin


3 Answers

Stachu 'Dozzie' K.

6/14/2007 7:36:00 PM

0

On 14.06.2007, Marcin <news_reader@poczta.onet.pl> wrote:
> Zastanawiam sie ostatnio nad najlepsza implementacja malego systemu
> "gadajacego" poprzez komunikaty. Od razu pisze, ze tez chce na tym
> skorzystac edukacyjnie wiec uzywanie gotowych bibliotek - jesli sa - raczej
> mnie nie intersuje. Oczywiscie chetnie przegladnalbym jakis dobrze napisany
> przyklad (najlepiej open source), wiec jesli ktos zna cos godnego
> polecenia - bylbym zobowiazany ;-)
> Mam tez pytanie odnosnie samej organizacji komunikatu i transportu. Od
> razu napisze, ze nie chodzi mi raczej o komunkat typu "xml wysylany poprzez
> siec".
> 1. Jaka jest Waszym zdaniem najlepsza struktura komunikatu. Najbardziej
> bezpieczna jest chyba ta ze stala dlugoscia ale z drugiej strony najmniej
> rozwojowa.

Tak.

> 2. Jaka jest najoptymalniejsza zawartosc naglowka. Kolejno: Dlugosc,
^^^^^^^^^^^^^^^^^-- najbardziej najlepsza?
> Wersja_Protokolu, Opcode, Subopcode, CRC_Naglowka ? Dla krotkich komunikatow
> to troche chyba zbyt duzo ?

Nie.

> 3. Czy jest sens stosowac obok naglowka takze czesc konczaca (trailer) ?

48.

> 4. Jak jest w kwestii wysylania. Rozumiem, ze po stronie nadawczej, pakuje
> wszystko w strukture (najlepiej spakowana) i wolam funkcje typu send. Ale
> jak jest z odbieraniem ? Socket odbierajacy powinien najpierw pobrac znana
> ilosc bajtow jako naglowek a potem ewentualnie doczytac zawartosc ? Co jesli
> naglowki sa rozne w zaleznosci od wersji ? Czyli najpier wersja protokolu ?

Czerwony.

Te pytania, podobnie jak powy?sze odpowiedzi, nie maj? wiekszego sensu,
bo nie rozmawiamy o konkretnym protokole i konkretnych problemach,
którym protokó3 ma stawia czo3a.

> 5. Niezbyt wiem jak traktowac problem atakow typu wysylanie wadliwych
> komunikatow do odbiorcy ? Zakladajac, ze odbierajacy serwer to jakas usluga
> o dobrze_znanym porcie, to atakujacy moze wysylac komunikaty np. z blednie
> ustawiona wartoscia pola dlugosc co powoduje to, ze potem 'doczytamy' zbyt
> duzo lub zbyt malo ?

W protokole strumieniowym bez uwierzytelniania stron po3?czenia sie nie
obejdzie. Jedynie timeout mo?e pomóc.

W protokole datagramowym operacja read() zwróci po prostu mniej danych.

> 6. Czy wg. Was metoda pol CRC dla calosc, dla naglowka lub dla danych jest
> dobra metoda na zabezpieczenie sie przed 5 ?

CRC to oko3o 32 bity. To nie jest du?o. Je?li zadajesz takie pytania to
nawet nie próbuj transmisji zabezpieczaa na w3asn? reke i skorzystaj
z gotowych rozwi?zan (SSL, TLS).

> 7. Jak wyglada w praktyce kwestia UDP vs TCP ? Co lepiej stosowac w tego
> typu komunikacji ? Czy strumieniowosc TCP nie pasuje do messagingu jak wol
> do karety ?

A w SSH co sie przekazuje, jak nie komunikaty w3a?nie? I po czym biega
sobie SSH?

> Z drugiej strony wysylajac przez UDP musze nianczyc w aplikacji
> retransmisje, fragmentacje (jak dobrac wielkosc fragmentow - testowanie
> linka przy starcie to chyba glupi pomysl, bo za chwile routery moga wybrac
> juz inna trase), oraz pakiety przychodzace w zlej kolejnosci ?

Jakby? zgad3.

> 8. Czy znacie moze jakas dobra ksiazke na temat protokolow. Nie chodzi mi o
> konkretny protokol (rfc moim przyjacielem jest) ale raczej pozycja ktora
> mowi jak atakowac konkretne klasy problemow (np. jesli to jest system w
> elektrowni atomowej to wyrozna go niezawodnosc, hard real time oraz
> gwarantowanie dostarczenie komunikatu. Aby uzysak to mamy takie techniki ...
> czyli inaczej mowiac design patterns dla tego tematu). Moze jakies ciekawe
> case study ?

RFC-ki na ogó3 maj? do?a dobrze opisane problemy pojawiaj?ce sie przy
danym protokole.

> 9. Czy sa jakies szczegolne problemy przy stosowaniu tego rodzaju
> komunikacji dla urzadzen bezprzewodowych (Teraz w prawie kazdym
> telefoniejest jakis GPRS albo inny EDGE i dodatkowo mozna czasami napisac
> cos swojego) ?
>
> Z gory dziekuje za uwagi
> Marcin
>
>


--
Secunia non olet.
Stanislaw Klekot

Marcin 'Qrczak' Kowalczyk

6/14/2007 7:58:00 PM

0

Dnia 14-06-2007, Cz o godzinie 21:11 +0200, Marcin napisal(a):

> 1. Jaka jest Waszym zdaniem najlepsza struktura komunikatu. Najbardziej
> bezpieczna jest chyba ta ze stala dlugoscia ale z drugiej strony najmniej
> rozwojowa.

Najlepsza jest najbardziej rozwojowa, tak zeby oprogramowanie uzywajace
róznych wersji protokolu moglo sie ze soba porozumiewac.

Zobacz na przyklad protokól irca (RFC 2812). Tutaj wazna cecha jest
mozliwosc wysylania przez uzytkownika komunikatów nieobslugiwanych
specjalnie przez klienta oraz mozliwosc uzywalnego pokazywania
uzytkownikowi niezrozumialych dla klienta komunikatów w formie surowej.
Czyli nawet bardzo prosty klient jest juz uzywalny.

> 2. Jaka jest najoptymalniejsza zawartosc naglowka. Kolejno: Dlugosc,
> Wersja_Protokolu, Opcode, Subopcode, CRC_Naglowka ? Dla krotkich komunikatow
> to troche chyba zbyt duzo ?

W protokole irca komunikat zawiera nadawce (jesli idzie od serwera do
klienta), polecenie (tekstowo) i parametry polecenia (jesli poleceniem
jest wyslanie tekstu, to parametrami jest odbiorca i tekst do wyslania).
Konczy sie znakiem nowej linii. Skladnia parametrów polecenia stosuje te
same konwencje niezaleznie od rodzaju polecenia: parametry sa oddzielone
spacjami, a ostatni parametr moze byc oddzielony dwukropkiem i wtedy
moze zawierac spacje.

Oczywiscie mozna bylo to zrobic na bardzo wiele sposobów, to tylko
przyklad. Zalety: napisalem wyzej.

> 5. Niezbyt wiem jak traktowac problem atakow typu wysylanie wadliwych
> komunikatow do odbiorcy ?

Dlaczego nazywasz to atakiem? Jesli komunikat bedzie bez sensu, to
druga strona moze zareagowac np. przekazaniem z powrotem informacji
o bledzie (jesli jest serwerem) albo pokazaniem informacji o bledzie
uzytkownikowi (jesli jest klientem i nie rozumie, co wyslal serwer).

Komunikacja z jednym klientem nie ma przeciez bezposredniego wplywu na
komunikacje z innym klientem, wiec jesli jakis klient nie wie, czego
chce, i wysyla bezsensowne komunikaty, to jest to tylko jego problem,
ze nie uzyska ciekawej reakcji.

> 6. Czy wg. Was metoda pol CRC dla calosc, dla naglowka lub dla danych jest
> dobra metoda na zabezpieczenie sie przed 5 ?

Nie rozumiem - przed czym to ma zabezpieczac?

> 7. Jak wyglada w praktyce kwestia UDP vs TCP ? Co lepiej stosowac w tego
> typu komunikacji ?

Irc stosuje TCP.

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

jolz

6/14/2007 8:56:00 PM

0

> 7. Jak wyglada w praktyce kwestia UDP vs TCP ?

Ja widze to tak: musi dojsc -> TCP. Jakos nigdy nie chcialo mi sie
implemetowac na bazie UDP tego co w TCP jest za darmo. W komunikatorze
raczej powinno dojsc.

> 2. Jaka jest najoptymalniejsza zawartosc naglowka. Kolejno:
> Dlugosc,

aha

> Wersja_Protokolu,

W kazdym komunikacie?
W zupelnosci wystarczy w 1 komunikacie sie przywitac. Potem to caly
czas to samo polaczenie, wiec ta sama wersja.

> Opcode,

aha

> Subopcode,

A to juz moze byc czescia danych. Kazdy rodzaj komunikatu moze miec
swoj naglowek jesli tego wymaga. Czesto nie bedzie wymagal.

> CRC_Naglowka

to juz jest w TCP

> 3. Czy jest sens stosowac obok naglowka takze czesc konczaca (trailer) ?

nie bardzo wiem po co

> 4. Jak jest w kwestii wysylania. Rozumiem, ze po stronie nadawczej, pakuje
> wszystko w strukture (najlepiej spakowana) i wolam funkcje typu send.

Kompresja kosztuje a nie zawsze jest konieczna. Szczegolnie w sieci
lokalnej wiecej czasu moze zajac kompresowanie niz przesylanie.

> Ale
> jak jest z odbieraniem ? Socket odbierajacy powinien najpierw pobrac znana
> ilosc bajtow jako naglowek a potem ewentualnie doczytac zawartosc ?

aha
Tylko nigdy nie zakladaj ze dostaniesz ta znana ilosc bajtow. A jesli
dostaniesz to one nie musza oznaczac tego co oczekujesz. np zakladam
ze po odczytaniu dlugosci komunikatu przeznaczysz jakis bufor na ten
komunikat. Jesli ktos wysle ci ze komunikat ma pare giga to moze to
byc nieprzyjemne jesli mu uwierzysz.

> Co jesli
> naglowki sa rozne w zaleznosci od wersji ? Czyli najpier wersja protokolu ?

Zrob naglowek najprostrzy z mozliwych: rozmiar, kod komunikatu. Jesli
wychodzi nowa wersja dodajesz nowe komunikaty nie ingerujac w
naglowek. Nawet jesli bys chcial przesylac wersje protokolu to
przeciez to przeslanie tez musi miec jakis format. Jakis niezmiennik
musisz zalozyc.

> 5. Niezbyt wiem jak traktowac problem atakow typu wysylanie wadliwych
> komunikatow do odbiorcy ? Zakladajac, ze odbierajacy serwer to jakas usluga
> o dobrze_znanym porcie, to atakujacy moze wysylac komunikaty np. z blednie
> ustawiona wartoscia pola dlugosc co powoduje to, ze potem 'doczytamy' zbyt
> duzo lub zbyt malo ?

Jesli dostales cos tak bzdurnego ze masz pewnosc ze to atak, to po
prostu rozlaczasz.
Gorzej z sytuacja w ktorej dostaniesz komunikat ktorego nie znasz.
Jesi klient przdstawiajac sie powiedzial ze ma wersje taka jaka znasz
to tez spokojnie mozesz rozlaczac. Jesli ma nowsza wersje to mozna
zignorowac, ale to wymaga rozsadnego wprowadzania nowych wersji. np
rezultat komunikatu nastenego (znanego serwerowi) nie powinien sie
zmieniac w zaleznosci od kumunikatu poprzedzajacego.
Poza tym klient przedstawiajac sie mogl tez poznac wersje serwera i
sie domyslic ze serwer tego komunikatu nie odbierze, wiec moze go
wcale nie wysylac. No ale to zalezy tylko od tego czy klientowi sie
chce myslec, czy nie. Serwer musi byc przygotowany na to ze dostanie
cos czego nie zna.

> 6. Czy wg. Was metoda pol CRC dla calosc, dla naglowka lub dla danych jest
> dobra metoda na zabezpieczenie sie przed 5 ?

nie