UDP

UDP, (անգլ.՝ User Datagram Protocol, հայերեն՝ Օգտատիրային դեյթագրամի հաղորդակարգ), ցանցային հաղորդակարգերի ծրագրակազմի հիմնական բաղադրիչներից։ Հաղորդակարգը նախագծվել է Դեյվիդ Ռիդի կողմից 1980 թվականին և պաշտոնապես սահմանվել RFC 768֊ում։
UDP֊ին օգտագործում է նվազագույն առանց նախապես կապի հաստատման հաղորդակարգի մեխանիզմով հաղորդման մոդել է։ Այն չունի կապի հաստատման «երկխոսություններ», և այդ իսկ պատճառով ի հայտ է բերում հենքում ընկած ցանցի հաղորդակարգի բոլոր անհուսալիությունները օգտատիրոջ ծրագրերում։ Չկա ոչ մի երաշխիք տվյալների փոխանցման, դասավորման կամ դուբլիկատից պաշտպանման համար։ UDP֊ին տրամադրում է ստուգիչ գումարներ (անգլ.՝ checksums) տվյալների ամբողջականության ստուգման համար, և միացքի համարանիշ (անգլ.՝ port number) տարբեր գործընթացների դեյթագրամի ելակետում և վերջնակետում հասցեավորման համար։
UDP֊ով համակարգչային ծրագրերը ունակ են ուղարկելու հաղորդագրություններ՝ դեյթագրամաներ, համացանցային հաղորդակարգի (IP) ցանցում այլ հոստերի առանց նախապես հաղորդակցվելու հատուկ հաղորդման հոսքերի կամ տվյալների ճանապարհների ստեղծման համար։ UDP֊ին նպատակահարմար է այն դեպքում, երբ սխալների ստուգում և ուղղում կա՛մ անհրաժեշտ չէ, կա՛մ կատարվում է ծրագրում, խուսափելով այդպիսի մշակումների վերդիրից ցանցային միջերեսի մակարդակում։ Ժամանակային առումով զգայուն ծրագրերը հիմնականում օգտագործում են UDP, որովհետև փաթեթների բաց թողումը նախընտրելի է ի տարբերություն նրանց սպասելուն, որը կարող է հանդիսանալ հարմար տարբերակ իրական ժամանակում գործող համակարգերին (անգլ.՝ real-time systems): Եթե սխալների ուղղման հնարավորությունները անհրաժեշտ են ցանցային միջերեսի մակարդակում, ապա ծրագիրը կարող է օգտագործել TCP կամ SCTP (անգլ.՝ Stream Control Transmission Protocol), որոնք և նախատեսված են հենց այս նպատաակի համար։


== Հատկանիշներ ==
Մի շարք UDP֊ի հատկանիշներ դարձնում են այն նպատակահարմար որոշակի կիրառությունների համար․

Այն գործարք֊կողմնորոշված է, նպատակահարմար է պարզ հարցում֊պատասխան հաղորդակարգերի համար ինչպիսիք են DNS֊ը կամ NTP֊ին (անգլ.՝ Network Time Protocol։
Այն սպասարկում է դեյթագրամներ, նպատակահարմար է այլ հաղորդակարգերի մոդելավորման համար, ինչպես IP թունելավորման դեպքում կամ RPC֊ի (անգլ.՝ Remote Procedure Call) և NFS֊ի (անգլ.՝ Network File System)։
Այն պարզ է, նպատակահարմար է bootstrapping֊ի կամ այլնի համար առանց ամաբողջական հաղորդակարգի փաթեթի, ինչպիսին է DHCP֊ին (անգլ.՝ Dynamic Host Configuration Protocol) և TFTP֊ին (անգլ.՝ Trivial File Transfer Protocol)։
Այն իրավիճակային չէ, նպատակահարմար է շատ մեծ քանակությամբ բաժանորդներ ունեցող ծառայությունների դեպքում, ինչպիսիք են մեդիա հոսարկման կիրառությունները՝ IPTV֊ին
Բաց թողնված փաթեթների վերհաղորդման բացակայություն դարձնում է նպատակահարմար իրական ժամանակում գործող ծրագրերի համար (անգլ.՝ real-time applications), ինչպիսիք են IP հեռախոսակապը, առցանց խաղերը և RTSP֊ի հիման վրա կառուցված շատ հաղորդակարգեր։
Աշխատում է լավ միակողմանի կապերում, նպատակահարմար է տեղեկատվության հաղորդման համար, ինչպիսիք են բազմաթիվ ծառայությունների տեսակների ավտոմատ որոշումը/բացահայտումը կամ RIP֊ը (անգլ.՝ Routing Information Protocol)


== Ծառայությունների միանցքեր ==
Ծրագրերը օգտագործում են դեյթագրամի բնիկներ (անգլ.՝ datagram sockets) հոստը֊հոստին կապեր հաստատելու համար։ Ծրագիրը կապում է բնիկը տվյալների տեղափոխման իր վերջնակետին, որը IP հասցեի և ծառայության միանցքի (անգլ.՝ service port) համադրությունն է։ Միանցքը ծրագրային կառույց է, որ նույնականացվում է միանցքի համարով (անգլ.՝ port number, 16 բիթանի ամբողջ թիվ՝ 0֊ց մինչև 65535 միջակայքում)։ 0 համարով միանցքը ռեզերվային է, բայց նաև թույլատրելի ելակետային միանցքի համար է, եթե հաղորդող գործընթացը չի ենթադրում պատասխան հաղորդագրություն։
IANA֊ն (անգլ.՝ Internet Assigned Numbers Authority) բաժանել է միանցքների համարները երեք ընդգրկույթների։ 0֊ից մինչև 1023 միանցքային համարները օգտագործվում են տարածված և ճանաչված ծառայությունների կողմից։ UNIX֊անման օպերացիոն համակարգերի վրա առանց գերօգտագործողի թույլատվությամբ հնարավոր չէ օգտագործել այդ ընդգրկույթից։ 1024֊ից 49151֊ը զբաղեցված միանցքներն են և օգտագործվում են IANA֊ի կողմից գրանցված ծառայությունների կողմից։ 49152֊ից մինչև 65535֊ը փոփոխական միանցքներն են, որոնք նախատեսված չեն որևէ կոնկրետ տեսակի ծառայության համար և կարող են օգտագործվել ցանկացած նպատակով։ Դրանք նույնպես օգտագործվում են որպես անցողիկ միանցքներ (անգլ.՝ ephemeral port), որոնցից ծրագրերը կարող են պատահականորեն ընտրել ցանկացածը ինքնասահմանման համար։ Արդյունքում նրանք օգտագործվում են որպես ժամանակավոր միանցքներ հիմնականում բաժանորդների կողմից, երբ կապվում են սպասարկչի հետ։


== Հուսալիություն և ծանրաբեռնվածության ղեկավարման լուծումներ ==
Հուսալիության պակասի պատճառով, UDP օգտագործող ծրագրերը պետք է պատրաստ լինեն կրելու կորստի, սխալների և դուպլիկատների հաղորդման ընթացքում։ Որոշ ծրագրեր, ինչպիսիք են TFTP֊ն (անգլ.՝ Trivial File Transfer Protocol), կարող են ավելացնել տարրական հուսալիության ապահովման մեխանիզմներ ծրագրային մակարդակի մեջ ըստ անհրաժեշտության։
Հիմնականում UDP ծրագրերը չեն կիրառում հուսալիության ապահովման մեխանիզմներ և անգամ հնարավոր է դրանց կողմից խոչընդոտվի աշխատանքը։ Մեդիա հոսարկման, իրական֊ժամանակում բազմամասնակցային խաղերը և IP հեռախոսակապը այն ծրագրերի օրինակներն են, որոնք հաճախ օգտագործում են UDP։ Այսպիսի ծրագրերում որոշակի փաթեթների կորուստը ճակատագրական խնդիր չէ։ եթե ծրագիրը ունի խիստ բարձր մակարդակի հուսալիության կարիք, ապա փոխարենը պետք է օգտագործվի հաղորդակարգ, ինչպիսին TCP֊ն է (անգլ.՝ Transmission Control Protocol)։


== Ծրագրեր ==
Համացանցի բազմաթիվ առանցքային ծրագրեր օգտագործում են UDP֊ն, ներառյալ․ DNS֊ը, որտեղ հարցումները պետք է լինեն արագ և միայն բաղկացած լինեն հարցումից ու նրան հետևող պատասխան միակ փաթեթից, SNMP֊ն (անգլ.՝ Simple Network Management Protocol), RIP֊ն (անգլ.՝ Routing Information Protocol) և DHCP֊ն (անգլ.՝ Dynamic Host Configuration Protocol)։
Ձայնային և տեսահոսքերը հիմանականում հաղորդվում են օգտագործելով UDP։ Իրական֊ժամանակում աշխատող տեսա և ձայնահոսարկման հաղորդակարգերը նախագծված են այնպես, որ կարողանան գլուխ հանեն անգամ եթե ունեն կորսված փաթեթներ, այսպիսով միայն ունենալով անշան որակային ցածրացում երկար դադարների փոխարեն, եթե կորսված փաթեթները վերհաղորդվեին։ TCP֊ի և UDP֊ի միևնույն ցանցում համատեղ կիրառության պատճառով, բազում կազմակերպություններ նկատում են, որ վերջին շրջանում UDP հոսքերի շատացումը իրական֊ժամանակում ծրագրերից սկսում է խանգարել TCP օգտագործող ծրագրերին, ինչպիսիք են վաճառակետերի, հաշվապահական ծրագրերին և տվյալների բազաներին։ Երբ TCP֊ին հայտնաբերում է փաթեթի կորուստ, այն հետ է դրսևորվում իր տվյալների փոխանակման թողունակությունը։ Քանզի իրական֊ժամանակում գործող և բիզնես ծրագրերը անհրաժեշտ են կազմակերպությունների համար, ծառայությունների լուծումների զարգազող որակը համարվում է օրհասական ոմանց կողմից։


== UDP-ի և TCP-ի համեմատություն ==
TCP֊ն կապ֊կողմնորոշում ունեցող հաղորդակարգ է, որը նշանակում է այն պահանջում է նախապես կապորդի հետ կապի հաստատում (անգլ.՝ handshaking) հետագա հաղորդակցումը շարունակելու համար։ Կապը հաստատվելուց հետո օգտատիրային տվյալները կարող են փոխանակվել երկկողմանիորեն։

Հուսալիություն – TCP֊ն ապահովում է հաղորդագրության հասնելը, վերհաղորդումը կորուստների և սահմանված ժամանակի ավարտը։ Եթե ճանապարհին կորուստ է լինում, ապա սպասարկիչը կկատարի վերահարցում կորսված մասի համար։ TCP֊ում կա՛մ չկա կորսված տվյալներ, կա՛մ բազմաթիվ անհասանելիության պատճառով դադարեցվում է։
Դասավորված – Եթե երկու հաղորդագրություններ հաջորդաբար մի կապով, ապա առաջին հաղորդագրությունն ընդունող ծրագրին կհասնի առաջինը։ Երբ տվյալների հատվածները տեղ են հասնում սխալ հերթականությամբ, TCP֊ին բուֆերացնում է ուշացած հերթից ընկած տվյալները մինչև ամբողջ տվյալները հնարավոր լինի ճշտորեն վերադասավորել և հասցնել ծրագրին։
Ծանր աշխատանք – TCP֊ին մինչև օգտատիրային տվյալներ փոխանակելը անհրաժեշտ է երեք փաթեթ բնիկային կապ հաստատելու համար։ TCP֊ին ապահովում է հուսալիություն և ծանրաբեռնվածության ղեկավարում։
Հոսարկում – Տվյալները կարդացվումեն որպես բայթային հոսարկում, տարբերակիչն չեն հաղորդվում հաղորդագրությունների սահմանները նշելու համար։UDP֊ն ավելի պարզ հաղորդագրություն կողմնորոշված առանց նախապես կապի հաստատման (անգլ.՝ handshaking) հաղորդակարգ է։ Այսպիսի հաղորդակարգերը չեն հաստատում առանձնացված վերջակետերի միջև կապ։ Կապը կայանում է նրանով, որ տեղեկատվությունը հաղորդվում է մեկ ուղղությամբ ելակետից վերջակետ առանց ստուգելու ընդունողի պատրաստ լինելը կամ վիճակը։ Այնուամենայնիվ UDP֊ի առավելությունը IP հեռախոսակապի կիրառության մեջ այն է, որ հապաղումը և թրթռումը առաջնահերթ կարևորության են։ IP հեռախոսակապում UDP֊ն ենթադրվում է, որ օգտատերերը ապահովում են ամեն անհարածեշտ իրական֊ժամանակային առումով հաղորդագրությունների ընդունումը։

Անհուսալիություն – Երբ հաղորդագրություն է ուղարկվում, հնարավոր չէ իմանալ թե արդյոք այն հասել է իր վերջնակետին՝ այն հնարավոր է ճանապարհին կորչի։ Այստեղ չկան տեղ հասնելու հաստատման, վերհաղորդման կամ սահմանված ժամանակի սպառման հասկացություններ։
Չդասավորված – Եթե երկու հաղորդագրություններ ուղարկվել են միևնույն ստացողին, ապա հերթականությունը որով կստանան վերջնակետում հայտնի չի կարող լինել։
Թեթև աշխատանք – Չկա հաղորդագրությունների հերթականություն, կապի պահպանման/հետևելու մեխանիզմ և այլք։ Այն փոքր տրանսպորտային շերտ է նախագծված IP֊ի վրա։
Դեյթագրամներ – Փաթեթները ուղարկվում են անհատապես և ստուգվում են ամբողջականության համար միայն եթե նրանք տեղ հասնեն։ Փաթեթները ունեն հստակ սահմաններ, որոնք ընկալվում են ստանալուց։
Առանց ծանրաբեռնվածության ղեկավորման – UDP֊ն ինքն էլ բացառություն չէ և ունենում ծանրաբեռնվածություններ, եթե չեն կիրառվում ծանրաբեռման ղեկավարման միջոցներ ծրագրային մակարդակում։


== Տես նաև ==


== Նշումներ և ծանոթագրություններ ==


=== Նշումներ ===


=== RFC ծանոթագրություններ ===
RFC 768 – User Datagram Protocol
RFC 2460 – Internet Protocol, Version 6 (IPv6) Specification
RFC 2675 – IPv6 Jumbograms
RFC 4113 – Management Information Base for the UDP
RFC 5405 – Unicast UDP Usage Guidelines for Application Designers


== Արտաքին հղումներ ==
IANA Port Assignments
The Trouble with UDP Scanning (PDF)
Breakdown of UDP frame Archived 2009-01-22 at the Wayback Machine.
UDP on MSDN Magazine Sockets and WCF
UDP connections