Във вашия случай бих използвал TCP освен ако действително нямате практически опит с фрагментирането и повторното сглобяване на UDP пакети ръчно и сте готови да поддържате допълнителните разходи, въведени във вашия код (като например да имате повторно сглобяване на буфер и контролиране на забавянето, което това предполага).
Освен това трябва да вземете под внимание целевата мрежа. Дали е само localhost, LAN, WAN или дори интернет. Колкото по-малко контрол имате върху мрежата, толкова по-голямо е въздействието на предпочитането на TCP по отношение на времена за двупосочно пътуване, латентност, загуба на пакети и т.н. Под контрол имам предвид горни граници или оценки на броя на пресечените мрежови сегменти (#маршрутизатори), броя на различни конфигурации (QoS, ограничител на честотната лента, MTU, ...) и т.н.
Като правило, UDP е страхотен, когато всички данни, необходими за един миг (дефинирани по-долу), се побират в един пакет (MTU гарантирано е 1280 в IPv6). Мигът е кратка моментна снимка във времето, нещо, което обикновено има продължителност на живота като време за отиване и връщане. UDP също е страхотен за разговори, при които както заявката, така и отговорът са малки обекти.
Така че в този смисъл азбих използвал UDP за нещо като DNS (кратко запитване, кратък отговор) или данни за финансови транзакции (има само толкова много в рамките на жизнения цикъл от 1 време за отиване и връщане), или метаданни на протокола, като хешове на номера или идентичност на участващи клиенти (заявка/отговор кратък и има само няколко в рамките на времето за двупосочно пътуване).
Надявам се това да помогне.
Редактиране:
За да отговорите на вашите въпроси
- UDP (ограниченията са изброени по-горе)
- IPv6 offers path mtu detection, you'd simply use the PMTU, for IPv4 you'd have to roll your own:
- set the
IP_DONTFRAG
socket option
- изпрати пакет, който бихте предположили, че преминава
- помислете за прост протокол, който да позволи на получателя да ви каже дали пакетът е получен напълно
- ако не -> намалете размера, ако да -> увеличете размера
- след няколко пинг-понга имате сигурна оценка за PMTU (разбира се, вече можете да изпращате данни за полезния товар)
- UDP ще превъзхожда значително TCP, ако естеството на мрежата е стабилно и остава стабилно. (Обратно) TCP няма да спечели, когато естеството на мрежата продължава да се променя (вариации в латентността, променяща се вероятност за загуба на пакети и т.н.) Но, на същата бележка, UDP няма strong> победи, когато мрежовите сегменти са много далеч един от друг и QoS се използва в някои от междинните сегменти (QoS, което е конфигурирано да предпочита повече или по-малко известни TCP услуги пред „други“ неща.
За някои цифри и вдъхновение трябва да разгледате udt.
person
hroptatyr
schedule
18.06.2012