Модуль 4G
Модуль 4G

Ebyte — национальное высокотехнологичное предприятие, специализирующееся на исследованиях и разработках беспроводных модулей и промышленных IoT-терминалов.

Почему TCP придерживается пакетов? Как решить проблему липкой сумки?

Поскольку технология Интернета вещей (IoT) продолжает развиваться, TCP (протокол управления передачей) играет ключевую роль в обеспечении надежной и упорядоченной передачи данных в IoT.



С непрерывным развитием технологии Интернета вещей (IoT) количество подключенных устройств и датчиков резко возросло, а потребность в надежной передаче данных и управлении связью становится все более актуальной. В этом все более взаимосвязанном мире протокол TCP (протокол управления передачей) играет ключевую роль, обеспечивая надежную и упорядоченную передачу данных для Интернета вещей.

В наших приложениях, использующих протокол TCP, часто возникает проблема липких пакетов. Проще говоря, так называемый липкий пакет означает, что у меня есть два сообщения.Код на отправляющей стороне, очевидно, отправляется два раза, но принимающая сторона получает два сообщения одновременно. Такая ситуация очень распространена как в индустрии встраиваемых систем, так и в индустрии Интернета.


Почему протокол TCP придерживается пакетов?

Тогда вам нужно сначала понять определение TCP. TCP (протокол управления передачей) — это ориентированный на соединение надежный протокол связи транспортного уровня на основе байтовых потоков. TCP устанавливает соединение на обоих концах связи и обеспечивает надежную передачу данных с помощью различных технических средств, таких как порядковые номера, ответы-подтверждения и механизмы повторной передачи. Эти характеристики делают TCP идеальным протоколом связи в среде Интернета вещей.

Проблемы Интернета вещей и ответ TCP

Надежная передача данных

Устройства Интернета вещей часто распределены по обширной географической территории и включают в себя множество датчиков, встроенных устройств и контроллеров. Эти устройства могут подвергаться воздействию нестабильной сетевой среды, например беспроводных сетей, сетей с низкой пропускной способностью и т. д. Благодаря надежному механизму передачи TCP гарантирует, что данные смогут достичь места назначения в целости и сохранности даже в нестабильных условиях сети.
Управление потоком и контроль перегрузки

В Интернете вещей большое количество и разнообразие устройств может привести к перегрузке сети и перегрузке трафика. Механизмы управления потоком и контроля перегрузки TCP могут регулировать скорость отправки данных, чтобы предотвратить перегрузку сети и обеспечить стабильность всей системы.
Работайте вместе с несколькими устройствами

В Интернете вещей различные типы устройств должны работать вместе для реализации интеллектуальных функций. Функция полнодуплексной связи TCP обеспечивает двустороннюю связь между устройствами, помогая добиться эффективного сотрудничества между устройствами. Это особенно важно для сценариев, требующих обмена данными в режиме реального времени, таких как умные дома, промышленная автоматизация и т. д.

Среди них протокол TCP, который имеет наибольшую связь с липкими пакетами, основан на функции потоков байтов. Поток байтов можно понимать как данные, передаваемые по двунаправленному каналу.Эти данные на самом деле являются тем, что мы часто называем двоичными данными.Проще говоря, это множество строк 01. Между этими строками 01 нет границ.


Данные, передаваемые с прикладного уровня в протокол TCP, передаются хосту назначения не в блоках сообщений, а в нисходящем направлении в виде потоков байтов.Эти данные могут быть разрезаны и собраны в различные пакеты данных, а принимающая сторона получает эти предыдущие сообщения не были корректно восстановлены после пакета данных, поэтому произошло зависание пакета.

Так почему же его нельзя восстановить корректно? Есть две основные причины:


1. Причины на стороне отправки

Когда отправитель собирает сообщение, он объединяет несколько небольших пакетов в один пакет, поэтому принимающая сторона, естественно, не может анализировать небольшие пакеты. Это соответствует алгоритму Нэгла. Поскольку TCP и алгоритм Нэгла являются продуктами прошлого века, использование этого в ранних сетях может значительно снизить нагрузку на сеть. В противном случае частая отправка небольших пакетов длиной всего в несколько байт приведет к серьезному снижению производительности ввода-вывода в сети.

Однако в современном Интернете производительность сети значительно улучшилась.Похоже, что производительность ввода-вывода, улучшенная алгоритмом Нэгла, не так уж важна.Напротив, из-за ожидания объединения данных задержка передачи станет больше , При использовании онлайн-игр это сильно повлияет на впечатления. Так теперь он вообще отключен.

2. Причины на принимающей стороне

После того, как принимающая сторона получит сообщение, уровень приложения не всегда может немедленно забрать данные, и всегда будет буфер приема. Если интервал между двумя независимыми сообщениями, поступающими в буфер, слишком мал и прикладной уровень не может получить последнее сообщение между двумя сообщениями, то при следующем его чтении два пакета сообщений неизбежно будут считаны одновременно. что также вызывает липкие мешки.


И этой ситуации нельзя избежать, позволяя отправителю отправлять пакеты равномерно по времени, поскольку из-за существования нестабильности сети даже пакеты данных, отправленные равномерно по времени, могут случайно появляться на принимающей стороне.


Как избежать негативного воздействия липких пакетов?

На основе приведенного выше анализа нетрудно прийти к выводу, что предотвратить проблему липких пакетов в принципе невозможно. Даже если отправитель и получатель могут контролировать себя, процесс сетевой передачи контролировать сложно.

Но даже если проблема липких пакетов существует, она не повлияет на наше широкомасштабное использование протокола TCP. Потому что с этой проблемой очень легко справиться на уровне приложения. Есть примерно две идеи:

1. Добавьте специальные флаги в качестве разделителей в сообщении.

Таким образом, когда уровень приложения обнаружит специальный разделитель, он будет знать, что это начало и конец пакета, и сможет выполнять такие операции, как фрагментация, и проблема будет решена.

Однако в этом есть некоторые недостатки. Например, если разделитель определен как «12345678», что, если в содержимом сообщения появится строка «12345678»? Это приведет к ненормальной нарезке сообщения, что приведет к ошибке в полученном сообщении. Но если вы можете контролировать содержимое сообщения и следить за тем, чтобы в нем не появлялось «12345678», этот метод является более гибким.

2. Добавьте длину сообщения

Считайте информацию о длине сообщения на основе согласованного поля длины, а затем прочитайте содержимое сообщения на основе информации о длине сообщения. Это также очень распространенный метод, отраженный во многих протоколах.

3. Добавьте заголовок пакета.

Отправляющая сторона добавляет заголовок пакета к каждому пакету данных. Заголовок должен содержать как минимум длину пакета данных. Таким образом, после получения данных принимающая сторона может узнать фактическую длину каждого пакета данных, прочитав длину поле заголовка пакета.

Ebyte стремится помогать более эффективному развитию Интернета вещей, интеллекта и автоматизации каждый день, а также улучшать использование ресурсов. Если вы хотите узнать больше о продуктах и ​​дополнительной информации, вы можете войти на наш официальный сайт: https:/ /www.ru-ebyte.com имеет специальную службу поддержки, которая ответит на ваши вопросы онлайн!

CC BY-NC-ND 4.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论