Борьба с битом DF и черными дырами или как фрагментировать нефрагментируемое.
Оригинал: http://dormestmass.blogspot.com/2007/08/df.html
В заголовке IP пакета имеется один интересный флаг -»don’t
fragment» или сокращенно DF. Назначение сего флага — запретить
разбивку пакета на фрагменты. Честно говоря, ситуации, когда
встречаются пакеты с этим флагом довольно редки, но они таки бывают и
могут надолго испортить настроение администратору/пользователю вот по
какой причине.
Различные технологии канального уровня предусматривают различный
размер MTU. И вполне естественно, что на пути следования трафика между
сервером и клиентом могут попадатся сегменты с разными размерами MTU.
На схеме ниже показана ситуация, когда клиент подключен к сети через
GRE-туннель, у которого размер MTU на 24 байта меньше, чем у
исходящего реального интерфейса. Клиент хочет произвести некий
обмен трафиком с удаленным сервером, а вот сервер выставляет этот
самый флаг на свои исходящие пакеты.

Происходит следующая ситуация. Во время установки TCP-сессии клиент и
сервер анонсируют свои максимальные размеры сегментов (maximum segment
size или MSS), показывая друг другу какие максимальные TCP сегменты
они могут принимать. После получения опций MSS устройства вычисляют
максимальный размер сегмента, который будет посылатся удаленной
стороне (Send Max Segment Size или SMSS). SMSS будет равен размеру
меньшего MSS. Процедура установки TCP MSS описана в RFC 879.
Читать далее…