реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Склеиваются UDP пакеты
k155la3
сообщение Nov 21 2016, 13:54
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Daniil @ Nov 21 2016, 17:40) *
. . . . но никак не рассчитывал что пакеты будут где-то ходить ТАК долго.
. . . .


У оператора в приоритете номер один - обеспечение голосовой связи абонентов.
Затем - обеспечение работы ЕГО интернет-провайдера и любимых корпоративных клиентов (банки, платежные системы итп).
И только потом - все остальные смертные.
Так что сравнивать пользовательскую передачу данных и работу интернета даже у одного провайдера связи некорректно.

Go to the top of the page
 
+Quote Post
Alechek
сообщение Nov 21 2016, 18:19
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(k155la3 @ Nov 21 2016, 18:54) *
У оператора в приоритете номер один - обеспечение голосовой связи абонентов.

И даже у голоса 15 уровней приоритета wink.gif
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 22 2016, 04:43
Сообщение #18


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



А с чего взяли, что склеивается именно на уровне UDP? Какой следующий уровень на сервере, который получает данные от UDP уровня? Как он обрабатывает данные? Подозреваю, что именно он и "чудит". Т.е. если у него в очереди несколько запросов (данных - payload'ов UDP), то он их обрабатывает скопом и кидает в выходную очередь, а та весь блок данных обрамляет в UDP пакет и отправляет на IP уровень и т.д. Вот дивайс и ловит "склеенные" ответы.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Daniil
сообщение Nov 22 2016, 06:50
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 3-09-04
Из: Russia, Novosibirsk
Пользователь №: 590



Цитата(dxp @ Nov 22 2016, 11:43) *
А с чего взяли, что склеивается именно на уровне UDP? Какой следующий уровень на сервере, который получает данные от UDP уровня? Как он обрабатывает данные? Подозреваю, что именно он и "чудит". Т.е. если у него в очереди несколько запросов (данных - payload'ов UDP), то он их обрабатывает скопом и кидает в выходную очередь, а та весь блок данных обрамляет в UDP пакет и отправляет на IP уровень и т.д. Вот дивайс и ловит "склеенные" ответы.

Нет, проблема не в сервере. Я смотрел трафик от него Wiresharkом - уходят именно отдельные пакеты. Остается два предположения - или они склеиваются на стороне оператора (что мне кажется маловероятным, но смущает очень большая задержка), или приходят с минимальным интервалом на сам модем, а он уже их выдает одним потоком. Как добиться от модема раздельной передачи принятых UDP - выяснить не удалось, в документации этот момент как-то обошли (или я не там смотрел).
Go to the top of the page
 
+Quote Post
Alechek
сообщение Nov 22 2016, 07:16
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



99% проблема в операторе. Кто, кстати? Не Мегафон ли случаем?
Go to the top of the page
 
+Quote Post
Daniil
сообщение Nov 22 2016, 07:21
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 3-09-04
Из: Russia, Novosibirsk
Пользователь №: 590



Цитата(Alechek @ Nov 22 2016, 14:16) *
99% проблема в операторе. Кто, кстати? Не Мегафон ли случаем?


МТС
Go to the top of the page
 
+Quote Post
Alechek
сообщение Nov 22 2016, 08:16
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Так, как идея - порт какой? Может сменить на другой.... Кто его знает, как там спецоборудование работает (от наших спецорганов).
Go to the top of the page
 
+Quote Post
Baser
сообщение Nov 22 2016, 09:59
Сообщение #23


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Daniil @ Nov 22 2016, 08:50) *
Нет, проблема не в сервере. Я смотрел трафик от него Wiresharkом - уходят именно отдельные пакеты. Остается два предположения - или они склеиваются на стороне оператора (что мне кажется маловероятным, но смущает очень большая задержка), или приходят с минимальным интервалом на сам модем, а он уже их выдает одним потоком.

Я думаю последнее, ничего нигде не склеивается, приходят на модем пачкой и он выдирает сам данные и выдает одним блоком.

Цитата
Как добиться от модема раздельной передачи принятых UDP - выяснить не удалось, в документации этот момент как-то обошли (или я не там смотрел).

Можете еще раз посмотреть "SIM800 Series_TCPIP_Application Note",
но там нет возможности читать из модема данные "по-пакетно", только просто есть суммарная длина данных, которые на данный момент лежат в приемном буфере модема. Причем именно уже ЧИСТЫХ данных, без обрамления.

Я эту проблему как-то решил изначально, на уровне структуры своих пакетов (данных) и включения заголовков для приема.
Пока применяю только AT+CIPHEAD=1, т.к. у меня обычно единственное подключение.
И разобрать свои данные на отдельные пакеты после +IPD (data length):
у меня не сложно.

Go to the top of the page
 
+Quote Post
GeGeL
сообщение Nov 26 2016, 20:25
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата(Alechek @ Nov 22 2016, 10:16) *
99% проблема в операторе. Кто, кстати? Не Мегафон ли случаем?


Категорически не согласен. В данном случае оператор, как и слой UDP, не при чем.
Лично приходилось сталкиваться с описанным явлением на других модулях, тестировать и разбираться с механизмами эффекта.

Сервер, как и положено, отсылает три раздельных UDP ответа. Интернет, как и положено, направляет их на гейт сотового оператора (тут добавлю, что теоретически очередность ответов может измениться, но это бывает чрезвычайно редко, и все же их будет три). Сотовый оператор буферизирует ответы (по отдельности) и доставляет их на модуль. Если доставка сразу не удалась (сеть перегружена, модуль временно в "мертвой" зоне), попытки повторяются до тех пор, пока пакеты не будут доставлены. Именно тут формируется задержка в ситуации топикастера. Пакеты все же доставляются на модуль, но один за другим без пауз (но раздельно!), попадают в протокол TCP-стека, где буферизируются опять же раздельно. Затем модуль формирует URC и выдает результат. Вот тут они и склеиваются - из-за кривой реализации самого верхнего уровня - АТ-команд.

Вообще, работа со стеком через UART - зло. Используйте openAT, и получите несколько последовательных вызовов callback, что даст возможность зачитать пакеты раздельно. Используете внешний МК - перенесите часть логики в openAT, создав свои команды.
Не поленитесь освоить openAT: все будет просто, логично и избавит от львиной доли геморроя, постоянно поднимаемого в этой ветке форума, оно того стоит.
Go to the top of the page
 
+Quote Post
Daniil
сообщение Nov 28 2016, 05:42
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 3-09-04
Из: Russia, Novosibirsk
Пользователь №: 590



Цитата(GeGeL @ Nov 27 2016, 03:25) *
Сервер, как и положено, отсылает три раздельных UDP ответа. Интернет, как и положено, направляет их на гейт сотового оператора (тут добавлю, что теоретически очередность ответов может измениться, но это бывает чрезвычайно редко, и все же их будет три). Сотовый оператор буферизирует ответы (по отдельности) и доставляет их на модуль. Если доставка сразу не удалась (сеть перегружена, модуль временно в "мертвой" зоне), попытки повторяются до тех пор, пока пакеты не будут доставлены. Именно тут формируется задержка в ситуации топикастера. Пакеты все же доставляются на модуль, но один за другим без пауз (но раздельно!), попадают в протокол TCP-стека, где буферизируются опять же раздельно. Затем модуль формирует URC и выдает результат. Вот тут они и склеиваются - из-за кривой реализации самого верхнего уровня - АТ-команд.

Спасибо за подробный ответ.
Да, я пришел к этому же выводу. Пакеты склеивает модем.
При отправке UDP пакетов с небольшим интервалом друг за другом ситуация со склеиванием на стороне модема воспроизводится почти 100%.
Пока решил проблему костылями. Уже была мысль перенести часть логики на модем, но такое решение мне не показалось удобным. Вариант со своим стеком нравится больше, правда в данном случае не подходит, т.к. ресурсы MCU его изначально не предусматривали.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Nov 28 2016, 07:05
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



У ТС'а UDP. Попыток доставить такой стек не делает. Пропал Никодим да и заголовок с ним.
Рекомендую посмотреть и показать журнал (например HHD Free Serial Port Monitor) обмена с модемом во время инициализации [модема] и процессе обмена данными. У меня такого поведения не было ни на телитах,
ни на симкомах. Тоже использую командный режим и маленькие пакеты.
Go to the top of the page
 
+Quote Post
butthead2
сообщение Nov 29 2016, 12:13
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470



Так и не понял из-за чего сыр-бор развели. С UDP я никгда не работал, но в TCP симком так себя ведет со времен царя гороха.
Если идут серьезные задержки, то модем потом одновременно выдает все данные которые к нему пришли.

Господа программисты! Где написано что модем должен выдавать данные в виде пакетов? Ткните пожалуйста в строку документации.

Представьте что ваши данные сыпятся через проводок по UART непрерывным потоком и без пауз. Протокол работает? Значит и через модем будет работать. Не работает? В топку.
Делайте протоколы которые из потока символов однозначно восстанавливают свои пакеты и будет вам счастье.

пс. Модемы telit в этом плане ведут себя ровно так же как и симком. Да и в описании других я никогда не встречал никаких пакетов.
Так что задумайтесь "на чьей стороне проблема"
Go to the top of the page
 
+Quote Post
Alechek
сообщение Nov 29 2016, 12:52
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(butthead2 @ Nov 29 2016, 17:13) *
Господа программисты! Где написано что модем должен выдавать данные в виде пакетов? Ткните пожалуйста в строку документации.

Не ели UDP?Так зачем пытаетесь обсуждать его вкус?

Смотрим:
Цитата(SIM800 Series_AT Command Manual_V1.09 )
8.2.15 AT+CIPHEAD Add an IP Head at the Beginning of a Package Received

На русский перевести?

Да, автор не указал, какое значение у этой переменной.

Кстати, представители Симком может пояснят суть команды
8.2.25 AT+CIPUDPMODE UDP Extended Mode
?
Может в этом дело?
Go to the top of the page
 
+Quote Post
butthead2
сообщение Nov 29 2016, 13:10
Сообщение #29


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470



Цитата(Alechek @ Nov 29 2016, 15:52) *
Не ели UDP?Так зачем пытаетесь обсуждать его вкус?

Даже комментировать не хочется. Внешние отличия TCP от UDP в стеке можно на пальцах одной руки перечислить.

Цитата(Alechek @ Nov 29 2016, 15:52) *
8.2.15 AT+CIPHEAD Add an IP Head at the Beginning of a Package Received
На русский перевести?

А прочитать что там пониже в описании написано слабо? Или только название команды читаем? Или может на русский перевести?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 29 2016, 14:04
Сообщение #30


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (butthead2 @ Nov 29 2016, 16:10) *
Внешние отличия TCP от UDP в стеке можно на пальцах одной руки перечислить.
Начинайте перечислять. Главное отличие уже было названо: TCP - потоковый протокол, UDP - протокол датаграмм (что следует из его названия). И именно это отличие запрещает модему дробить и склеивать UDP-пакеты (датаграммы), в отличие от TCP. "Я так думаю!".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.0159 секунд с 7
ELECTRONIX ©2004-2016