Как я могу сравнить TCP и UDP, используя C? - PullRequest
4 голосов
/ 28 февраля 2010

Я хочу измерить задержку сообщения и пропускную способность для и TCP и UDP с использованием сокетов C. Я пишу client.c и server.c (Вопрос 1: должен ли я?), Которые выполняются на разных серверах для достижения этой цели. Я должен сделать несколько измерений, используя разные размеры пакетов и несколько испытаний, и построить результаты.

Для задержки сообщения: Отправьте пакет разного размера и измерьте время прохождения сигнала в оба конца и разделите на 2, чтобы получить задержку. Вопрос 2: Я отправляю пакет размером x, а затем с сервера. С отправляю пакет обратно. Таким образом, на клиенте я запускаю таймер, отправляю пакет и затем жду, пока я получу пакет, затем останавливаю таймер. Таймер / 2 - это моя задержка? Какие шаги нужно предпринять, чтобы измерить это?

Для пропускной способности: Вопрос 3: Как бы я измерил пропускную способность обоих? Какие шаги нужно предпринять для этого?

Я новичок в программировании сокетов Unix на C, так что подробности были бы полезны, с акцентом на аспект bechnmarking.

РЕДАКТИРОВАТЬ: я не могу использовать инструменты, которые уже существуют. Мне нужно написать свое.

Спасибо!

Ответы [ 4 ]

1 голос
/ 28 февраля 2010

Уже существует программа с именем ttcp , которая проверяет производительность TCP и UDP:

ОПИСАНИЕ

Ttcp раз передачи и приема данных между двумя системы, использующие протоколы UDP или TCP.

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

Обновление: другие подобные программы тестирования TCP

а также связанные программы

1 голос
/ 28 февраля 2010

Вопрос 1: Вероятно, вы можете найти существующие тестовые случаи с некоторым использованием Google. Но если есть особые ситуации, с которыми вам нужно разобраться, то, вероятно, имеет смысл написать свою собственную, чтобы вы приняли это во внимание.

Вопрос 2: Возможно, существует официальное определение «задержки» в терминах сетевых операций, но я думаю, что действительно важно, это стоимость туда и обратно. Так что я бы не делил на 2. Общая стоимость туда-обратно - это то, что испытывает пользователь (клиент). Это будет латентность, которую они видят.

Вопрос 3: Я думаю, что ваш план использования пакетов разных размеров хорош для измерения пропускной способности. еще один вопрос , связанный с этим. Я опубликовал ответ на этот вопрос и привел некоторые цифры из моего собственного тестирования UDP и TCP. Они могут представлять интерес как контрольно-пропускной пункт "здравомыслие".

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

0 голосов
/ 10 марта 2010
0 голосов
/ 28 февраля 2010

Возможно, вы захотите взглянуть на инструменты, которые уже существуют для этого типа вещей.Может быть D-ITG или iperf в сочетании с tcpdump или wireshark?Если вы не хотите узнать больше о программировании сокетов.

...