Вы можете сделать что-то очень близкое к этому. Вы можете подсчитать все отправленные вами байты и поместить кол-во всех байтов, отправленных перед сообщением в конце вашего сообщения.
Я действительно нервничаю в любое время, когда кто-то говорит о «пакетах» с TCP. Потому что, если вы говорите о пакетах и TCP одновременно, вы смешиваете уровни протокола, которые не следует смешивать. Нет существенного соответствия между данными, отправляемыми в TCP, и пакетами, которые отправляются через IP.
Да, в IP-пакетах, используемых для отправки информации о TCP, есть порядковые номера. Эти порядковые номера - это количество количества байтов (ака-октетов), отправленных до сих пор. Они определяют, где в потоке находятся байты в пакете, но они иначе не связаны с пакетом.
Если выполняется повторная отправка, или если вы используете алгоритм Nagle или если стек TCP похож на этот день, вы можете завершить две операции отправки, завершающиеся в том же пакете. Или вы можете завершить половину одной операции отправки в один пакет и половину в другом пакете. И каждый из этих пакетов будет иметь свои порядковые номера.
Как я уже сказал, нет абсолютно никакой взаимосвязи между операциями отправки, выполняемыми на транспортном уровне, и пакетами, отправленными на сетевом уровне. Я тоже не говорю об этом. Это не «действительно все пакеты внизу, а отправка вообще, за исключением некоторого странного состояния, помещает все байты в один пакет». Нет, описанные выше сценарии, где байты из одной операции отправки распространяются на несколько пакетов, происходят часто и в непредсказуемых условиях.
Итак, я не знаю, почему вы хотите знать что-либо о порядковых номерах в пакетах. Но если вы использовали порядковый номер в качестве прокси-сервера для количества отправленных байт, вы можете сохранить это, считая себя, и просто поместить его в поток самостоятельно. И не забудьте также подсчитать эти байты.
Почему на земле вы хотите, чтобы это сделать? – Omnifarious
@Omnifarious: Мне нужны «порядковые номера» в протоколе безопасности. Поскольку их реализация требует хранения окон (как в TCP), что, в свою очередь, требует большого количества кодирования, я подумал, что было бы проще не изобретать колесо и использовать базовые порядковые номера TCP. Из приведенных ниже ответов идея кажется невозможной. У вас есть идея облегчить внедрение «порядковых номеров»? –
Ваш протокол безопасности не должен зависеть от базовой пакетизации потока данных TCP. Способ обработки TLS и других криптографических протоколов, основанных на потоке, заключается в разделении данных. Каждая часть данных имеет префикс длины и суффикса с MAC. Таким образом, они обеспечивают запись структуры в потоке. – Omnifarious