Перейти к содержанию
    

Ускорение TCP/IP

Есть девайс с GSM модемом.

Он по самодельному стеку соединяется с удаленным сервером и они обмениваются пакетами.

Обмен реализован таким образом, что передача следующего возможна только после получения подтверждения о приеме предыдущего пакета от сервера .

Все хорошо, только в среднем скорость обмена получается около пакета в секунду. А это медленно.

Начитался я умной литературы и захотел сделать себе скользящее окно. Только споткнулся на логике его организации.

При установлении соединения TCP/IP я получаю параметр размер окна.

Вот и хотелось бы использовать данную опцию.

Уважаемые гуру стека и не только.

Посоветуйте какими нибудь примерами данной проблемы.

Заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..GSM модемом.... самодельному стеку...около пакета в секунду....захотел сделать себе скользящее окно...какими нибудь примерами данной проблемы..

 

1) вы уверены, что это проблемы софта а не физические ограничения модема?

2) то что Вы ранее сделали - это не имеет никакого отношения к TCP/IP. Если логикой не поддерживается скользящее окно.. Я более скажу - помимо окна там гораздо бОльше нюансов. всё описано в RFC на данный протокол(ы). Обратите так же внимание, что на уровне IP уже может идти сборка пакетов (могут быть разрезаны). Это то, что Вы не найдёте в инете (реализацию имеется ввиду).

3) Где искать - RFC. Плюс поройте опен-соурс оси с "поддержкой" стэка TCP/IP. Там найдёте реализацию многих нюансов данного протокола.

 

 

удачи вам

(круглый)

Изменено пользователем kolobok0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обратите так же внимание, что на уровне IP уже может идти сборка пакетов (могут быть разрезаны).

 

Не надо этого допускать для TCP. Ибо при ошибках накладно. Но стек должен корректно обрабатывать поле MSS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо этого допускать для TCP. Ибо при ошибках накладно. Но стек должен корректно обрабатывать поле MSS.

 

это когда то мы с вами обсуждали :)

помнится мне Вы аппелировали к объёму передаваемых данных в сторону вэб сервера. Но с другой стороны - протокол есть протокол. И не обязаловка, что маршрутиризаторы настроены на 1500 байт :) это дефолтное значение... Как и на хост системах кстати (передатчики)...

 

каждый для себя решает потолок функциональности своей задачи. Кто просто парсит байты...кто поддерживает протокол в полной мере - кому как...

 

удачи вам

(круглый)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И не обязаловка, что маршрутиризаторы настроены на 1500 байт это дефолтное значение... Как и на хост системах кстати (передатчики)...

 

Те маршрутизаторы, которые подрезают блоки заодно конфигурятся на правку поля MSS. Иначе админа надо гнать вон из профессии (ЦЭ)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое спасибо за участие.

To kolobok0

1) вы уверены, что это проблемы софта а не физические ограничения модема?

2) то что Вы ранее сделали - это не имеет никакого отношения к TCP/IP. Если логикой не поддерживается скользящее окно..

to 1 Да. Это ограничения софта.Я сейчас убрал это ограничение - быстрее и намного - где-то на порядок. но не отслеживает ответы - это огромный минус.

to 2 Может и не относится. Но я бьюсь над тем, чтобы у меня оно работало. То, что написано - куском не выдерешь. Приходится разбираться и создавать свое. Просто этот стек - нашлепка на другую программу, которая использовала внутренний стек модема. И в ней уже написаны и обмен с модемом и обработчики, так что приходится приспосабливать и приспосабливать, тестировать и изменять. И так по кругу.

Размер сегмента я выбрал 480 байт. Количество сегментов при первоначальной посылке - 4.

Алгоритм такой - есть массив на передачу. Есть размер сегмента. Еще создаю вспомогательную переменную для смещения в массиве на передачу.

цикл, пока не передадим все.

{

беру размер массива и вычитаю из него смещение.

смотрю, не надо ли передать еще один пакет.

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

Передаю на сервер.

Смещение увеличиваю на число переданных байт.

Проверяю, не пришел ли ответ.

Если пришел - то на какой пакет. Если с самым маленьким номером - даю разрешение на передачу еще одного пакета. Если в серединке - просто отмечаю, что дошел.

}

Немного сумбурно, но где-то так.

Можно что-то улучшить? Как скажете?

Изменено пользователем MiDV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Можно что-то улучшить? Как скажете?

 

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

 

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

 

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

 

 

удачи вам

(круглый)

ЗЫ

Но если вам чисто в пределах локалки - то можно упрощать. Вот например тут выше АРВ писал, что на сборку пакетов на IP уровне можно тупо забить...

Другими словами: чем больше зверинец - тем в полной мере задействуется логика протокола.

Изменено пользователем kolobok0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...