Добрый день
Вот пишется программка которой необходимо быстро-быстро передавать на другой компьютер по TCP очень большой поток данных — данные просто льются туда. Поток работает в одну сторону, поэтому — как я понимаю — есть проблемы с получением АСК пакетов — то есть send или же то же WSASend часто замирают на довольно долгое время — очевидно до получения АСК пакета по таймауту. В тоже самое время вражеская программа посылает тот же самый поток баз проблем — с хорошей скоростью. Товарищ снифер показал что враги пользуются флагом PUSH в каждом TCP-пакете. Вот бы мне так же суметь Как при помощи WinSock 2.0 передавать пакеты с установленным PUSH. Я думаю это должно мне помоч.
Спецы!!! Может быть что-то другое спасет отца русской демократии ?
Re: Большой поток с сокета на сокет (выставление флага PUSH)
Здравствуйте, hmixa, Вы писали:
H>Вот пишется программка которой необходимо быстро-быстро передавать на другой компьютер по TCP очень большой поток данных — данные просто льются туда. Поток работает в одну сторону
Для таких вещей лучше не пользоваться TCP, так как вообщем этот протокол дает гарантированную доставку, а если необходимо иметь гарантированный рантайм, то это вещь с гарантированной доставкой не совместимая...
Не все кто уехал, предал Россию.
Re[2]: Большой поток с сокета на сокет (выставление флага PU
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Для таких вещей лучше не пользоваться TCP, так как вообщем этот протокол дает гарантированную доставку, а если необходимо иметь гарантированный рантайм, то это вещь с гарантированной доставкой не совместимая...
Да — но ломаться нечему — два компа через свитч — и все — куда тут еще более надежность повышать.
Re: Большой поток с сокета на сокет (выставление флага PUSH)
hmixa wrote:
> Добрый день > Вот пишется программка которой необходимо быстро-быстро передавать на другой компьютер по TCP очень большой поток данных — данные просто льются туда. Поток работает в одну сторону, поэтому — как я понимаю — есть проблемы с получением АСК пакетов — то есть send или же то же WSASend часто замирают на довольно долгое время — очевидно до получения АСК пакета по таймауту. В тоже самое время вражеская программа посылает тот же самый поток баз проблем — с хорошей скоростью. Товарищ снифер показал что враги пользуются флагом PUSH в каждом TCP-пакете. Вот бы мне так же суметь Как при помощи WinSock 2.0 передавать пакеты с установленным PUSH. Я думаю это должно мне помоч.
PUSH немного из другой оперы и из приложения его не выставить.
Для tcp соединения есть сво-во mss — maximum segment size. Обычно он равен path mtu — 20 (IP4 bare header) — 20 (TCP header). Все фрагменты меньше mss считаются малыми. Для малых фрагментов по-умолчанию включен алгоритм Нейгла — следующий малый фрагмент не отправляется, пока не придет ACK не предыдущий. На большие фрагменты (>= mss) алгоритм Нейгла не действует (http://www.faqs.org/rfcs/rfc896.html) и они отправляются без задержки.
Решения твоей проблемы: a) отправлять всегда большие фрагменты, б) отключить алгоритм Нейгла (опция TCP_NODELAY). Но в любом случае максимальный network throughput может быть достигнут только на потоке больших фрагменты.
Andrew.W Worobow wrote:
> H>Вот пишется программка которой необходимо быстро-быстро передавать на другой компьютер по TCP очень большой поток данных — данные просто льются туда. Поток работает в одну сторону > > Для таких вещей лучше не пользоваться TCP, так как вообщем этот протокол дает гарантированную доставку, а если необходимо иметь гарантированный рантайм, то это вещь с гарантированной доставкой не совместимая...
Это заблуждение.
Кроме всего прочего TCP обеспечивает flow control — приемник управляет потоком данных. Если ты будешь просто тупо высылать пакеты с максимальной возможной скоростью, буфер приемника может быть переполнен (особенно если у него более слабый комп) и пакеты будут просто откидываться. Поэтому тебе придется повторить посылку — пустая трата network bandwidth и никакого выигрыша в скорости доставки. TCP же позволяет достигнуть максимальной возможной скорости передачи учитывая, и скорость приема приемником и емкость канала (rtt * bandwidth) для избежания заторов и достижения максимального использования.
Здравствуйте, MaximE, Вы писали:
ME>Andrew.W Worobow wrote:
>> H>Вот пишется программка которой необходимо быстро-быстро передавать на другой компьютер по TCP очень большой поток данных — данные просто льются туда. Поток работает в одну сторону >> >> Для таких вещей лучше не пользоваться TCP, так как вообщем этот протокол дает гарантированную доставку, а если необходимо иметь гарантированный рантайм, то это вещь с гарантированной доставкой не совместимая...
ME>Это заблуждение.
Это не заблуждение, давайте рассмотрим ситуацию, например когда есть источник который высылает информацию о неком процессе в реальном времени, и есть приемник который эту информацию получает, теперь представим что в канале связи происходит с некоторой вероятностью потеря информации, и как следствие в случае использования TCP пойдут повторы, по тому как по стандарту протокол обязан востановить правильный порядок данных, это приведет к задержкам, и следовательно к нералтайму, в случае же использования IP или UDP, повторов не будет, а данные пропали и пропали, и х... с ними, важен же реалтаим, кому нужны данные о температуре сопла ракеты если ракета уже сгорела...
Не все кто уехал, предал Россию.
Re[4]: Большой поток с сокета на сокет (выставление флага PU
Andrew.W Worobow wrote:
> Здравствуйте, MaximE, Вы писали: > > ME>Andrew.W Worobow wrote: > >>> H>Вот пишется программка которой необходимо быстро-быстро передавать на другой компьютер по TCP очень большой поток данных — данные просто льются туда. Поток работает в одну сторону >>> >>> Для таких вещей лучше не пользоваться TCP, так как вообщем этот протокол дает гарантированную доставку, а если необходимо иметь гарантированный рантайм, то это вещь с гарантированной доставкой не совместимая... > > ME>Это заблуждение. > > Это не заблуждение, давайте рассмотрим ситуацию, например когда есть источник который высылает информацию о неком процессе в реальном времени, и есть приемник который эту информацию получает, теперь представим что в канале связи происходит с некоторой вероятностью потеря информации, и как следствие в случае использования TCP пойдут повторы, по тому как по стандарту протокол обязан востановить правильный порядок данных, это приведет к задержкам, и следовательно к нералтайму, в случае же использования IP или UDP, повторов не будет, а данные пропали и пропали, и х... с ними, важен же реалтаим, кому нужны данные о температуре сопла ракеты если ракета уже сгорела...
Мы говорим о разных вещах. Я говорю о том, что быстрее чем по TCP доставить данные с гарантией со своим протоколом вряд ли получится.
Здравствуйте, MaximE, Вы писали:
ME>Andrew.W Worobow wrote:
>> Здравствуйте, MaximE, Вы писали: >> >> ME>Andrew.W Worobow wrote: >> >>>> H>Вот пишется программка которой необходимо быстро-быстро передавать на другой компьютер по TCP очень большой поток данных — данные просто льются туда. Поток работает в одну сторону >>>> >>>> Для таких вещей лучше не пользоваться TCP, так как вообщем этот протокол дает гарантированную доставку, а если необходимо иметь гарантированный рантайм, то это вещь с гарантированной доставкой не совместимая... >>
ME>Мы говорим о разных вещах. Я говорю о том, что быстрее чем по TCP доставить данные с гарантией со своим протоколом вряд ли получится.
Да быстрее с гарантией вряд ли... да и не надо, есть же TCP, просто человек спрашивает про "быстро-бастро ... 1 Мега в 40 миллисекунд" я так понимаю ему важен реалтаим...
Не все кто уехал, предал Россию.
Re[6]: Большой поток с сокета на сокет (выставление флага PU
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Здравствуйте, MaximE, Вы писали:
ME>>Andrew.W Worobow wrote:
AWW>Да быстрее с гарантией вряд ли... да и не надо, есть же TCP, просто человек спрашивает про "быстро-бастро ... 1 Мега в 40 миллисекунд" я так понимаю ему важен реалтаим...
Да именно реалтаим. Терятся тут нечему — два компа через свитч — все больше ничего нет. должно шуровать как из пушки. А нет.
Re[7]: Большой поток с сокета на сокет (выставление флага PU
Здравствуйте, hmixa, Вы писали:
H>Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>>Здравствуйте, MaximE, Вы писали:
ME>>>Andrew.W Worobow wrote:
AWW>>Да быстрее с гарантией вряд ли... да и не надо, есть же TCP, просто человек спрашивает про "быстро-бастро ... 1 Мега в 40 миллисекунд" я так понимаю ему важен реалтаим...
H>Да именно реалтаим. Терятся тут нечему — два компа через свитч — все больше ничего нет. должно шуровать как из пушки. А нет.