Re[9]: Максимальная длина TCP пакета в сети
От: AlexGin Беларусь  
Дата: 10.02.20 22:22
Оценка:
Здравствуйте, уважаемый netch80, Вы писали:

AG>2) Под длину блока — выделяется четыре первых байта принятого массива — какой тебе кусок на менее, чем четыре байта


N>Имеется в виду вариант типа такого:

N>вызвали recv() — пришло, например, 1460 байт (типовой MSS на Ethernet без timestamp-опций).
N>Из них 1458 — первое сообщение с заголовком длины. А ещё 2 — начало заголовка длины второго сообщения.
N>Теперь надо эти 2 сохранить, ответ следующего recv() дописать к ним и уже тогда декодировать длину.

Как я уже упоминал: следующий блок (пакет_пользовательского_уровня) — у нас ждёт.
Ждёт, пока не отработает предшествующий блок. Так я задумал и реализовал протокол верхнего (прикладного) уровня.
Посему, указанная Вами, уважаемый netch80, ситуация (с двумя байтами от нового блока) невозможна в принцыпе.

Да, я в курсе — что не использовал все возможности TCP. А именно — потоковые возможности.

Но от системы не требуется гонять (порно)фильмы, чтобы хоть как-то избежать простоя канала
Отредактировано 10.02.2020 22:25 AlexGin . Предыдущая версия . Еще …
Отредактировано 10.02.2020 22:23 AlexGin . Предыдущая версия .
Re[7]: Максимальная длина TCP пакета в сети
От: Cyberax Марс  
Дата: 10.02.20 23:29
Оценка: +1
Здравствуйте, AlexGin, Вы писали:

SVZ>>На твоём прикладном уровне все пакеты на месте и в нужном порядке.

AG>+100500
AG>Я в курсе, что теория говорит об этом. Практика иногда может и отличаться
Не отличается.

SVZ>>Там всё немного сложнее. Подтверждаться может не каждый пакет, а целая цепочка.

AG>На моей (прикладной) стороне — обеспечена передача квитирования в сторону сервера, когда на клиенте приняли пакет (ну или же собрали из фрагментов)
Естественно, так как нет никакой гарантии, что пакеты доходят вообще. Посылка сообщения сервером не означает его доставку. TCP тут не причём.
Sapienti sat!
Re[14]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 00:10
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Что до вебсокета, он превращает HTTP в, практически, TCP-сокет с навешенным на него фреймингом. В терминах HTTP это называется protocol upgrade


Костылm поверх HTTP
Маньяк Робокряк колесит по городу
Re[10]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 00:12
Оценка:
Здравствуйте, Reset, Вы писали:

Pzz>>Ну строго говоря, у TCP очень паршивая контрольная сумма. Если гнать большие объемы данных по шумному каналу, данные иногда будут приходить попорченными. Но ТС вряд ли именно от этого защищается.


R>У тебя вместе с tcp 3-4 уровня (физический, Ethernet(может не быть), IP, TCP) и на каждом своя контрольная сумма. Это как должен шуметь канал, чтобы данные по нему все же бегали, но иногда на всех 4-х уровнях контрольные суммы все же совпадали.


У IP контрольная сумма только на свой заголовок. Но в главном ты прав
Маньяк Робокряк колесит по городу
Re[16]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 00:15
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Ну, она CRC32.


Кто и где CRC32?
Маньяк Робокряк колесит по городу
Re[7]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 00:21
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Я же проверяю не все байты, а только четыре_последних_байта на маркер конца:


Странная технология. Во всех известных мне протоколах используют маркер начала без или с размером сообщения, и (не всегда) с контрольной суммой в конце. Размер сообщения, вместе с контрольной суммой, обеспечивает приемлемую для боьшинства случаев надежность.

ЗЫ А перед маркером конца размер сообщения не задаешь? Ну, просто чтобы было проще найти его начало
Маньяк Робокряк колесит по городу
Re[8]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 00:26
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>И ты сразу подрезал себе возможность посылать запросы не по одному, а сразу пачками, а потом получить пачку ответов.


Может предполагается полудуплекс в вариантах не по TCP?
Маньяк Робокряк колесит по городу
Re[12]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 00:29
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Не надо при проектировании framing'а полагаться на то, что фреймы эти будут использоваться строго в режиме вопрос-ответ. Ничего особо не выигрываешь, а лишь смешиваешь два логически не связанных уровня. О чем потом и пожалеешь.


Почему не надо? А если захочется запустить протокол поверх RS485?
Маньяк Робокряк колесит по городу
Re: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 00:46
Оценка:
Здравствуйте, AlexGin, Вы писали:

Вообще, страдания непонятны

Всю жизнь работаю с потоковыми средами передачи данных — TCP, UART, RS485, CAN, TCP (да хоть те же файлы или пайпы) — всегда строится КА (обычно не слишком сложный) разбора потока байт, который выплевывает на вышестоящий уровень готовые пакеты

Зачем что-то изобретать, когда кучи DLE ETX протоколов существуют, с размерами пакетов, контрольными суммами на любой вкус, и прочим блек-джеком. Бери любой, делай свою контрольную сумму — CRC, MD5, SHA256 и тп и используй
Маньяк Робокряк колесит по городу
Re[2]: Максимальная длина TCP пакета в сети
От: AlexGin Беларусь  
Дата: 11.02.20 04:51
Оценка:
Здравствуйте, уважаемый Marty, Вы писали:

M>Здравствуйте, AlexGin, Вы писали:


M>Всю жизнь работаю с потоковыми средами передачи данных — TCP, UART, RS485, CAN, TCP (да хоть те же файлы или пайпы) — всегда строится КА (обычно не слишком сложный) разбора потока байт, который выплевывает на вышестоящий уровень готовые пакеты


Я — аналогично.
Но сравнивать UART (или RS485) с TCP — не буду. Это нелогично и неверно.
Одно дело — передать 10 байт, причём их всегда десять (ну даже если в 2-3 раза больше — обычно длина константна).
Совсем другое — массив длиной от 10 байт до 10 килобайт.
Причём, если раньше в моих же проектах блок данных (пакет прикладного уровня) на TCP исчерпывался 256 байт фикс-длины,
то также никаких траблов замечено не было.

M>Зачем что-то изобретать, когда кучи DLE ETX протоколов существуют, с размерами пакетов, контрольными суммами на любой вкус, и прочим блек-джеком. Бери любой, делай свою контрольную сумму — CRC, MD5, SHA256 и тп и используй


Да вроде как здесь выше сообщалось, что КС в подсистеме TCP проверяется "под_капотом"...
Отредактировано 11.02.2020 4:54 AlexGin . Предыдущая версия .
Re[16]: Максимальная длина TCP пакета в сети
От: AlexGin Беларусь  
Дата: 11.02.20 04:57
Оценка:
Здравствуйте, уважаемый Pzz, Вы писали:

Pzz>Ну, она CRC32. В массштабах 4-гигабайтного кино вероятность пропустить одиночную ошибку больше половины. С другой стороны, кто его качает, кино, по голому TCP?


А я то думал, что для передачи "4-гигабайтного кино" более подходит UDP протокол.
Re[12]: Максимальная длина TCP пакета в сети
От: AlexGin Беларусь  
Дата: 11.02.20 05:09
Оценка:
Здравствуйте, уважаемый Pzz, Вы писали:

Pzz>Здравствуйте, AlexGin, Вы писали:


Pzz>Не надо при проектировании framing'а полагаться на то, что фреймы эти будут использоваться строго в режиме вопрос-ответ. Ничего особо не выигрываешь, а лишь смешиваешь два логически не связанных уровня. О чем потом и пожалеешь.


Ну OK — чтобы заполнить канал передачи, помимо диалога Server-Client будем передавать фильмы.
Или торрент-сеть организуем
Вот не знаю — что выбрать?

Pzz>Я даже не о пропускной способности канала сейчас говорю, а о логической целостности твоего протокола.


Мой протокол — это "разговор" двух человек аппаратно-программных сущностей: сервер и клиент...
Что предлагается как альтернатива диалогу — передача "пустого" space-holder-а, пока требуемого контента не насобиралось?
Re[8]: Максимальная длина TCP пакета в сети
От: AlexGin Беларусь  
Дата: 11.02.20 05:13
Оценка:
Здравствуйте, уважаемый Marty, Вы писали:
...

M>ЗЫ А перед маркером конца размер сообщения не задаешь?


Я пришёл к варианту — задавать длину блока (сообщения) в его первых четырех байтах.
Re[17]: Максимальная длина TCP пакета в сети
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.02.20 05:33
Оценка:
Здравствуйте, Marty, Вы писали:

Pzz>>Ну, она CRC32.


M>Кто и где CRC32?


Контрольная сумма в езернете
Re[17]: Максимальная длина TCP пакета в сети
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.02.20 05:34
Оценка:
Здравствуйте, AlexGin, Вы писали:

Pzz>>Ну, она CRC32. В массштабах 4-гигабайтного кино вероятность пропустить одиночную ошибку больше половины. С другой стороны, кто его качает, кино, по голому TCP?

AG>
AG>А я то думал, что для передачи "4-гигабайтного кино" более подходит UDP протокол.

По разному бывает. Иногда для этого лучше всего подходит битторрент.
Re[13]: Максимальная длина TCP пакета в сети
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.02.20 05:36
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Мой протокол — это "разговор" двух человек аппаратно-программных сущностей: сервер и клиент...

AG>Что предлагается как альтернатива диалогу — передача "пустого" space-holder-а, пока требуемого контента не насобиралось?

Предлагается не рассчитывать в парсере фреймов на то, что передатчик передаст целый фрейм и остановится.
Re[3]: Максимальная длина TCP пакета в сети
От: Буравчик Россия  
Дата: 11.02.20 06:41
Оценка: 2 (1) +1
Здравствуйте, AlexGin, Вы писали:

AG>При работе сессии — от сервера к клиенту может передаваться результат вычислений (пакет данных — сериализованных — размером до 10 KBytes).

AG>Все остальные пакеты — относительно небольшие — от 10 байт до примерно 1...3 KByte.
AG>Пакеты в 1...3 KByte — это JSON (они следуют от клиента к серверу).
AG>Они определяют — что должен считать алгоритм бизнесс-логики на сервере.

Сейчас такие вещи делают на базе очередей.
Твой клиент закидывает свое задание (JSON) в очередь задач, и подписывается на очередь ответов.
Твой сервер (или несколько серверов) вытаскивают задачи из очереди задач, выполняют их, и помещают результат в очередь ответов.

Для хранения и поддержки очередей используется специальные серверы — брокеры сообщений.
Они работают по протоколам AMQP или MQTT (поверх TCP/IP).

Зачем создавать новый протокол? Все уже реализовано.
Best regards, Буравчик
Re[3]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 06:42
Оценка:
Здравствуйте, AlexGin, Вы писали:

M>>Всю жизнь работаю с потоковыми средами передачи данных — TCP, UART, RS485, CAN, TCP (да хоть те же файлы или пайпы) — всегда строится КА (обычно не слишком сложный) разбора потока байт, который выплевывает на вышестоящий уровень готовые пакеты

AG>
AG>Я — аналогично.
AG>Но сравнивать UART (или RS485) с TCP — не буду. Это нелогично и неверно.
AG>Одно дело — передать 10 байт, причём их всегда десять (ну даже если в 2-3 раза больше — обычно длина константна).

У кого-то константна, у кого-то нет, но речь не об этом

AG>Совсем другое — массив длиной от 10 байт до 10 килобайт.


И какая тут принципиальная разница?


AG>Причём, если раньше в моих же проектах блок данных (пакет прикладного уровня) на TCP исчерпывался 256 байт фикс-длины,

AG>то также никаких траблов замечено не было.

M>>Зачем что-то изобретать, когда кучи DLE ETX протоколов существуют, с размерами пакетов, контрольными суммами на любой вкус, и прочим блек-джеком. Бери любой, делай свою контрольную сумму — CRC, MD5, SHA256 и тп и используй

AG>
AG>Да вроде как здесь выше сообщалось, что КС в подсистеме TCP проверяется "под_капотом"...

Ну, раз очень хочется...
Маньяк Робокряк колесит по городу
Re[18]: Максимальная длина TCP пакета в сети
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.20 06:44
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Ну, она CRC32.


M>>Кто и где CRC32?


Pzz>Контрольная сумма в езернете


Она же только на заголовок?
Маньяк Робокряк колесит по городу
Re[19]: Максимальная длина TCP пакета в сети
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.02.20 07:11
Оценка:
Здравствуйте, Marty, Вы писали:

Pzz>>>>Ну, она CRC32.

M>>>Кто и где CRC32?
Pzz>>Контрольная сумма в езернете
M>Она же только на заголовок?

На весь кадр.
The God is real, unless declared integer.
Отредактировано 11.02.2020 7:15 netch80 . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.