Websocket дает различные номера в зависимости от ОС - PullRequest
0 голосов
/ 22 мая 2018

Я провожу небольшой тест, в котором каждые 0,5 секунды я отправляю клиенту короткую строку (4-8 байт) с сервера Node.js, используя ws .Клиент использует iOS / Android или веб-браузер.Клиент ничего не отправляет обратно на сервер, кроме TCP-ACKS.Странно то, что когда я отлаживаю приложение в iOS с помощью сетевого отчета XCode, я вижу только то, что клиент отправляет несколько байтов (около 500) при установлении соединения, вероятно, во время HTTP-рукопожатия.Оставшееся время нулевые данные отправляются с устройства, поступают только данные. Те же результаты достигаются при получении данных в Chrome и отслеживании данных с помощью Nettop.

Смущает то, чтона Android почти тот же объем данных, который поступает на устройство, уходит при проверке использования сети с помощью профилировщика Android / Battery Historian / TrafficStats.Я пытался использовать разные библиотеки для реализации Websocket и разных Android-устройств.

Мне трудно поверить, что ACKS, отправленные андроидом, такие же большие, как и полученное сообщение, хотя это всего лишь небольшая строка из четырех символов.

Итак, мои вопросы:

  1. Может ли случиться так, что сетевой отчет Nettop / XCode просто игнорирует все ACKS, поэтому в действительности столько данных отправляется вChrome / iOS как в Android?

  2. Что-то не так с библиотеками, используемыми в Android, или что-то с операционной системой?

  3. Может ли ACK быть таким же большим, как простой TCP-пакет с 4 символами в нем?

Результат ниже при использовании Websocket

Полученные / переданные данныепри использовании Android Battery Historian

Данные, полученные / переданные на iOS с использованием сетевого отчета enter image description here

1 Ответ

0 голосов
/ 22 мая 2018

Может ли ACK быть таким же большим, как простой TCP-пакет с четырьмя символами в нем?

ACK состоит из IP и заголовка TCP и не содержит полезной нагрузки.В случае IPv4 это означает, что заголовок IP не менее 20 байтов, а заголовок TCP 20 байтов, т.е. 40 байтов.Пакет с полезной нагрузкой 4 байта только больше на 4 байта, т.е. на 44 байта или всего на 10%.

Сетевой отчет в Android показывает 68350 против 61370 в байтах, что составляет разницу в 11%.Это соответствует ожидаемой разнице.

Я не знаю, что здесь измеряет iOS, но, вероятно, он либо измеряет только полезную нагрузку приложения (т.е. 4 байта), либо просто игнорирует пакеты без полезной нагрузки, то есть ACK.

...