Как отправить 2 МБ данных через UDP?

Я использую TMS570LS3137 (DP84640 Phy). Попытка запрограммировать UPD(одноадресную рассылку) с помощью lwip для отправки 2 МБ данных. На данный момент я могу отправить до 63 КБ данных. Как отправить 2 МБ данных за раз. UDP поддерживает только передачу до 63 КБ, но по этой ссылке https://stackoverflow.com/questions/32512345/how-to-send-udp-packets-of-size-greater-than-64-kb#:~:text= Итак,%20это%20не%20возможно%20, это%20составляет%20в%20множество%20датаграмм. Они упомянули: «Если вам нужно отправить большие сообщения, вам нужно разбить их на несколько дейтаграмм», как это сделать?

1 ответ

Поскольку UDP использует IP, вы ограничены максимальным размером IP-пакета в 64 КиБ, как правило, даже с фрагментацией. Таким образом, жесткое ограничение для любой полезной нагрузки UDP составляет 65 535 - 28 = 65 507 байт.

мне нужно либо

  • разделите ваши данные на несколько дейтаграмм. Поскольку дейтаграммы могут поступать не в том порядке, в котором они отправляются, или даже теряться, для этого требуется какой-либо протокол или заголовок. Это может быть так же просто, как четыре байта в начале, чтобы определить смещение буфера, в которое идут данные, или порядковый номер дейтаграммы. Пока вы это делаете, вы не захотите полагаться на фрагментацию, но, в зависимости от сценария, используйте либо максимальный размер полезной нагрузки UDP по обычному Ethernet (1500 байт MTU - 20 байтов заголовка IP - 8 байтов заголовка UDP = 1472 байта). ), либо вменяемый максимум, который должен работать постоянно (например, 1432 байта).
  • используйте TCP, который может передавать данные произвольного размера и делает всю работу за вас.
Другие вопросы по тегам