Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: транспорт для потока данных  (Прочитано 41271 раз)
0 Пользователей и 9 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #30 : 29-07-2008 10:38 » 

а, между прочим, среднее для 100 и 50 == 75 , что меньше постоянного 87,5 , о как
Записан

zubr
Гость
« Ответ #31 : 29-07-2008 14:44 » 

Алексей1153++,  возьми не один а n стоповых байт - вероятность совпадения с байтами пакета уменьшится в n раз.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #32 : 29-07-2008 14:49 » 

каким образом она уменьшится то )
Записан

zubr
Гость
« Ответ #33 : 29-07-2008 14:52 » 

Ну комбинация к примеру из 3-х байт abc в пакете будет встречаться реже чем байт а
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #34 : 29-07-2008 15:10 » 

ммм, а если пакеты - всего по 3 байта ? Улыбаюсь Трафик растёт вдвое... Короче, понятно, надо всё время от конкретной ситуёвини плясать
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #35 : 07-11-2008 05:03 » 

дошли руки до реализации (до этого старый свой протокол использовался, неэкономичный совершенно), выяснилось, что начального маркера недостаточно - нужен ещё и конечный Улыбаюсь Иначе пакет не сможем принять, пока не придёт следующий (так как смотрели бы по начальным маркерам)

пока что реализовал свой новый протокол (который в начале темы)

ща потестю ещё, потом исходники выкладу, кому интересно
Записан

sss
Специалист

ru
Offline Offline

« Ответ #36 : 07-11-2008 05:50 » 

Алексей1153++, вот как я реализую принцип целостности пакетов.

В начале каждой передачи посылается размер очередного пакета. Затем данные. Приемная сторона принимает размер пакета, затем данные. Т.е. пока пакет не собран, он не передается в программу. Какие могут возникнуть проблемы?

1. Подключается совершенно левый клиент и начинает посылать бессмысленные (в контексте приема) данные. Можешь поверить это легко вычисляется. Единственное что нужно предусмотреть - максимально возможный разумный предел размера одного собранного пакета.

2. Разрыв при приеме длины. Т.е. если длина пакета представляет собой 4 байта, то в какой то момент ты получаешь не всю длину, только часть. Но это то же поправимо. 


Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #37 : 07-11-2008 06:39 » 

В начале каждой передачи посылается размер очередного пакета. Затем данные. Приемная сторона принимает размер пакета, затем данные. Т.е. пока пакет не собран, он не передается в программу. Какие могут возникнуть проблемы?

я уже говорил, какие будут проблемы Улыбаюсь Во первых, размер пакета у меня от нескольких байтов до нескольких метров. Если передавать размер сначала - как ты узнаешь, что эти циферки - это именно размер ? А никак. Либо ты станешь ждать "указанное" количество байтов , потом считать CRC и прочее, только потом узнаешь, что что то тут не так. А я ищу начало и хвост , если есть - я точно знаю, что что то пришло. А если это мусор - это тоже быстро выяснится

разрыв вычислится по CRC в уже принятом и раскрытом пакете, но это не сложнее, чем сначала ждать все 0x01afde байт Улыбаюсь
Записан

sss
Специалист

ru
Offline Offline

« Ответ #38 : 07-11-2008 06:50 » 

Не понял. Фиксированно - размер , переменно - данные. Какое еще CRC? TCP соединение закроется еще в ядре при разрыве... Понятно дело с UDP...

Еще раз:
Код:
struct NET_BLOB
{
  LONG32          lBlobSize;
  BYTE               Data[0];
};

Какие проблемы с передачей разных пакетов? То, что поток неразрывен берет на себя TCP. Чего еще городить то? Есть проблемы с разрезкой lBlobSize. Но они решаются в месте приема...
« Последнее редактирование: 07-11-2008 06:57 от sss » Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #39 : 07-11-2008 06:53 » 

Не понял. Фиксированно - размер , переменно - данные.

а в случае, когда летит мусор ? Улыбаюсь
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 07-11-2008 06:59 » 

Алексей1153++, а какая разница, искать хвост или не искать, если в мусоре может попасться "пакет" хоть на стотыщмегабайт, где совершенно случайно в начале есть маркер начала, и в конце - маркер конца?
Записан
sss
Специалист

ru
Offline Offline

« Ответ #41 : 07-11-2008 06:59 » 

Какой мусор в TCP !!! Откуда берется?
Записан

while (8==8)
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #42 : 07-11-2008 07:04 » 

Поддерживаю sss, у нас тоже так был реализован протокол: сначала структура с размером и типом пакета, затем уже бинарные данные, которые все знают, как парсить. А лучшая защита от мусора - авторизация сессии Улыбаюсь Если же кто-то, замышляющий худое, твой протокол знает, то, соответственно, на уровне протокола хитрить бессмысленно.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #43 : 07-11-2008 07:07 » 

Какой мусор в TCP !!! Откуда берется?
легко , примеры:

1) беру и посылаю мусор
2) другая версия программы
3) ошибка в версии программы клиента

у нас тоже так был реализован протокол: сначала структура с размером и типом пакета, затем уже бинарные данные, которые все знают, как парсить. А лучшая защита от мусора - авторизация сессии Улыбаюсь

это всё тоже есть, но внутри транспорта Улыбаюсь
Записан

sss
Специалист

ru
Offline Offline

« Ответ #44 : 07-11-2008 07:16 » new

Алексей1153++, отделяй зерна от плевел. Задача уровня транспорта только в доставке пакета точного размера. Задача уровня приложения - детектировать ошибки в логике программы...
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #45 : 07-11-2008 07:27 » 

sss, для меня задача - не тратить много времени на анализ транспорта, он максимально простой и с чёткими границами. А всё остальное в программе выполняется быстро. Может , поэтому у нас разногласия Улыбаюсь После написания транспорта мне стало очень удобно работать в программе с передачей данных по сети , и я не понимаю, почему , тебе, к примеру, это всё так не нравится )
Записан

sss
Специалист

ru
Offline Offline

« Ответ #46 : 07-11-2008 07:39 » 

Да почему не нравиться. Я считаю, что чем проще, тем лучше.

Ты вот 3 примера указал:

1) беру и посылаю мусор
2) другая версия программы
3) ошибка в версии программы клиента

Это ошибки логики твоей программы, а не сетевой среды. При этом задача транспорта - доставка, а не поиск ошибок в программе. Если это не так, ты запросто получаешь множество версий транспорта для каждого приложения.
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #47 : 07-11-2008 08:14 » 

у моего транспорта основная задача всё же не доставка (этим TCP болеет) , а разграничение. И мне почему то так гораздо более удобно показалось, чем твой способ Улыбаюсь
Ну а ошибки - так от них тоже надо защищаться, от своих в том числе... Специфика проекта такая, что ошибки надо наверняка ловить
Записан

zubr
Гость
« Ответ #48 : 07-11-2008 08:56 » 

Насчет мусора - простой пример:
Обмен данными между 2-мя модемами по обычной телефонной линии с плохой связью. Здесь мусором будут посторонние шумы линии.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #49 : 10-11-2008 06:13 » 

zubr, TCP считает CRC
Записан

while (8==8)
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines