Люди, я знаю, что лето, душно и все достало. Но помогите пожалуйста советом ибо у меня совсем горят сроки... А вопросы даже больше теоретические...
Есть прибор(arm7), отсылающий по tcp посылки удаленной системе(нетбук). Посылки достаточно объемны - 100 КБайт.
Т.к. софт для удаленной системе будет писаться на стороне заказчика, то проверяю скорость работы обычной терминалкой.
И что я вижу - каждый фрагмент tcp посылки передается раз в 200 мс.
Стал гуглить - оказалось в винде (и не только) есть такая штука, delay ack - т.е. винда отправляет ACK на посылку раз в 200 мс. Меня такое совсем не устраивает... Мои 100 Кбайт получается разбиваются на примерно 68 посылок и отправляются по 200 мс каждая - в сумме 14 секунд. Ужас.
Стал гуглить касаемо моего стека (взял кейловский). На кейловском форуме нашел решение - создать сокет с атрибутом TCP_TYPE_DELAY_ACK. Тогда каждая посылка будет разбиваться на две подряд и в этом случаи винда отвечает сразу.
После этих действий скорость заметно возросла, но... Но все равно не достаточно высоко - для меня это критично.
В WireShark во время передачи моей 100 кбайтной посылки иногда проскакивает после обычного TCP ACK от нетбука, еще какойто непонятный пакет - [TCP Window Update]. И это заметно отжирает время.
Собственно вопросы:
1) Можно ли настроить delay ack винды. Скажем 10 мсек вместо стандартных 200? И как?...

2) В програмирование для винды не силен, с сокетами не работал. Человек котоырй будет писать софт для моей системы, как то может сам отсылать ACK или же в винсокетах используется стандартный delay ack в 200 мсек? Он пишет на си шарпе.
3) Что такое [TCP Window Update] в сниффере и почему он происходит? Как от него избавиться?
Спасибо Всем кто откликнется!
Сообщение отредактировал Slowhan - Jul 21 2011, 05:02