фрагментация сообщений выполняется по IP, поэтому мне приходится иметь дело с этим на уровне приложений. такие как мина или нетти?
фрагментация сообщений будет в правильном порядке, верно?
так что любой декодер не должен иметь дело с любым вопросом заказа, верно?
Повторная сборка IP-пакетов полностью выполняется на IP-уровне (до того, как UDP или TCP когда-либо увидит пакет), поэтому вам не придется иметь дело с «дефрагментацией» на прикладном уровне.
Конечно, это относится только к UDP, так как пакет в то время как TCP является поток и, следовательно, не имеет строгой концепции пакетов с точки зрения пользователя.
TCP может свободно передавать исходящие байты в любой группе, которую сочтет нужной, и принимающая сторона может передавать полученные байты приложению в любой группе, которую сочтет нужной. Это обеспечивает большую гибкость реализации TCP в том смысле, что он может группировать исходящие send()
призывает к более эффективной передаче или разбить их, если они слишком велики для некоторой точки на пути.
Вы должен Подумайте о TCP как о потоке байтов (например, поступающем из последовательного порта) при получении данных; Вы можете получить любое количество байтов в любое время. Заказ гарантирован, но не группировка.
На практике группировка часто делает соответствует тому, как были отправлены данные, что оставляет приложения, которые работают большую часть времени, но не все время.
Вы правы насчет части заказа. Часть 2 сообщения будет видна не ранее, чем часть 1, даже если оно физически поступило раньше. Но вполне возможно, что часть 2 сообщения видна потом чем часть 1 сообщения. А поскольку TCP не имеет представления о границах сообщений (он работает с байтами), вы просто получаете половину сообщения.