реклама на сайте
подробности

 
 
> Ускорение TCP/IP, Организация скользящего окна
MiDV
сообщение Nov 1 2011, 11:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 7-06-08
Пользователь №: 38 119



Есть девайс с GSM модемом.
Он по самодельному стеку соединяется с удаленным сервером и они обмениваются пакетами.
Обмен реализован таким образом, что передача следующего возможна только после получения подтверждения о приеме предыдущего пакета от сервера .
Все хорошо, только в среднем скорость обмена получается около пакета в секунду. А это медленно.
Начитался я умной литературы и захотел сделать себе скользящее окно. Только споткнулся на логике его организации.
При установлении соединения TCP/IP я получаю параметр размер окна.
Вот и хотелось бы использовать данную опцию.
Уважаемые гуру стека и не только.
Посоветуйте какими нибудь примерами данной проблемы.
Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MiDV
сообщение Nov 4 2011, 10:17
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 7-06-08
Пользователь №: 38 119



Большое спасибо за участие.
To kolobok0
Цитата
1) вы уверены, что это проблемы софта а не физические ограничения модема?
2) то что Вы ранее сделали - это не имеет никакого отношения к TCP/IP. Если логикой не поддерживается скользящее окно..

to 1 Да. Это ограничения софта.Я сейчас убрал это ограничение - быстрее и намного - где-то на порядок. но не отслеживает ответы - это огромный минус.
to 2 Может и не относится. Но я бьюсь над тем, чтобы у меня оно работало. То, что написано - куском не выдерешь. Приходится разбираться и создавать свое. Просто этот стек - нашлепка на другую программу, которая использовала внутренний стек модема. И в ней уже написаны и обмен с модемом и обработчики, так что приходится приспосабливать и приспосабливать, тестировать и изменять. И так по кругу.
Размер сегмента я выбрал 480 байт. Количество сегментов при первоначальной посылке - 4.
Алгоритм такой - есть массив на передачу. Есть размер сегмента. Еще создаю вспомогательную переменную для смещения в массиве на передачу.
цикл, пока не передадим все.
{
беру размер массива и вычитаю из него смещение.
смотрю, не надо ли передать еще один пакет.
Сравниваю размер массива и сегмента. Если больше массив - беру у него кусок с учетом смещения, равный сегменту и формирую пакет. А если больше сегмент - то пихаю массив и тоже формирую пакет.
Передаю на сервер.
Смещение увеличиваю на число переданных байт.
Проверяю, не пришел ли ответ.
Если пришел - то на какой пакет. Если с самым маленьким номером - даю разрешение на передачу еще одного пакета. Если в серединке - просто отмечаю, что дошел.
}
Немного сумбурно, но где-то так.
Можно что-то улучшить? Как скажете?

Сообщение отредактировал MiDV - Nov 4 2011, 10:20
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Nov 7 2011, 07:21
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(MiDV @ Nov 4 2011, 14:17) *
...Можно что-то улучшить? Как скажете?


в первом приближении - да. но есть нюансы, если Вы будете не в домашней сети. например надо обрабатывать затор пакетов, медленные/быстрые старты и прочую шнягу. лучше почитать на эту тему.смысл один - опираясь на инфу приходящую от противоположного хоста и на статистику - максимально быстро пропихивать данные.

например из приведённой вами логики не совсем понятно что будет если не прийдёт начальный пакет, при приходе из середины? или скажем пропихнули пачку, а пришло только на первые два пакета подтверждение? опять кидаем всю пачку минус два?

другими словами - протокол "сложен" не столько логикой передачи/приёма сколько правильной обработкой ошибок и состояний.


удачи вам
(круглый)
ЗЫ
Но если вам чисто в пределах локалки - то можно упрощать. Вот например тут выше АРВ писал, что на сборку пакетов на IP уровне можно тупо забить...
Другими словами: чем больше зверинец - тем в полной мере задействуется логика протокола.

Сообщение отредактировал kolobok0 - Nov 7 2011, 07:22
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 20:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016