Преимущества “не фрагментируют” на пакетах TCP?

Один из наших клиентов испытывает затруднения при представлении данных из нашего приложения (на их ПК) к серверу (другое географическое положение). При отправке пакетам менее чем 1 100 байтов все хорошо работает, но выше этого мы видим, что TCP ретранслирует пакет каждые несколько секунд и не получает ответа. Пакеты, которые мы используем для тестирования, составляют приблизительно 1 400 байтов (но меньше, чем 1472). Я могу отправить ping ICMP в www.google.com, который составляет 1 472 байта, и получите ответ (таким образом, это не их транзитные участки маршрутизатора/первого нескольких).

Я нашел, что наше приложение устанавливает флаг DF для этих пакетов, и я полагаю, что маршрутизатор по пути к серверу имеет MTU меньше, чем/равняться к 1100 и отбрасыванию пакета.

Это влияет на 1 клиент в 5 000, но так как общие маршруты будут отличаться, это ожидается.

Данные являются конвертом SOAP, и мы ожидаем ответ SOAP назад. Я не могу выровнять по ширине, ПОЧЕМУ мы делаем это, код, чтобы сделать, это было записано предыдущим разработчиком.

Так... Есть ли какие-либо преимущества ИЛИ выравнивание к установке флага DF на пакетах TCP для данных приложения?

Я могу думать о причинах, это необходимо для приложений диагностики сети, но не в нашей ситуации (мы хотим, чтобы данные добрались до конечной точки, фрагментированной или не). Один из наших системных администраторов сказал, что это могло бы иметь некоторое отношение к нам использующий SSL, но насколько я знаю, что SSL похож на поток и независимо от фрагментации, пока поток восстановлен в конце, нет никакой проблемы.

Если не будет никакого хорошего выравнивания, то я буду изменять поведение нашего приложения.

Заранее спасибо.

17
задан wi1 9 June 2016 в 20:29
поделиться

2 ответа

Флаг DF обычно устанавливается на IP-пакетах, переносящих сегменты TCP.

Это связано с тем, что TCP-соединение может динамически изменять размер своего сегмента, чтобы соответствовать MTU пути, и лучшая общая производительность достигается, когда каждый сегмент TCP переносится в одном IP-пакете.

Таким образом, для пакетов TCP установлен флаг DF, который должен вызывать возврат пакета ICMP Fragmentation Needed, если промежуточный маршрутизатор должен отбросить пакет из-за его слишком большого размера. Затем отправляющий TCP уменьшит свою оценку MTU пути соединения (максимальная единица передачи) и повторно отправит меньшие сегменты. Если бы DF не был установлен, отправляющий TCP никогда бы не узнал, что он отправляет слишком большие сегменты. Этот процесс называется PMTU-D («Обнаружение MTU пути»).

Если пакеты ICMP, необходимые для фрагментации, не проходят, значит, вы имеете дело с неисправной сетью.В идеале первым шагом было бы идентифицировать неправильно настроенное устройство и исправить его; однако, если это не сработает, вы добавляете в приложение ручку настройки, которая сообщает ему, что необходимо установить параметр сокета TCP_MAXSEG с помощью setsockopt () . (Типичным примером неправильно настроенного устройства является маршрутизатор или брандмауэр, настроенный неопытным сетевым администратором для отбрасывания всех ICMP, не понимая, что TCP PMTU-D требует пакетов, требующих фрагментации).

39
ответ дан 30 November 2019 в 11:32
поделиться

Очевидно, некоторые протоколы, такие как NFS, выигрывают от избегания фрагментации (текст ссылки). Однако вы правы в том, что обычно не следует запрашивать DF, если только он вам действительно не нужен.

-2
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: