Протокол UDP не гарантирует последовательное получение пакетов, но вы можете просто использовать часть дейтаграммы для порядкового номера.Есть ли недостатки в использовании части дейтаграммы в UDP для последовательного приема пакетов?
По сравнению с гарантией TCP, является ли решение выше для UDP-эквивалента?
В основном, я читал повсюду, что UDP не обеспечивает последовательный прием, но это похоже на такое очевидное решение, что мне было интересно, действительно ли это адекватное исправление.
UDP может предложить преимущества по сравнению с TCP, если сообщения используются для сообщения о текущем состоянии чего-либо, а получатель не заинтересован ни в чем, кроме текущего состояния. Предположим, что Боб отправляет сообщения «Дверь закрыт» или «дверь открыта», когда дверь открывается или закрывается, и будет периодически ретранслировать состояние двери, если она не получит подходящую «Я слышал, дверь закрыта» или «Я слышал, что дверь открыта».Если вскоре после того, как Боб отправит «Дверь закрыта», дверь откроется, Боб отправит «Дверь открыта» и не заботится о подтверждении того, что предыдущее сообщение «дверь закрыто». – supercat
Проблема в том, что если «Дверь закрыта» и «дверь открыта», сообщения меняются местами, сообщение «дверь закрыто» может быть последним, которое слышит Боб. Джо мог бы успешно отправить сообщение «Я слышал, что дверь открыта» в ответ на сообщение «открыто», но его сообщение «Я слышал, что дверь закрыта» отбрасывается. В этом случае Джо подумает, что дверь закрыта, но Боб подумает, что Джо подумал, что это открыто. К сожалению. Добавление порядковых номеров позволит избежать этого. Джо не пришлось бы обрабатывать какие-либо пакеты, полученные без последовательности - просто убедитесь, что он не обрабатывает их. – supercat