Бит DF установлен для программы сокета UDP

Я попробовал простой код сокета UDP в Java, и анализ показал, что бит DF всегда был установлен в заголовке IP-пакета, есть ли способ очистить флаг?

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

Снимок захвата пакета


person Anushreya    schedule 04.02.2019    source источник
comment
DF имеет значение 1 или 0 (не фрагментировать или фрагментировать). Почему именно вы хотите очистить флаг? Вы используете полностью закрытую сеть, где вы знаете, что MTU будет стандартным? UDP — это протокол, ориентированный на сообщения, а это означает, что он не имеет встроенного механизма переупорядочивания или повторной передачи, поэтому вы хотите избежать фрагментации, если это вообще возможно, и именно здесь помогает флаг DF. Кроме того, с TCP вы почти всегда хотите, чтобы флаг был включен, чтобы в случаях, когда фрагментация действительно происходит, если DF не был установлен, отправляющий TCP никогда не узнал бы, что он отправляет сегменты, которые слишком велики.   -  person sorifiend    schedule 05.02.2019
comment
Итак, я работаю над контейнерной платформой SDN на основе Java. При выполнении стресс-теста с использованием сокетов Datagram пакеты с флагом DF, установленным на 1 (не фрагментировать), отбрасываются, поэтому необходимо очистить бит. Кроме того, поможет ли мне использование каналов дейтаграмм? Благодаря тонну!!   -  person Anushreya    schedule 05.02.2019
comment
Если пакеты отбрасываются, то похоже, что у вас совершенно другая, но очень серьезная проблема, которую необходимо исправить в первую очередь (многие источники используют флаг DF), и просто удаление флага DF кажется очень плохим решением, которое может привести к потере данных в будущее, если пакеты не могут быть собраны правильно (рекомендую прочитать о том, что делает флаг). Чтобы ответить на ваш комментарий об использовании UDP или TCP: как вы знаете, это зависит от того, что вы пытаетесь отправить, если вам нужны все данные для передачи, не трогайте дейтаграмму, вам нужно использовать TCP или другой протокол, который делает убедитесь, что все данные получены.   -  person sorifiend    schedule 05.02.2019
comment
Я это понимаю, но могу ли я вообще управлять этим флагом DF?   -  person Anushreya    schedule 07.02.2019
comment
Да, эта ссылка может помочь: stackoverflow.com/q/41032248/1270000   -  person sorifiend    schedule 07.02.2019