туннель может обманчиво выглядеть как канал, имеющий только один сегмент ретрансляции и наименьшую стоимость пути, в то время как в действительности он имеет гораздо больше сегментов ретрансляции и является более «дорогим» по сравнению с другим путем. Эту проблему можно отчасти решить, настроив надлежащим образом протокол маршрутизации. Можно рассмотреть возможность использования другого протокола маршрутизации на интерфейсе туннеля – не использовать протокол маршрутизации, работающий на физическом интерфейсе. Проблем с рекурсивной маршрутизацией можно избежать путем настройки соответствующих статических маршрутов на получателя туннеля.
Рекурсивный маршрут возникает тогда, когда наилучший путь до конечной точки туннеля проходит через сам туннель. Такая ситуация может привести к миганию туннельного интерфейса. При возникновении рекурсивной маршрутизации будет выводиться следующая ошибка. %TUN-RECURDOWN Interface Tunnel 0 temporarily disabled due to recursive routing Маршрутизатор как участник PMTUD в конечной точке туннеля Когда маршрутизатор является конечной точкой туннеля, он выполняет две различные роли PMTUD. Во-первых, он перенаправляет пакеты узла. Для выполнения PMTUD-обработки маршрутизатор должен проверить размер и бит DF исходного пакета и при необходимости выполнить соответствующие действия.
Вторая роль нужна, после того как маршрутизатор инкапсулирует оригинальный IP-пакет в пакет туннеля. На данном этапе маршрутизатор в основном выполняет роль узла по отношению к PMTUD и туннельному IP-пакету. Сначала давайте посмотрим, что происходит с PMTUD, когда маршрутизатор выполняет первую задачу (перенаправляет IP-пакеты узла). Эта задача выполняется перед тем, как маршрутизатор инкапсулирует IP-пакет узла в пакет туннеля. Когда маршрутизатор осуществляет переадресацию пакета узла, он выполняет следующие действия: Проверяет, установлен ли бит DF. Проверяет, пакет какого размера может быть передан по туннелю.
Выполняет фрагментацию (в случае если пакет слишком большой и если DF бит не установлен), инкапсулирует фрагменты и отправляет их. Или сбрасывает пакет (если он слишком большой и если установлен бит DF) и посылает отправителю ICMP-сообщение. Инкапсулирует (если пакет не слишком большой) и отправляет. В общем случае мы можем выбрать инкапсуляцию с последующей фрагментацией (отправка двух фрагментов инкапсуляции) либо фрагментацию с последующей инкапсуляцией (отправка двух инкапсулированных фрагментов).
Ниже приведены несколько примеров, в которых описан процесс инкапсуляции и фрагментации IP-пакетов, а также два сценария, которые описывают взаимодействие PMTUD с пакетами, которые передаются по сетям, диаграммы которых приведены ниже. В первом примере показано, что происходит с пакетом, когда маршрутизатор, находящийся на входе в туннель, функционирует как переадресующий маршрутизатор. Необходимо помнить, что для PMTUD-обработки маршрутизатор должен проверить размер пакета и бит DF пакета, содержащего исходные данные, а также выполнить соответствующие действия. В данном примере для туннеля используется инкапсуляция GRE. Ниже можно видеть, что GRE выполняет фрагментацию перед инкапсуляцией.
В примерах, которые будут приведены ниже, описываются сценарии, когда фрагментация выполняется после инкапсуляции. В примере 1 бит DF не установлен (DF = 0), значение IP MTU для GRE-туннеля составляет 1476 байт (1500 - 24). Пример 1