скорость отправки

Тема в разделе "WASM.NETWORKS", создана пользователем was_log_a, 16 апр 2005.

  1. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    Хочу сделать обмен файлами с максимальной скоростью.



    У меня есть такая идея-вызывать send максимальное количество раз,

    если она вернет SOCKET_ERROR,а WSAGetLastError-WSANOBUFS,то уменьшить кол-во вызовов send в секунду,скажем,на 30% и сделать небольшую паузу,а через некоторое время попробовать снова поднять скорость.



    У кого-нибудь есть другие мнения?
     
  2. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia




    TransmitFile
     
  3. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    А неблокирующие сокеты ?!
     
  4. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    TransmitFile не подходит. :-(

    Сокеты и так неблокирующие.



    Ладно,задам вопрос по-другому: как сервер (FTP или HTTP) решает,сколько байт

    отправлять в единицу времени?То есть,как выбирать оптимальную скорость отправки

    пакетов?
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Наверное через настройки протокола, как же иначе.
     
  6. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Протокол TCP в первую очередь и создавали ради оптимизации скорости передачи. Почитай сам RFC на TCP - там много чего интересного.



    В общих чертах - начинаем увеличивать скорость передачи данных в 1.2 раза каждый интервал времени (например, раз в 5 секунд), если вдруг пакеты "затормозились" - сокращаем скорость в два раза и затем по-новой. Получается наподобие игр в догонялки с пропускной способностью канала.



    Тот факт, что пакеты "затормозились" определяется потерей квитков, получаемых от дальней стороны в заголовке обратного потока. Кроме того, отправитель может отправить не более чем WindowSize байт, не получив квитка приема.



    В общем, читай - "алгоритм Нейгла (Nagle)" и "окна TCP".
     
  7. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    Это всё,насколько я понял, на уровне протокола TCP.

    А как это сделать на уровне Winsock ?
     
  8. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Как насчет UDP и собственного квитирования ... ?
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.553
    Адрес:
    Russia
    was_log_a

    Можно свой протокол создать со своими преимуществами ...

    Или например создать собственную схему протолкола , вложенного в IP (создавая простой сокет) только смысл от этого ?

    Мне например всегда казалось что скорочть посылки определяется сетевым адаптером .. или точнее драйверами сетевого адаптера ..
     
  10. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    2TermoSINteZ



    Вот про сетевой адаптер ты немного неправ. Ты отправляешь пакеты в локальную сеть. Ее пропускная способность обычно достаточно высока. А где-то на магистральных каналах, например, в 5 хопах от тебя случилось переполнение по суммарному объему трафика. И вот маршрутизатор копит, копит пакеты у себя в буфере (от 64 кб до нескольких Мегабайт), но если переполнение не рассосалось за скажем 5 секунд, он начинает пакеты дропать.



    И в гетерогенных сетях типа Интернета твой сетевой адаптер никогда не узнает об этом дропании, поскольку механизмы сигнализации о переполнениях еще более ли менее разработаны в рамках сетей одного протокола, типа FrameRelay, ATM Или MPLS, а вот на стыке разных канальных протоколов на сегодняшний день полный бардак.



    Путь решения этой задачи только один - от верхнего уровня, то есть пляшем от недоставки пакета. Чистый UDP вообще никогда не узнает, о том, что его пакет дропнулся из-за переполнения по трафику. TCP узнает отсутствием квитка приема. Ну и конечно же ты сам можешь что-нибудь прикрутить поверх того же UDP или даже IP с какой-нибудь лавинной отправкой (более/менее интеллектуальной конечно), а затем доотправкой недошедших пакетов на основании битов в пакете-квитке.
     
  11. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    OLS

    Зато udp летают шустрее tcp.
     
  12. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    2Noname:



    Я где-то говорил обратное ?!
     
  13. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    NoName

    а теперь подумай ПОЧЕМУ :)
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.553
    Адрес:
    Russia
    ^) xexe ) дак у них приоритет выще
     
  15. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    чего?
     
  16. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    TermoSINteZ

    хм.. интересная гипотеза :)





    если много мелких сообщений -- безусловно. потому что tcp -- это протокол с установкой соединения, а udp -- без оной.
     
  17. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia




    2TermoSINteZ:

    сколько на своем веку трафика перевидал и очередей приоритезации на маршрутизаторах понастраивал - а твою мысль ни разу на практике не встречал



    И даже если ты ручками поле Class-of-Service настроишь для подобных пакетов в момент отправки с компьютера, нормальный маршрутизатор все равно его нулю выставит ("выбелит"), а "раскраску" сам произведет по своим правилам приоритетов. То же самое с полем ToS в IEEE 802.1q . Ибо производители маршрутизаторов уже достаточно пообжигались на всяких левых программках, которые каналы передачи данных парализуют своими с потолка взятыми приоритетами, и теперь по умолчанию максимальный приоритет передачи имеет только ICMP и служебные пакеты протоколов маршрутизации.
     
  18. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229


    может было проще сказать ICMP & IGMP?
     
  19. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    ... ну почему, я последнее время с OSPF-ом в основном работаю, а в сетях побольше BGP-пакеты с приоритетом бегают
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.553
    Адрес:
    Russia
    OLS

    Я имел ввиду что upd пакеты имеют более высокий приоритет чем tcp ..

    цитирую из довольно неьезызвестного источника :

    UDP-наводнение



    Этот тип атаки "отказ в обслуживании" использует бессеансовый режим протокола UDP. Злоумышленник генерирует большое количество UDP-пакетов ("шторм UDP-пакетов"), направленных на одну или две машины. В результате происходит перегрузка сети и целевых машин. Эффективность данной атаки особенно высокая, поскольку UDP-трафик приоритетнее TCP-трафика.



    хм.. ваши коментарии