Мне нужно отправить некоторые данные по подсети с фиксированным нестандартным MTU (например, 1560) с использованием TCP. Все кадры Ethernet, передаваемые через эту подсеть, должны быть вручную дополнены нулями, если длина кадра меньше MTU.
Таким образом, размер данных должен быть (1560 - sizeof (заголовок IP) - sizeof (заголовок TCP)).
Я собираюсь это сделать следующим образом:
Я установил параметр TCP_CORK, чтобы уменьшить фрагментацию данных. Это ненадежно, поскольку потолок составляет 200 миллисекунд, но он работает.
Я знаю размер IP-заголовка (20 байт), поэтому длина данных должна быть равна (1540 - sizeof (TCP header)).
Это проблема. Я не знаю размер заголовка TCP. Размер его поля "Параметры" плавающий.
Итак, вопрос: как получить размер заголовка TCP? Или, может быть, есть способ отправить TCP-кадры с заголовками фиксированной длины?