Привет всем.
Сеть может обладать такими свойствами
1. некоторые пакеты (~50%) приходят с задержкой до 100ms.
2. возможны дропы — потери пакетов.
При наличии свойства 1 скорость передачи некоторого потока по tcp упала в 3 раза — 70 Kbytes/sec.
(210 Kbytes/sec — идеальная сеть). Замерял по заснифаному трафику. WindowSize = 64000, чего вполне должно
хватать: 64/210 ~ 0.3 то есть окно передаётся примерно за 300ms, 100ms задержка с которой приходят акноледжменты
не должна задерживать окно. Впрочем, пробовал увеличить окно — лучше не стало. В чём проблема?
Даже если разберусь с 1. то что потом делать с дропами? Ждать ретрансмиссии недопустимо.
Как вообще решают проблему передачи real-time data по tcp? Нельзя ли как-то замутить свой чуток
подправленный tcp/ip стэк?
Заранее благодарен, Nigoro.
Здравствуйте, Nigoro, Вы писали:
N>Привет всем.
N>Сеть может обладать такими свойствами
N> 1. некоторые пакеты (~50%) приходят с задержкой до 100ms.
Такая сеть. Что плохо
N> 2. возможны дропы — потери пакетов.
TCP-протокол создает надежные соединения, т.е. недошедшие пакеты пересылаются.
N> Даже если разберусь с 1. то что потом делать с дропами? Ждать ретрансмиссии недопустимо.
Вполне может быть
N> Как вообще решают проблему передачи real-time data по tcp? Нельзя ли как-то замутить свой чуток
N> подправленный tcp/ip стэк?
Замутить, конечно, можно. Но есть вещи, с которыми надо считаться:
1) Здесь надо искать компромисс между пропускной способностью сети и качеством. Если сети не хватает — снизте битрейт.
2) Надо понимать, что данные все равно пойдут с некоторой задержкой. См. включения на ТВ — корреспондент слышит ведущего с некоторой задержкой
Удачи!
Надо забыть про самописные ляпы, и пользоваться протоколом RTP. Он поверх UDP.
Примеры кода — на
www.live.com.
Здравствуйте, Maxim S. Shatskih, Вы писали:
MSS>Надо забыть про самописные ляпы, и пользоваться протоколом RTP. Он поверх UDP.
MSS>Примеры кода — на www.live.com.
Через tcp туннелируются RTP и RTSP (два коннекта). Туннелировать стали не от хорошей жизни,
кастомер хочет коннектится к серверу через HTTP прокси.
В лане конечно передача реалтайм данных через HTTP туннель работает нормально, ну а в реальной сети херово (смотрите пред. пост).
Интересно встречался ли кто-то с подобной ситуацией и что он с этой ситуацией делал?