Как настроить / уменьшить размер сегмента TCP
Мне нужно отправить данные со своей машины на удаленный сервер по протоколу TCP, и мне нужно, чтобы данные были фрагментированы (это тест). Это объясняет причину, по которой я ищу способ изменить размер сегмента на небольшое число.
Я погуглил и обнаружил, что мы можем установить MSS, используя iptables
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss some-number
Тем не менее, после большего количества поисков в гугле кажется, что это решение используется для того, чтобы сообщить серверу размер сегмента TCP, который может принять моя машина, в отличие от установки размера сегмента в пакетах / сегментах tcp, которые моя машина отправляет на сервер.
Я также узнал о MTU и о том, как его изменить, но, похоже, это не то, что я хочу, потому что мне нужно / я хочу сократить свои данные на более высоком уровне (на транспортном уровне). Мои вопросы: 1) как я могу установить MSS для сегментов TCP, которые отправляет моя машина? 2) возможно ли сделать это с помощью Java?
Извините за эти вопросы новичка.
2 ответа
Просто установите небольшой размер буфера отправки сокета, если можете.
В C вы можете сделать это, установив опцию сокета TCP_MAXSEG; увидеть man 7 tcp
,
В Java соответствующий параметр сокета не представлен в стандартных API-интерфейсах Socket. Однако на этой странице есть подсказка, что вы можете установить другие параметры, если реализовали нестандартный класс SocketImpl.