Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Во что упирается передача


Автор: Аркадийй 25.10.2010, 15:46
Интересует сабжект. Ситуации такие:

1) есть серверная программа и клиентская которая симулирует 190 подключений к серваку.
каждый клиент шлёт 15 раз в секунду пакеты по 15 байт по udp, и принимает столько же от сервака.
при 190 клиентах трафик получается такой: 
 -входящий 0.3 Mb/s 
 -исходящий 0.3 Mb/s.

и проблема в том что всё ограничивается на 190 клиентах, если делать больше то пакеты с пингом от некоторых клиентов не доходят и их  выкидывает с сервака. предположение моё такое: тк очень много маленьких пакетов то очень часто приходится обращатся к сетевой карте, а это вроде не дешёвая операция.

2) есть удалённый сервер с которым болшой пинг: 150мс. с ним коннектится та же клиентская программа, но теперь всё ограничивается 64 клиентами.
Предположение: на пути до удалённого сервера есть какой то тормозной узел из за которого происходит перегрузка сети и udp пакеты удаляются.

Правильны ли мои догадки? Интересуют мнения разбирающихся людей.

Автор: djamshud 25.10.2010, 16:14
1. Пакеты именно "теряются" на сетевом интерфейсе? Даже снифер не видит их? Это маловероятно, три тысячи пакетов в секунду - это не много. Сама программа их теряет? Значит неправильно запрограммирована часть работы с сетью.

2. Если канал узкий и слабый, вполне возможно.

Мнение человека, не то что бы сильно разбирающегося, но участвовавшего в разработке железки-флудилки, по результатам чего выяснилось, что линупс на весьма хреновеньком железе отечественного производства начинал терять маленькие пакеты при частоте генерации их в районе 40к (предел 100мбит-полосы для таких пакетов - около 90к).

Автор: Аркадийй 25.10.2010, 16:30
сниффером не проверял но не должен видеть их по идее. пакетов 6 тысяч, ещё же сервер отправляет.
программа их не может терять, они отправляются но не доходят, для udp это нормально.
подозрительно что при такой маленькой частоте пакетов. файерволлов нет.

Автор: Олег2005 25.10.2010, 20:31
Попробуйте поиграть размерами буферов приема/передачи с помощью setsockopt()
Скорее всего буфер сервера не справляется.....а может и у клиента что....

Автор: Аркадийй 25.10.2010, 22:20
Олег2005, не, это не помогает. не в этом дело.

Автор: Олег2005 26.10.2010, 20:50
Цитата(Аркадийй @  25.10.2010,  21:20 Найти цитируемый пост)
не в этом дело. 

Очень хорошо...
Тогда - в чем?
Вы смотрели нормальным сниффером - на обоих сторонах?

Автор: ATAMAN200 28.10.2010, 18:54
Может при формированние пакетов надо увелить их время жизни.
Если передача осуществляется по физической линии из железа то вполне реально что пакеты не дожидаются своей очереди на каком то хабе.
Это всего лиш моё предположение

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)