Прогнозирование накладных расходов сетевого трафика, генерируемых приложением Java - PullRequest
1 голос
/ 18 апреля 2011

Я хочу попытаться подсчитать, сколько данных (байтов) я отправляю / получаю по сети. Я отправляю / получаю как TCP, так и UDP пакеты, поэтому мне нужно иметь возможность рассчитать размер этих пакетов, включая их соответствующие заголовки. Я посмотрел на следующие вопросы: Размер пустого пакета UDP и TCP и в нем указан минимальный размер заголовка, но стоит ли менять эту клевету? Должен ли я просто добавить количество байтов, которые я отправляю в пакете, но размер минимального заголовка? Кроме того, я знаю, что в какой-то момент (n байт) данные будут слишком большими, чтобы поместиться в один пакет.

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

Итак, мои вопросы, если предположить, что данные имеют длину n байтов:

1) Насколько большим будет TCP-пакет, при условии, что он умещается в один пакет?

2) Насколько большим будет пакет UDP, при условии, что он умещается в один пакет?

3) Есть ли простой способ определить количество байтов, которое потребуется для заполнения одного пакета? Для TCP и UDP.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Допустим, мы говорим только о Ethernet и IPv4

Look at your interface MTU, which has already subtracted 
    the size of the ethernet headers for the OS I can 
    remember (linux and FreeBSD)

Subtract 20 bytes for a normal IP header (no IP options)

Subtract 20 bytes for a normal TCP header

Or

Subtract 8 bytes for a UDP header

Именно столько данных вы можете упаковать в один пакет IPv4. Итак, если ваши данные TCP имеют длину n байт, ваша общая полезная нагрузка Ethernet составляет (n + 20 + 20); полезная нагрузка Ethernet для UDP составляет (n + 20 + 8).

РЕДАКТИРОВАТЬ ВОПРОСЫ

RE: MTU

MTU вашего интерфейса - это самая большая полезная нагрузка Ethernet, которую ваши драйверы позволят вам инкапсулировать в провод. Я вычитаю, потому что мы предполагаем, что мы начинаем с MTU и работаем над цепочкой инкапсуляции (то есть eth -> ip -> tcp|udp); Вы не можете отправлять TCP или UDP без IP-заголовка, поэтому это также необходимо учитывать.

RE: Расчет накладных расходов приложения

Теоретические расчеты накладных расходов, которые сгенерирует ваше приложение, хороши, но я предлагаю лабораторное тестирование , если вам нужны значащие числа. Факторы использования, такие как средняя скорость передачи данных за сеанс клиента , частота обращений клиентов в минуту и одновременных клиентов , могут иметь значение в некоторых (необычных) случаях.

0 голосов
/ 18 апреля 2011

К сожалению, это невозможно определить полностью. Пакеты могут быть разделены, повторно собраны и т. Д. Сетевым оборудованием по всему пути к получателю, поэтому нет точного расчета точного количества байтов.

Ethernet определяет размер кадра с 1500 байтами, что делает 1460 байтов оставшимися, если вычтены заголовки. Использование больших кадров размером до 9 Кбайт обычно поддерживается только локально. Когда пакет достигнет глобальной сети, он будет фрагментирован.

...