Поделитесь алгоритмом распознавания и склейки данных из пакета UDP

Тема в разделе "WASM.HEAP", создана пользователем osrootd, 1 фев 2009.

  1. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Мое видение:
    1. Передаем ID (3 байта), потом размер файла.
    --> Принимаем число, указывающее на максимально возможное чило байт, которое клиент может принять.

    2. Передаем ID и число, которое мы можем отправить, с поправкой на то число которое прислал клиент.

    3. Ожидаем единицу
    --> если пришла 1, то отправляем 1 клиенту, иначе отсылаем другое число, и так до тех пор, пока не дойдем до 1.

    4. Согласование буферов прошло, отсылаем ID и N байт и позицию.

    Повторяем, пока клиент не скажет 0.

    Отрубаемся.

    Вроде бы все просто, но что делать, если файл > 1 гигабайта? Как быть?
     
  2. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    a) использовать TCP
    или b) реализовать подмножество свойств TCP - тебе нужно "окно" или, хотя бы, послать блок + подтвердить блок
     
  3. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    То есть посылать что-то вроде ACCEPT?
     
  4. reddrak

    reddrak New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2008
    Сообщения:
    13
    Посмотри как работает протокол TFTP можно посылать данные с фиксированым размером например 512 байт.
    Признаком окончания приема являеться получение пакета меньшего размера. В этом случае нет
    необходимости отправки подтверждения и указывать размер.

    Так же можно выполнить мелнькую модификацию для каждой пачки добавить ID для пакета который должен быть отправлен повторно.
     
  5. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Спасибо. Но думаю, что лучше посылать доболнительные байты подтверждения целостности (какие-еще н придумал)
    Просто прием более меньшего пакета может указывать не только на конец файла, но и на проблемы с соединением или на нарушение целостности данных.
     
  6. reddrak

    reddrak New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2008
    Сообщения:
    13
    на нарушение целосности указывает конторльная сумма IP пакета. В твое случае варианта только 2 получен или не получен.
     
  7. Scratch

    Scratch New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2005
    Сообщения:
    161
    можно дополнять пакет кодами рида-соломона или просто crc32
     
  8. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    [offtop]
    Scratch
    Кто такая "(с) Катя Чехова" и что означает сей (видимо - высокохудожественный) образ?
    Спасибо.
    [/offtop]
     
  9. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    reddrak
    Пакет формируется после того как отработает куча ф-ций по чтению и обработке данных, приведению их в читаемый вид.
    То есть битые данные могут быть втиснуты в сформированный пакет.
     
  10. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Не правильно. В iph.checksum покрывает только IP header. А вот udph.checksum покрывает и данные.
     
  11. reddrak

    reddrak New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2008
    Сообщения:
    13
    да для IP чек суммы используется только заголовок IP. Но суть в том чтобы сервер отправляет пачки строго заданного размера пока не получит подтверждение о приходе всей пачки. И данные в пачке могут либо быть получены либо нет.
     
  12. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Дали исходники системы управления движением поездов...

    Там на все тачки структура какая-то очень важная мультикастом UDP рассылается (дошло-не дошло --- пофиг)
    целостность проверяется какой-то арифметической операцией ( пока не понял какой ) над данными, в результате получается число, которое и сравнивается на конечной машине
     
  13. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    Поезда - не самолеты. Стоп-кран всегда есть. Не парься.