Отправка нескольких пакетов tcp в пакете ip

Можно ли отправлять несколько пакетов tcp или udp в один IP-пакет? есть ли какие-либо спецификации в протоколе, которые этого не позволяют.

если это разрешено протоколом, но, как правило, не выполняется с помощью реализаций tcp/udp, можете ли вы указать мне на соответствующую часть исходного кода Linux, которая доказывает это.

Существуют ли какие-либо реализации tcp/udp на некоторых os, которые отправляют несколько пакетов в одном пакете ip. (если это разрешено).

Ответ 1

невозможно.

Заголовок TCP seqment не описывает его длину. Длина полезной нагрузки TCP выводится из длины IP-пакета (ов) за вычетом длины заголовков IP и TCP. Таким образом, только один сегмент TCP на IP-пакет.

И наоборот, однако, один сегмент TCP может быть фрагментирован по нескольким IP-пакетам посредством фрагментации IP.

Ответ 2

Tcp не отправляет пакеты: это непрерывный поток. Вы отправляете сообщения.
Udp, ​​будучи основанным на пакетах, будет отправлять только один пакет за раз.

Сам протокол не позволяет этого. Это не сломается, этого просто не произойдет.

Предложение использовать туннелирование действительно, но это предупреждение.

Ответ 3

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

Ответ 4

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

EDIT - я не знал, что TCP не имеет собственного поля заголовка, поэтому не было бы никакого способа сделать это без написания специального эквивалента TCP, который содержит эту информацию. SCTP может по-прежнему использоваться, поэтому я оставлю эту ссылку.

Ответ 5

TCP - это общедоступная спецификация, почему бы просто не прочитать ее?

RFC4164 является документом дорожной карты, RFC793 сам TCP, а RFC1122 содержит некоторые ошибки и показывает, как он сочетается с остальной частью (IPv4) юниверса.

Но, короче говоря, поскольку заголовок TCP (RFC793, раздел 3.1) не имеет поля длины, данные TCP распространяются от конца отступа заголовка до конца IP-пакета. В пакете нечего помещать еще один сегмент данных.

Ответ 6

Вы не можете упаковать несколько пакетов TCP в один IP-пакет - это ограничение спецификации, упомянутое выше. TCP - это самый близкий API, который является прикладной. Или вы хотите запрограммировать отправку необработанных IP-сообщений? Просто скажите нам, какую проблему вы хотите решить. Подумайте, как организовать доставку сообщений из одного приложения в другое или указать, что вы хотите подключиться к стеку TCP/IP. Что я могу вам предложить:

  • Подумайте о том, как упаковать все, что угодно, в пакет UDP. Я не уверен, насколько легко инициировать маршрутизацию "распакованных" пакетов TCP на удаленной стороне.
  • Рассмотрите возможность использования PPTP или аналогичного протокола туннелирования.