Как узнать время прохождения пакета по сети

Модератор: Модераторы разделов

zayac_val
Сообщения: 38
ОС: openSuse10.3

Как узнать время прохождения пакета по сети

Сообщение zayac_val »

Команда ping показывает время приема передачи пакета до хоста, а можно этот параметр выцепить средствами Qt ?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Как узнать время прохождения пакета по сети

Сообщение /dev/random »

ICMP-пинг, насколько я знаю, в Qt отсутствует (могу ошибаться), однако время, необходимое для успешного установления tcp-соединения, обычно можно считать равным времени пинга.
Спасибо сказали:
stampoon
Сообщения: 702
ОС: Mandrake/Mandriva Cooker

Re: Как узнать время прохождения пакета по сети

Сообщение stampoon »

/dev/random писал(а):
08.11.2009 08:03
время, необходимое для успешного установления tcp-соединения, обычно можно считать равным времени пинга.

усредненному значению времени пинга :)
Интеллект — это способность избегать выполнения работы, но так, чтобы она при этом была сделана.
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как узнать время прохождения пакета по сети

Сообщение кодировщик »

/dev/random писал(а):
08.11.2009 08:03
однако время, необходимое для успешного установления tcp-соединения, обычно можно считать равным времени пинга.

Бред.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Как узнать время прохождения пакета по сети

Сообщение /dev/random »

кодировщик писал(а):
09.11.2009 09:36
Бред.

Обоснуйте. Единственная помеха здесь - то, что сервер может не сразу "захотеть" ответить на соединение, но для более-менее грамотно написанных серверов эта задержка незначительна.
Спасибо сказали:
zayac_val
Сообщения: 38
ОС: openSuse10.3

Re: Как узнать время прохождения пакета по сети

Сообщение zayac_val »

Решил пойти по пути наименьшего сопротивления, т.е. через QProcess запускать ping.
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как узнать время прохождения пакета по сети

Сообщение кодировщик »

/dev/random писал(а):
09.11.2009 09:41
кодировщик писал(а):
09.11.2009 09:36
Бред.

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

TCP и ICMP работают на разных уровнях)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Как узнать время прохождения пакета по сети

Сообщение /dev/random »

кодировщик писал(а):
10.11.2009 15:45
TCP и ICMP работают на разных уровнях)

И что с того? Как это повлияет на время доставки ответного пакета?
Спасибо сказали:
Аватара пользователя
apple
Сообщения: 126

Re: Как узнать время прохождения пакета по сети

Сообщение apple »

кодировщик писал(а):
10.11.2009 15:45
TCP и ICMP работают на разных уровнях)

На одном на транспортном (в терминологии OSI)
tcp ping даже лучше. на хопах может быть разный приоритет для tcp и icmp.
время задержки для tcp обьективнее показывает загрузку канала.
..
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как узнать время прохождения пакета по сети

Сообщение кодировщик »

/dev/random писал(а):
10.11.2009 15:49
кодировщик писал(а):
10.11.2009 15:45
TCP и ICMP работают на разных уровнях)

И что с того? Как это повлияет на время доставки ответного пакета?

TCP - протол с логическим установленим соеденения, что ты собрался им мерить?!
Читай про TCP и ICMP до просветвления :)

apple писал(а):
10.11.2009 15:59
На одном на транспортном (в терминологии OSI)

Да неужели?! Где это такое?! Хочу посмотреть!
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Как узнать время прохождения пакета по сети

Сообщение /dev/random »

кодировщик писал(а):
10.11.2009 16:06
Читай про TCP и ICMP до просветвления :)

То же самое могу посоветовать тебе.

кодировщик писал(а):
10.11.2009 16:06
TCP - протол с логическим установленим соеденения, что ты собрался им мерить?!

Время между отправкой syn и получением syn-ack
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как узнать время прохождения пакета по сети

Сообщение кодировщик »

/dev/random писал(а):
10.11.2009 16:07
Время между отправкой syn и получением syn-ack

Мне интересно как это :) покажи как это ты собрался делать?!
И сравним результат с ICMP :)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Как узнать время прохождения пакета по сети

Сообщение /dev/random »

кодировщик писал(а):
10.11.2009 16:14
Мне интересно как это :) покажи как это ты собрался делать?!

Да очень просто. Просто законнектиться. conect() немедленно после вызова отправляет syn и ждёт syn-ack. Получив syn-ack, он отправляет ack (на что уходит всего несколько тактов, т.к. пакет просто добавляется в очередь на отправку) и немедленно возвращает управление. Таким образом, время между вызовом и возвратом из connect() равно времени между отправкой syn и получением syn-ack. Следовательно, нужно просто засечь, сколько времени выполнялся connect().
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как узнать время прохождения пакета по сети

Сообщение кодировщик »

/dev/random писал(а):
10.11.2009 16:23
кодировщик писал(а):
10.11.2009 16:14
Мне интересно как это :) покажи как это ты собрался делать?!

Да очень просто. Просто законнектиться. conect() немедленно после вызова отправляет syn и ждёт syn-ack. Получив syn-ack, он отправляет ack (на что уходит всего несколько тактов, т.к. пакет просто добавляется в очередь на отправку) и немедленно возвращает управление. Таким образом, время между вызовом и возвратом из connect() равно времени между отправкой syn и получением syn-ack. Следовательно, нужно просто засечь, сколько времени выполнялся connect().

Ну вот когда ты будеш конектиться тут и произойдёт твоё 3-фазное рукопожатие, соеденение будет установлено,
куда потом слать syn?! syn-ack уже ты не получишь. Но а перед этим когды ты будешь заполнять структуру для функции connect, тебе нужно будет заполнить структуру типа sockaddr_in, откуда ты будешь знать на какой порт конектиться?! :) А если на комне не будет запущено ни одной службы?! В общем не изобретай велосипед с трёхугольными колёсами, а пользуйся стандартными средствами!
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Как узнать время прохождения пакета по сети

Сообщение /dev/random »

кодировщик писал(а):
10.11.2009 16:39
куда потом слать syn?! syn-ack уже ты не получишь.

Зачем слать? Его уже connect() отослал. И syn-ack он уже получил. И мы уже измерили время его работы и получили значение пинга. Работа УЖЕ завершена. Больше ничего делать на надо.

кодировщик писал(а):
10.11.2009 16:39
В общем не изобретай велосипед с трёхугольными колёсами, а пользуйся стандартными средствами!

Сам ты велосипед с треугольными колёсами. Этот метод не я придумал, он широко используется, например, в онлайн-играх при выборе сервера для коннекта. А полноценная работа с ICMP доступна только руту. Никогда не замечал, что на /bin/ping SUID стоит?
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как узнать время прохождения пакета по сети

Сообщение кодировщик »

/dev/random писал(а):
10.11.2009 16:50
Зачем слать? Его уже connect() отослал. И syn-ack он уже получил. И мы уже измерили время его работы и получили значение пинга. Работа УЖЕ завершена. Больше ничего делать на надо.

Ты уже сам запутался в бреде который пишешь, читай внимательно, попробуй написать кусок такого кода, это будет для тебя не тяжело наверно, я уверен. Ты никогда не узнаешь куда конектиться если не знаешь какой порт нужно использовать. Приведи пример структуры sockaddr_in для функции connect?!

/dev/random писал(а):
10.11.2009 16:50
Сам ты велосипед с треугольными колёсами. Этот метод не я придумал, он широко используется, например, в онлайн-играх при выборе сервера для коннекта.

Там им известна работа самого сервера, и идёт просто установка соеденения, а не пинг )

/dev/random писал(а):
10.11.2009 16:50
А полноценная работа с ICMP доступна только руту. Никогда не замечал, что на /bin/ping SUID стоит?

Ну и что, что там стоит бит SUID?!
Никогда не замечал что для таких умников специально после операций с сокетом сделана функция
setuid(getuid()); :)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Как узнать время прохождения пакета по сети

Сообщение /dev/random »

кодировщик писал(а):
10.11.2009 17:14
Ты уже сам запутался в бреде который пишешь

Предлагаю обойтись без оскорблений. Жаль, что я не в этом разделе модератор.

кодировщик писал(а):
10.11.2009 17:14
Ты никогда не узнаешь куда конектиться если не знаешь какой порт нужно использовать.

Это можно спросить у пользователя, или даже знать исходя из того, что это за сервер (опять ссылаюсь на пример с игровыми серверами).

кодировщик писал(а):
10.11.2009 17:14
Там им известна работа самого сервера

Кто сказал, что в данном случае неизвестна?

кодировщик писал(а):
10.11.2009 17:14
Ну и что, что там стоит бит SUID?!

То, что если пинг - лишь маленькая часть функционала большой программы (как, например, при выборе сервера с лучшим пингом для коннекта. Да, опять тот же пример), вряд ли кто-то будет ставить на неё SUID.

кодировщик писал(а):
10.11.2009 17:14
Никогда не замечал что для таких умников специально после операций с сокетом сделана функция
setuid(getuid()); :)

А если за время работы программы пинговать нужно не один раз? А мы уже сбросили права?
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Как узнать время прохождения пакета по сети

Сообщение кодировщик »

/dev/random писал(а):
10.11.2009 17:29
кодировщик писал(а):
10.11.2009 17:14
Ты уже сам запутался в бреде который пишешь

Предлагаю обойтись без оскорблений. Жаль, что я не в этом разделе модератор.

кодировщик писал(а):
10.11.2009 17:14
Ты никогда не узнаешь куда конектиться если не знаешь какой порт нужно использовать.

Это можно спросить у пользователя, или даже знать исходя из того, что это за сервер (опять ссылаюсь на пример с игровыми серверами).

кодировщик писал(а):
10.11.2009 17:14
Там им известна работа самого сервера

Кто сказал, что в данном случае неизвестна?

кодировщик писал(а):
10.11.2009 17:14
Ну и что, что там стоит бит SUID?!

То, что если пинг - лишь маленькая часть функционала большой программы (как, например, при выборе сервера с лучшим пингом для коннекта. Да, опять тот же пример), вряд ли кто-то будет ставить на неё SUID.

кодировщик писал(а):
10.11.2009 17:14
Никогда не замечал что для таких умников специально после операций с сокетом сделана функция
setuid(getuid()); :)

А если за время работы программы пинговать нужно не один раз? А мы уже сбросили права?

1. Я не кого не оскорблял, а говорил только за написанное :)
2. Как спросить у пользователя если я его не знаю, и он находиться на другом конце земного шара?! Интересно тут все так пингуют, сначала звонят спрашивают "А какой у вас сервер?!.....и как он работает?!"
3. А тогда как человек будет играть по сети?! Если ему ничего не известно?!
4. Я в игры не играю, поэтому не знаю как выбираются сервера ), но уверен что выбираются не от пинга)
5. Права устанавливаються только для сокета и сетевого интерфейса, дальше они не нужны, и они сбрасываються на права текущего пользователя! и пинговать можно потом аж до пенсии :) Ты не поверишь, но так работают все программы!!!
Спасибо сказали: