Как узнать время прохождения пакета по сети
Модератор: Модераторы разделов
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
Как узнать время прохождения пакета по сети
Команда ping показывает время приема передачи пакета до хоста, а можно этот параметр выцепить средствами Qt ?
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Как узнать время прохождения пакета по сети
ICMP-пинг, насколько я знаю, в Qt отсутствует (могу ошибаться), однако время, необходимое для успешного установления tcp-соединения, обычно можно считать равным времени пинга.
-
stampoon
- Сообщения: 702
- ОС: Mandrake/Mandriva Cooker
Re: Как узнать время прохождения пакета по сети
/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: Как узнать время прохождения пакета по сети
Обоснуйте. Единственная помеха здесь - то, что сервер может не сразу "захотеть" ответить на соединение, но для более-менее грамотно написанных серверов эта задержка незначительна.
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
Re: Как узнать время прохождения пакета по сети
Решил пойти по пути наименьшего сопротивления, т.е. через QProcess запускать ping.
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Как узнать время прохождения пакета по сети
/dev/random писал(а): ↑09.11.2009 09:41
Обоснуйте. Единственная помеха здесь - то, что сервер может не сразу "захотеть" ответить на соединение, но для более-менее грамотно написанных серверов эта задержка незначительна.
TCP и ICMP работают на разных уровнях)
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Как узнать время прохождения пакета по сети
И что с того? Как это повлияет на время доставки ответного пакета?
-
apple
- Сообщения: 126
Re: Как узнать время прохождения пакета по сети
На одном на транспортном (в терминологии OSI)
tcp ping даже лучше. на хопах может быть разный приоритет для tcp и icmp.
время задержки для tcp обьективнее показывает загрузку канала.
..
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Как узнать время прохождения пакета по сети
/dev/random писал(а): ↑10.11.2009 15:49
И что с того? Как это повлияет на время доставки ответного пакета?
TCP - протол с логическим установленим соеденения, что ты собрался им мерить?!
Читай про TCP и ICMP до просветвления
Да неужели?! Где это такое?! Хочу посмотреть!
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Как узнать время прохождения пакета по сети
То же самое могу посоветовать тебе.
кодировщик писал(а): ↑10.11.2009 16:06TCP - протол с логическим установленим соеденения, что ты собрался им мерить?!
Время между отправкой syn и получением syn-ack
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Как узнать время прохождения пакета по сети
Мне интересно как это
И сравним результат с ICMP
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Как узнать время прохождения пакета по сети
Да очень просто. Просто законнектиться. conect() немедленно после вызова отправляет syn и ждёт syn-ack. Получив syn-ack, он отправляет ack (на что уходит всего несколько тактов, т.к. пакет просто добавляется в очередь на отправку) и немедленно возвращает управление. Таким образом, время между вызовом и возвратом из connect() равно времени между отправкой syn и получением syn-ack. Следовательно, нужно просто засечь, сколько времени выполнялся connect().
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Как узнать время прохождения пакета по сети
/dev/random писал(а): ↑10.11.2009 16:23
Да очень просто. Просто законнектиться. conect() немедленно после вызова отправляет syn и ждёт syn-ack. Получив syn-ack, он отправляет ack (на что уходит всего несколько тактов, т.к. пакет просто добавляется в очередь на отправку) и немедленно возвращает управление. Таким образом, время между вызовом и возвратом из connect() равно времени между отправкой syn и получением syn-ack. Следовательно, нужно просто засечь, сколько времени выполнялся connect().
Ну вот когда ты будеш конектиться тут и произойдёт твоё 3-фазное рукопожатие, соеденение будет установлено,
куда потом слать syn?! syn-ack уже ты не получишь. Но а перед этим когды ты будешь заполнять структуру для функции connect, тебе нужно будет заполнить структуру типа sockaddr_in, откуда ты будешь знать на какой порт конектиться?!
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Как узнать время прохождения пакета по сети
Зачем слать? Его уже 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: Как узнать время прохождения пакета по сети
Предлагаю обойтись без оскорблений. Жаль, что я не в этом разделе модератор.
кодировщик писал(а): ↑10.11.2009 17:14Ты никогда не узнаешь куда конектиться если не знаешь какой порт нужно использовать.
Это можно спросить у пользователя, или даже знать исходя из того, что это за сервер (опять ссылаюсь на пример с игровыми серверами).
Кто сказал, что в данном случае неизвестна?
То, что если пинг - лишь маленькая часть функционала большой программы (как, например, при выборе сервера с лучшим пингом для коннекта. Да, опять тот же пример), вряд ли кто-то будет ставить на неё SUID.
кодировщик писал(а): ↑10.11.2009 17:14Никогда не замечал что для таких умников специально после операций с сокетом сделана функция
setuid(getuid());
А если за время работы программы пинговать нужно не один раз? А мы уже сбросили права?
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Как узнать время прохождения пакета по сети
/dev/random писал(а): ↑10.11.2009 17:29
Предлагаю обойтись без оскорблений. Жаль, что я не в этом разделе модератор.
кодировщик писал(а): ↑10.11.2009 17:14Ты никогда не узнаешь куда конектиться если не знаешь какой порт нужно использовать.
Это можно спросить у пользователя, или даже знать исходя из того, что это за сервер (опять ссылаюсь на пример с игровыми серверами).
Кто сказал, что в данном случае неизвестна?
То, что если пинг - лишь маленькая часть функционала большой программы (как, например, при выборе сервера с лучшим пингом для коннекта. Да, опять тот же пример), вряд ли кто-то будет ставить на неё SUID.
кодировщик писал(а): ↑10.11.2009 17:14Никогда не замечал что для таких умников специально после операций с сокетом сделана функция
setuid(getuid());
А если за время работы программы пинговать нужно не один раз? А мы уже сбросили права?
1. Я не кого не оскорблял, а говорил только за написанное
2. Как спросить у пользователя если я его не знаю, и он находиться на другом конце земного шара?! Интересно тут все так пингуют, сначала звонят спрашивают "А какой у вас сервер?!.....и как он работает?!"
3. А тогда как человек будет играть по сети?! Если ему ничего не известно?!
4. Я в игры не играю, поэтому не знаю как выбираются сервера ), но уверен что выбираются не от пинга)
5. Права устанавливаються только для сокета и сетевого интерфейса, дальше они не нужны, и они сбрасываються на права текущего пользователя! и пинговать можно потом аж до пенсии