Отправка TCP-кадров фиксированной длины

Мне нужно отправить некоторые данные по подсети с фиксированным нестандартным MTU (например, 1560) с использованием TCP. Все кадры Ethernet, передаваемые через эту подсеть, должны быть вручную дополнены нулями, если длина кадра меньше MTU.

Таким образом, размер данных должен быть (1560 - sizeof (заголовок IP) - sizeof (заголовок TCP)).

Я собираюсь это сделать следующим образом:

  1. Я установил параметр TCP_CORK, чтобы уменьшить фрагментацию данных. Это ненадежно, поскольку потолок составляет 200 миллисекунд, но он работает.

  2. Я знаю размер IP-заголовка (20 байт), поэтому длина данных должна быть равна (1540 - sizeof (TCP header)).

  3. Это проблема. Я не знаю размер заголовка TCP. Размер его поля "Параметры" плавающий.

Итак, вопрос: как получить размер заголовка TCP? Или, может быть, есть способ отправить TCP-кадры с заголовками фиксированной длины?

5
задан Michael Foukarakis 31 May 2011 в 15:00
поделиться