MiDV 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 · Жалоба Есть девайс с GSM модемом. Он по самодельному стеку соединяется с удаленным сервером и они обмениваются пакетами. Обмен реализован таким образом, что передача следующего возможна только после получения подтверждения о приеме предыдущего пакета от сервера . Все хорошо, только в среднем скорость обмена получается около пакета в секунду. А это медленно. Начитался я умной литературы и захотел сделать себе скользящее окно. Только споткнулся на логике его организации. При установлении соединения TCP/IP я получаю параметр размер окна. Вот и хотелось бы использовать данную опцию. Уважаемые гуру стека и не только. Посоветуйте какими нибудь примерами данной проблемы. Заранее благодарен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 2 ноября, 2011 Опубликовано 2 ноября, 2011 (изменено) · Жалоба ..GSM модемом.... самодельному стеку...около пакета в секунду....захотел сделать себе скользящее окно...какими нибудь примерами данной проблемы.. 1) вы уверены, что это проблемы софта а не физические ограничения модема? 2) то что Вы ранее сделали - это не имеет никакого отношения к TCP/IP. Если логикой не поддерживается скользящее окно.. Я более скажу - помимо окна там гораздо бОльше нюансов. всё описано в RFC на данный протокол(ы). Обратите так же внимание, что на уровне IP уже может идти сборка пакетов (могут быть разрезаны). Это то, что Вы не найдёте в инете (реализацию имеется ввиду). 3) Где искать - RFC. Плюс поройте опен-соурс оси с "поддержкой" стэка TCP/IP. Там найдёте реализацию многих нюансов данного протокола. удачи вам (круглый) Изменено 2 ноября, 2011 пользователем kolobok0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 2 ноября, 2011 Опубликовано 2 ноября, 2011 · Жалоба Обратите так же внимание, что на уровне IP уже может идти сборка пакетов (могут быть разрезаны). Не надо этого допускать для TCP. Ибо при ошибках накладно. Но стек должен корректно обрабатывать поле MSS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Не надо этого допускать для TCP. Ибо при ошибках накладно. Но стек должен корректно обрабатывать поле MSS. это когда то мы с вами обсуждали :) помнится мне Вы аппелировали к объёму передаваемых данных в сторону вэб сервера. Но с другой стороны - протокол есть протокол. И не обязаловка, что маршрутиризаторы настроены на 1500 байт :) это дефолтное значение... Как и на хост системах кстати (передатчики)... каждый для себя решает потолок функциональности своей задачи. Кто просто парсит байты...кто поддерживает протокол в полной мере - кому как... удачи вам (круглый) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба И не обязаловка, что маршрутиризаторы настроены на 1500 байт это дефолтное значение... Как и на хост системах кстати (передатчики)... Те маршрутизаторы, которые подрезают блоки заодно конфигурятся на правку поля MSS. Иначе админа надо гнать вон из профессии (ЦЭ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MiDV 0 4 ноября, 2011 Опубликовано 4 ноября, 2011 (изменено) · Жалоба Большое спасибо за участие. To kolobok0 1) вы уверены, что это проблемы софта а не физические ограничения модема? 2) то что Вы ранее сделали - это не имеет никакого отношения к TCP/IP. Если логикой не поддерживается скользящее окно.. to 1 Да. Это ограничения софта.Я сейчас убрал это ограничение - быстрее и намного - где-то на порядок. но не отслеживает ответы - это огромный минус. to 2 Может и не относится. Но я бьюсь над тем, чтобы у меня оно работало. То, что написано - куском не выдерешь. Приходится разбираться и создавать свое. Просто этот стек - нашлепка на другую программу, которая использовала внутренний стек модема. И в ней уже написаны и обмен с модемом и обработчики, так что приходится приспосабливать и приспосабливать, тестировать и изменять. И так по кругу. Размер сегмента я выбрал 480 байт. Количество сегментов при первоначальной посылке - 4. Алгоритм такой - есть массив на передачу. Есть размер сегмента. Еще создаю вспомогательную переменную для смещения в массиве на передачу. цикл, пока не передадим все. { беру размер массива и вычитаю из него смещение. смотрю, не надо ли передать еще один пакет. Сравниваю размер массива и сегмента. Если больше массив - беру у него кусок с учетом смещения, равный сегменту и формирую пакет. А если больше сегмент - то пихаю массив и тоже формирую пакет. Передаю на сервер. Смещение увеличиваю на число переданных байт. Проверяю, не пришел ли ответ. Если пришел - то на какой пакет. Если с самым маленьким номером - даю разрешение на передачу еще одного пакета. Если в серединке - просто отмечаю, что дошел. } Немного сумбурно, но где-то так. Можно что-то улучшить? Как скажете? Изменено 4 ноября, 2011 пользователем MiDV Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 7 ноября, 2011 Опубликовано 7 ноября, 2011 (изменено) · Жалоба ...Можно что-то улучшить? Как скажете? в первом приближении - да. но есть нюансы, если Вы будете не в домашней сети. например надо обрабатывать затор пакетов, медленные/быстрые старты и прочую шнягу. лучше почитать на эту тему.смысл один - опираясь на инфу приходящую от противоположного хоста и на статистику - максимально быстро пропихивать данные. например из приведённой вами логики не совсем понятно что будет если не прийдёт начальный пакет, при приходе из середины? или скажем пропихнули пачку, а пришло только на первые два пакета подтверждение? опять кидаем всю пачку минус два? другими словами - протокол "сложен" не столько логикой передачи/приёма сколько правильной обработкой ошибок и состояний. удачи вам (круглый) ЗЫ Но если вам чисто в пределах локалки - то можно упрощать. Вот например тут выше АРВ писал, что на сборку пакетов на IP уровне можно тупо забить... Другими словами: чем больше зверинец - тем в полной мере задействуется логика протокола. Изменено 7 ноября, 2011 пользователем kolobok0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться