узнать скорость инет соединения используя пинг

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by PabloPicasso, 13 Jun 2010.

  1. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    Возможно ли узнать скорость инет соединения используя эхо запрос?
    Если можно установить размер нагрузки ICMP пакета до 65 000 байт и замерять время прохождения ответа, будет ли это реальной скоростью подключения?
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    не советовал бы так тестить. потому что ICMP мало надежный протокол, при этом он менее приоритетный и может фаером рубиться.
    Вообще быстрее просто приконнектится к серваку и запросить страницу большую.
     
  3. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    я пробовал замерять момент между началом загрузки страницы и нулевым размером буфера через таймер в отдельном потоке
    Code:
    Procedure timer(it.l)
    Repeat
    Delay(1)
    speedn.l = speedn.l + 1
    Until speedn.l = 10000
    EndProcedure
    
    InternetReadFile_(hURL,@Buffer, Len(Buffer), @Bytes)
    CreateThread(@timer(), 0)
    If Bytes = 0
    chk.d = Len(res)/speedn.l
    Debug Str(chk.d)+" Kb/s"
    EndIf
    
    но результат очень странный, при скорости 4 Мбит/с выдало в 2 раза меньше
    может дело в используемом сервере?
    побывал грузить длинные манулы с ripn.net и соглашение с гугла :)
     
  4. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Если Delay это аналог Sleep то процедура твоя половину времени спит
    ЗЫ Могу и ошибаться
     
  5. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    спит 1 мс в отдельном потоке а потом плюсует единицу в переменную, это для замера к-ва мсок с начала загрузки, код на PureBasic, я ток кусок привел, работает норм ;)

    я думаю дело в сервере, гугл и рипн режут скорость в зависимости от того какую страницу запрашивает юзер, мне нужен сервер который дает минимум 10 Мбит/с на загрузку страниц
     
  6. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    А если возложить эту задачу на сервис типа 2ip.ru?
     
  7. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    там каптча, да и изучать как оно работает нет времени
     
  8. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Я тебе к тому, что твоя процедура может неправильно считать время
    Я сделал тривиальный тест на дельфи:
    Все как у тебя: задержка, инкремент переменной
    Так вот, в сообщении выдало 1953. Т.е. этот цикл выполнялся в два раза дольше чем должен был (по твоим рассуждениям)
    Отсюда и у тебя неправильные результаты, типа скорость в 2 раза ниже.
    PS Это предположение
     
  9. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    нет, все четко, 10 секунд в цикле на глаз 10 секунд

    так понял что на делфи гдет лишнее время теряется
    у мя четко 10 сек
     
    #9 PabloPicasso, 13 Jun 2010
    Last edited: 13 Jun 2010
  10. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Inc - обычный инкремент.
    Т.е. увеличение целочисленной переменной на единицу
    Тоже самое что и i := i +1;
    Или те кто на бэйсике даже не знают что такое инкремент?
    Не пойму мне видео снять еще?
    Зачем мне врать то

    PS От твоего поста я еще больше убедился в своей правоте

    Сначала вычисляется GetTickCount - Old, и только потом в дело вступает ГУИ и выводит что уже было вычислено. Да и все равно, задержка не может быть такой большой
    Код в студию! Видать ты неправильно время измерил.
    Не забывай что во время выполнения процедуры происходит переключение контекста. Ты его не учитываешь, а ведь время то на него уходит
     
    #10 GhostOnline, 13 Jun 2010
    Last edited: 13 Jun 2010
  11. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    пардон, не заметил замер GetTickCount :)
    я знаю что такое инкремент, просто мой бейсик генерит ровный асм где я проверил что лишних задержек в потоке нет
    Делфи теряет время на что-то, попробуй вынести в поток и будет четко 1000 в переменной и GetTickCount больше на тысячу ;)
     
  12. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    да я знаю :D

    далеко от темы
     
    1 person likes this.
  13. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    нет, и вот почему.
    при пинге, скорость будет в каждый раз зависеть от прохождения пинга через роутинги до ЯйПи.
    и расхождение может быть разным - в разы отличатся.
     
    1 person likes this.
  14. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    спасибо за нормальный ответ :)
     
  15. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    Delay() аналог Sleep() в винде

    10 тысяч раз Sleep(1) в отдельном потоке = 10 секунд на наручных часах :D

    100 тысяч раз = 101 секунда из за инкремента переменной

    мне пох на эту погрешность ;)
     
    #15 PabloPicasso, 13 Jun 2010
    Last edited: 13 Jun 2010
  16. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    разобрался =)
    создал на фри хосте пхп который генерит 10 Кб текста, замерял, четко 4 Мбит/с =)
     
  17. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    GhostOnline, ты хоть когда-нибудь слышал, что такое потоки? Код ТСа не спит, как твой, а работает в два потока - один таймер, другой замеряет скорость. У тебя же все идет постепенно в одном потоке, из-за чего у тебя он выполняется в два раза дольше.

    По теме:

    ТС, реальную скорость интернета, соединяясь с одним сервером, ты не вычислишь никак. Все сервисы онлайн-проверки - этому подтверждение. Допустим, ты написал программу, которая скачивает 10 мбайт абсолютно ненужной информации с твоего русского сервера. Я запустил её у себя на компе (2 мбита, к примеру) - скачал за 40 секунд. Открыл на компьютере с аналогичной скоростью, но в Зимбабве - в 3 раза дольше качал, хотя скорость та же. Улавливаешь? Тут роль играет отдаленность А от Б, где А - комп, измеряемый скорость, Б - сервер измерения.

    А вообще, лучшими тестерами скорости являются p2p сети... Думаю, сам знаешь почему.
     
    #17 mailbrush, 13 Jun 2010
    Last edited: 13 Jun 2010
  18. mal41k

    mal41k New Member

    Joined:
    10 May 2010
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    получилось замерять точную скорость через 20 обращений к URL
    Code:
    "http://www.google.com/search?hl=ru&site=&q="+Str(Random(100))
    точность до 1 Кб/с но гуголь после нескольких таких тестов забанил, мол "your computer or network sending automated queries" :D
    гугл просто идеален для замеров, у него сервера почти во всех странах, вот только ругается собака

    вот пример: http://multi-up.com/289222

    з.ы. эвристика может орать типо Malware, прост нету полезной нагрузки, ток InternetOpen InternetOpenUrl InternetReadFile :)
     
    #18 mal41k, 14 Jun 2010
    Last edited: 14 Jun 2010
  19. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    есть вариант изящней )