Надежный принцип измерения пропускной способности интернет соединения от клиента к серверу?
Добрый день,
Подскажите пожалуйста надежный принцип измерения пропускной способности интернет соединения от клиента к серверу (в KBps).
Задача состоит в том, что средствами socket`а (синхронное соединение с сервером) должны передаваться большие объемы данных (от 2`ух мегабайт в секунду или более), но, предварительно необходимо вычислить - способна ли ширина канала интернет соединения пользователя гарантировать передачу таких объемов ежесекундно на сервер.
Возможно, скорость соединения на передаче больших файлов у вас скачет в следствии разных настроек TCP-протокола на сервере и на клиенте.
Fine-Tuning'ом TCP можно заниматься долго и безрезультатно, но можно достичь и заметных результатов.
Если используются linux-системы, попробуйте поиграться с TCP_congestion-avoidance алгоритмами
К примеру, вот хорошая статья на эту тему на хабре
Таким образом, конечно, нельзя полностью избежать огрехов всех маршрутов через которые пройдут ваши TCP-пакеты, однако улучшить ситуацию все равно можно.
Интернет построен на основе сетей использующих технологию разделения канала. По одной линии связи могут передаваться данные от различных источников.
Даже если начальном этапе вам удастся определить, что пропускной способности хватает, то далеко не факт что она будет стабильной.
Сначала была попытка определять таким образом:
KBps = total_data_size(in KB) / ( end_time(in sec) - start_time(in sec) ).
Но тестирование даже с локальным сервером показывает разные результаты. В интервале 10 секунд с клиента на сервер, средствами сокета отправляются небольшие пакеты данных размером (к примеру) в 500Kb. При каждой доставке на сервер одного пакета - сразу отправляю следующий. В течении 10 секунд времени суммирую размеры каждого переданного пакета. В итоге чем больше увеличиваю время передачи тестовых данных, тем больше падают результирующие значения. Это и вводит меня в заблуждение.