Как определить общее количество загруженных данных + загрузка в TCP / IP - PullRequest
2 голосов
/ 22 мая 2009

Мне нужно рассчитать общий объем передачи данных при передаче данных фиксированного размера с клиента на сервер в TCP / IP. Он включает в себя подключение к серверу, отправку запроса, заголовок, получение ответа, получение данных и т. Д.

Точнее, как получить общую передачу данных при использовании методов POST и GET?

Есть ли какая-нибудь формула для этого? Хорошо подойдет даже теоретический подход (без учета потери пакетов или повторных попыток соединения)

К вашему сведению, я пробовал RFC2616 и RFC1180. Но те идут над моей головой.

Есть предложения?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 22 мая 2009

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

  • Опции TCP согласовываются между узлами при установлении соединения. Некоторые параметры (например, отметка времени) добавляют дополнительные данные в заголовок TCP
  • «Общий объем передачи данных» неясен. Ethernet, например, добавляет еще несколько бит поверх любого используемого IP. 802.11 (беспроводной) добавит еще больше. Так что HDLC или PPP переходят на T1. Даже не думай о Frame Relay. Некоторые ссылки могут использовать сжатие (что уменьшит общий размер). Общий размер зависит от того, где вы его измеряете, даже для одного пакета.
  • Предполагая, что вас просто интересует общий размер октета на уровне 2, и вы знаете параметры TCP, которые будут согласованы заранее, вы по-прежнему не можете знать MTU пути. Который может измениться, даже когда соединение установлено. Или, если вы не выполняете обнаружение MTU пути (что было бы странно), тогда пакет может где-то фрагментироваться, и удаленный конец увидит другой объем передачи данных, чем вы.

Я не уверен, зачем вам это знать, но я предлагаю:

  • Если вы просто хотите оценить, посмотрите типичное соединение в Wireshark. Рассчитайте процентное соотношение накладных расходов (по сравнению с размером данных, которые вы передали TCP и получили от TCP). Используйте это число для оценки: оно будет достаточно близко, за исключением патологических ситуаций.
  • Если вам необходимо точно знать, сколько данных ваш конечный пользователь передал и получил, используйте libpcap для захвата потока пакетов и проверки.
0 голосов
/ 22 мая 2009

Я бы сказал, в среднем, что запрос и ответ имеют около 8 строк заголовков в каждой и около 30 символов в строке. Затем учитывайте увеличение размера преобразования любого загруженного двоичного файла в Base64.

Вы не сказали, хотите ли вы также подсчитывать заголовки пакетов TCP, и в этом случае вы можете принять MTU около 1500, поэтому добавьте 16 байтов (заголовок tcp) на 1500 байтов данных

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

о, да, возможно, вам также потребуется разрешить кодирование deflate / gzip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...