Сроки отправки и получения одного и того же пакета - PullRequest
0 голосов
/ 22 ноября 2011

Хотелось бы узнать, как быстро происходит задержка системы, отправив пакет с тем же IP-адресом назначения, что и IP-адрес источника.Это относительно просто сделать?

Как бы вы создали пакеты на заказ?

Даст ли установка двух IP-адресов то, что мне нужно?

Каков наилучший метод синхронизации?

Любые советы / идеи на низком / высоком уровне были бы весьма полезныоценили.Я намереваюсь использовать C / C ++ в Unix с библиотеками boost и libpcap.

EDIT: я должен добавить, что буду делать это в домашней сети, за маршрутизатором.Я предполагаю, что пакет отправится к маршрутизатору и сразу вернется, если я буду использовать 192.168.2.1 (локальный IP-адрес моей системы) для адресов источника и назначения.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2011

Вы можете просто попробовать пинговать свой собственный IP.это произведет ICMP-пакеты.Существуют библиотеки, которые также позволяют вам делать то же самое из приложения.

Если вы хотите создавать пакеты для себя, вы можете использовать сокет API.Помните, что вы можете отправлять IP-адрес источника и IP-адрес назначения как один и тот же, но номер порта должен отличаться.

Для синхронизации вам может понадобиться функция gettimeofday.

РЕДАКТИРОВАТЬ: вы можете пинговать из вашей программы C ++.Смотрите: http://verplant.org/liboping/ или посетите другой форум.Причина, по которой я подчеркнул ping, заключается в том, что он возвращается обратно из сетевого стека.Если вы отправляете пакет UDP с другой стороны, ожидая, что приложение вернется и выдает эхо, тогда время обработки пакета на сервере прослушивания будет добавлено.

Если вы пропингуете IP-адрес локальной машины (или даже lo), он возвращает без переключения или маршрутизатора следующего перехода.Он будет реагировать, даже если вы удалите кабель Eth или Wi-Fi.

То, что вы пытаетесь сделать, реализовано в демоне NTP с протоколом NTP.

0 голосов
/ 22 ноября 2011

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

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

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