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

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

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

есть ли любые реализации tcp/udp на некоторой OS, которые действительно отправляют несколько пакетов на единственном IP пакете. (если это позволяется).

10
задан Jon Seigel 2 May 2010 в 20:18
поделиться

6 ответов

Это невозможно .

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

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

9
ответ дан 3 December 2019 в 20:41
поделиться

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

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

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

2
ответ дан 3 December 2019 в 20:41
поделиться

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

  1. Подумайте о том, чтобы упаковать все, что угодно, в пакет UDP. Я не уверен, насколько легко инициировать маршрутизацию "распакованных" пакетов TCP на удаленной стороне.
  2. Рассмотрите возможность использования PPTP или аналогичного протокола туннелирования.
1
ответ дан 3 December 2019 в 20:41
поделиться

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

2
ответ дан 3 December 2019 в 20:41
поделиться

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

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

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

2
ответ дан 3 December 2019 в 20:41
поделиться

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

ИЗМЕНИТЬ - Я не знал, что TCP не имеет собственного поля заголовка, поэтому не было бы возможности сделать это, не написав собственный эквивалент TCP, содержащий эту информацию. SCTP все еще может быть полезен, поэтому я оставлю эту ссылку.

2
ответ дан 3 December 2019 в 20:41
поделиться