Ką jūs naudojate, kai reikia patikimo UDP?

Jei turite situaciją, kai TCP ryšys yra pernelyg lėtas, o UDP ryšys gali būti pernelyg nepatikimas, ką jūs naudojate? Yra įvairių standartinių patikimų UDP protokolų, kokią patirtį turite?

Atsakymui aptarkite vieną protokolą ir, jei kas nors paminėjo tą, kurį naudojate, pabandykite balsuoti už juos ir naudokite komentarą, jei reikia, paaiškinti.

Mane domina įvairios galimybės, kurių TCP yra viename skalės gale, o UDP - kita. Yra įvairių patikimų UDP parametrų, kurių kiekvienas perduoda kai kuriuos TCP elementus UDP.

Žinau, kad dažnai TCP yra teisingas pasirinkimas, tačiau alternatyvų sąrašas dažnai yra naudingas siekiant padėti pasiekti šią išvadą. Tokie dalykai kaip „Enet“, „RUDP“ ir tt, kurie yra pastatyti pagal UDP, turi skirtingus privalumus ir trūkumus, juos naudojote, kokie yra jūsų parodymai?

Siekiant išvengti abejonių, daugiau informacijos nėra, tai yra hipotetinis klausimas, ir tikiuosi, kad bus pateiktas atsakymų sąrašas, kuriame išsamiai aprašomos įvairios galimybės ir alternatyvos tiems, kurie turi priimti sprendimą.

84
20 сент. nustatė Len Holgate rugsėjo 20 d 2008-09-20 11:52 '08 at 11:52 2008-09-20 11:52
@ 13 atsakymų

Sunku atsakyti į šį klausimą be papildomos informacijos apie probleminį domeną. Pavyzdžiui, kiek duomenų naudojate? Kaip dažnai? Koks yra duomenų pobūdis? (pavyzdžiui, ar tai unikalus, ar tai vienas iš duomenų? Ar tai yra mėginių duomenų srautas ir tt) Kokia platforma veikia? (pvz., darbalaukis / serveris / įterptas) Norėdami nustatyti, ką reiškia „per lėtas“, kurią tinklo mediją naudojate?

Tačiau (labai!) Bendrosiomis sąlygomis, manau, jums reikės spustelėti TCP greičiui labai sunku, jei negalite daryti sunkių prielaidų apie duomenis, kuriuos bandote siųsti.

Pvz., Jei duomenys, kuriuos bandote siųsti, yra tokie, kad galite toleruoti vieno paketo praradimą (pvz., Reguliariai imami duomenys, kai mėginių ėmimo dažnis yra daug kartų didesnis nei signalo perdavimo našumas), tuomet tikriausiai galite paaukoti tam tikrą perdavimo patikimumą, garantuojantį galite aptikti duomenų korupciją (pvz., naudodami gerą krp)

Bet jei negalite toleruoti vieno paketo praradimo, turėsite pradėti diegti patikimumo technologijas, kurios jau turi TCP. Be to, neperžengdami tinkamo darbo kiekio, galite pastebėti, kad jūs pradėsite kurti šiuos elementus vartotojo erdvės sprendime su visomis jo problemomis, su kuriomis susiduriate.

25
20 сент. Atsakymą pateikė Andrew Edgecombe . 2008-09-20 12:18 '08, 12:18 2008-09-20 12:18

Kaip apie SCTP . Tai standartinis IETF protokolas (RFC 4960)

Jis turi gebėjimą nuplėšti, o tai gali padėti greičiui.

Atnaujinimas: TCP ir SCTP palyginimas rodo, kad charakteristikos yra palyginamos, jei nenaudojate dviejų sąsajų.

Atnaujinimas: geras įvadinis straipsnis .

26
20 сент. atsakymas suteiktas filantui 20 rugsėjis 2008-09-20 12:59 '08, 12:59 2008-09-20 12:59

ENET - http://enet.bespin.org/

Aš dirbau su ENET kaip patikimu UDP protokolu ir parašiau asinchroninę lizdo versiją savo klientui, kuris jį naudoja savo serveriuose. Jis veikia labai gerai, bet nemėgstu pridėtinės vertės, kad ping-ping prideda prie kitų tuščiosios eigos jungčių; kai turite daug ryšių, kurie visus juos reguliariai pastūmėjo, tai daug darbo.

ENET suteikia jums galimybę siųsti kelis „kanalus“ ir siųsti duomenis nepatikimi, patikimi ar nuoseklūs. Ji taip pat apima aukščiau minėtą tarpusavio ryšį, kuris veikia kaip gyvas.

20
20 сент. Atsakymą pateikė Len Holgate . 2008-09-20 12:03 '08, 12:03 2008-09-20 12:03

Mes turime kai kuriuos gynybos pramonės klientus, kurie naudoja UDT (UDP pagrindu perduodamą duomenų perdavimą) (žr. Http://udt.sourceforge.net/ ) ir labai džiaugiasi tuo, kad matome, kad ji turi BSD draugišką licenciją, ir .

14
01 окт. Atsakymas, kurį pateikė Chris Markle Oct 01 2008-10-01 01:10 '08 ne 1:10 2008-10-01 01:10

RUDP - patikimas vartotojo duomenų protokolas

Jame numatyta:

  • Gautų paketų patvirtinimas
  • >
  • Persiųskite prarastus paketus
  • Perteklinis buferis (greičiau nei realiuoju laiku)

Atrodo, šiek tiek labiau pritaikoma išsaugoti gyvus, o tada ENet, bet ji nesuteikia jums tiek daug galimybių (t. Y. Visi duomenys yra patikimi ir užsakomi ne tik pagal jūsų pasirinktus bitus). Tai atrodo gana paprasta įgyvendinti.

10
25 сент. Len Holgate atsakymas, rugsėjo 25 d 2008-09-25 17:41 '08 at 17:41 pm 2008-09-25 17:41

Kaip kiti nurodė, jūsų klausimas yra labai bendras, o kažkas „greičiau“ nei TCP labai priklauso nuo paraiškos tipo.

TCP paprastai yra toks pat greitas, kaip patikimi duomenys, perduodami iš vieno mazgo į kitą. Tačiau, jei jūsų programa atlieka daug mažų srauto paketų ir laukia atsakymų, UDP gali būti tinkamesnis, kad būtų sumažintas latentinis laikas.

Yra lengva tarpinė platforma. Nagle algoritmas yra TCP dalis, padedanti užtikrinti, kad siuntėjas neužvaldytų didelio duomenų srauto imtuvo, kuris sukelia perkrovą ir paketų praradimą.

Jei jums reikia patikimo pristatymo TCP pristatymo užsakyme, taip pat greitai reaguoti į UDP, ir jums nereikia nerimauti dėl per didelių duomenų srautų siuntimo, galite išjungti „Nagle“ algoritmą:

 int opt = -1; if (setsockopt(sock_fd, IPPROTO_TCP, TCP_NODELAY, (char *) sizeof(opt))) printf("Error disabling Nagle algorithm.\n"); 
9
20 сент. atsakymas pateikiamas smo 20 sep . 2008-09-20 18:17 '08 18:17 2008-09-20 18:17

Kiekvienas, kuris nusprendžia, kad šio sąrašo nepakanka, ir kad jie nori sukurti savo patikimą UDP, tikrai turėtų pažvelgti į „Google QUIC“ specifikaciją, nes tai apima daugelį sudėtingų kampinių atvejų ir galimų atmetimo išpuolių. Aš dar nepadariau šio įgyvendinimo, ir jums gali prireikti ar nereikia visų, ką ji teikia, tačiau dokumentas verta perskaityti prieš pradedant naują „patikimą“ UDP dizainą.

Geras „QUIC“ šuolio taškas čia „Chromium“ tinklaraštyje.

Čia galite rasti esamą QUIC projekto dokumentą.

7
01 авг. Atsakymą pateikė Len Holgate rugpjūčio 01 d 2013-08-01 11:50 '13, 11:50, 2013-08-01 11:50

Jei turite situaciją, kai TCP ryšys yra pernelyg lėtas, o UDP ryšys gali būti pernelyg nepatikimas, ką jūs naudojate? Yra įvairių standartinių patikimų UDP protokolų, kokią patirtį turite?

Jūsų sakinyje esantis raktinis žodis yra „potencialiai“. Manau, kad tikrai reikia įrodyti, kad TCP iš tikrųjų yra pernelyg lėtas jūsų poreikiams, jei jūsų protokole reikia patikimumo.

Jei norite gauti patikimumą iš UDP, jūs iš esmės ketinate pakartotinai pritaikyti kai kurias TCP funkcijas per UDP, o tai tikriausiai lems lėčiau nei tik naudojant TCP.

4
20 сент. Atsakymas pateiktas 17 rugsėjo 20 d. 2008-09-20 15:27 '08, 15:27 pm 2008-09-20 15:27

DCCP protokolas, standartizuotas RFC 4340 , „Duomenų perdavimo kontrolės protokolas“ gali būti tai, ko ieškote.

Atrodo, kad ji įdiegta Linux .

4
15 июня '09 в 17:34 2009-06-15 17:34 atsakymą pateikė bortzmeyer, birželio 15 d. , 09:17, 2009-06-15 17:34

Gal RFC 5405 , „Unicast UDP rekomendacijos taikomųjų programų kūrėjams“, jums bus naudinga.

3
15 июня '09 в 17:32 2009-06-15 17:32 atsakymą pateikė bortzmeyer, birželio 15 d. , 09:17, 2009-06-15 17:32

RUDP . Daugelis žaidimų lizdų serverių įgyvendina kažką panašaus.

2
09 дек. atsakymą pateikė „ Arcane Engineer 09“. 2011-12-09 15:44 '11, 15:44, 2011-12-09 15:44

Ar manote, kad jūsų duomenų suspaudimas?

Kaip minėta pirmiau, mes neturime pakankamai informacijos apie jūsų problemos pobūdį, tačiau gali padėti padėti suspausti duomenis.

2
20 сент. atsakymas suteiktas filantui 20 rugsėjis 2008-09-20 18:03 '08, 18:03 2008-09-20 18:03

Geriausias būdas pasiekti patikimumą naudojant UDP yra padidinti pačios programos patikimumą (pavyzdžiui, pridedant patvirtinimo ir retransliavimo mechanizmus)

-3
26 апр. Atsakymas pateikiamas kushan singh 26 balandžio. 2017-04-26 13:59 '17, 13:59 pm 2017-04-26 13:59

Kiti klausimai apie žymes arba Užduoti klausimą