The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Проблема DF бита и фрагментации в GRE туннелях (cisco gre tunnel fragment mtu)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: cisco, gre, tunnel, fragment, mtu,  (найти похожие документы)
From: HunSolo <http://www.ciscolab.ru/user/HunSolo/>; Date: Sun, 23 Feb 2008 17:02:14 +0000 (UTC) Subject: Проблема DF бита и фрагментации в GRE туннелях Оригинал: http://www.ciscolab.ru/tcpip/31-gre_fragment.html Иногда, когда трафик проходит через GRE туннель, вы можете успешно пинговать любой хост в Интеренте, но не может просматривать Web-страницы или передавать файлы используя протокол FTP. В данном документе мы рассмотрим обычные причины этой проблемы, и предложим несколько решений. Прежде чем приступить к обсуждению данной проблемы (проблема DF бита), рекомендуем ознакомится со статьями Протокол GRE и Конфигурация GRE туннелей, чтобы иметь представление о том, что такое GRE протокол и зачем он нужен. Фрагментация пакетов и сообщения ICMP Рассмотрим сетевую диаграмму показанную ниже. Два роутера R1 и R2 сформировали GRE туннель. Проблема DF бита и фрагментации в GRE туннелях В этой диаграмме, когда Клиент желает получить доступ к web странице в Интернете, он устанавливает TCP сеанс с Web-сервером. Во время этого процесса, Клиент и Web-сервер анонсируют друг другу свой максимальный размер сегмента (Maximum Segment Size, MSS), указывая, что они могут принимать TCP сегменты вплоть до этого размера. После получения опции MSS, каждое устройство вычисляет размер сегмента, который можно послать. Это называется Посылкой Сегмента Максимального Размера (Send Max Segment Size, SMSS), и она равна наименьшему значению из двух MSS. Для нашего примера, пусть, Web-сервер решает, что он может посылать пакеты длинной до 1500 байтов. Поэтому он посылает 1500-байтовый пакет Клиенту, и, в IP заголовке он устанавливает бит DF (don't fragment), т.е. пакет не может быть фрагментирован. Когда пакет достигает R2, маршрутизатор пытается инкапсулировать его в туннельный пакет. В случае туннельного интерфейса GRE, IP MTU на 24 байта меньше чем IP MTU реального исходящего интерфейса. Для исходящего Ethernet интерфейса, это означает, что IP MTU на туннельном интерфейсе будет 1500 минус 24, или 1476 байт. R2 пробует засунуть 1500-байтовый IP пакет в 1476-байтовый IP MTU интерфейс. Так как это не возможно, R2 должен фрагментировать пакет, создавая один пакет 1476 байт (данные и IP заголовок) и один пакет 44 байт (24 байта данных и нового IP заголовка в 20 байт). Затем R2 инкапсулирует оба этих пакета, чтобы получить пакеты размером 1500 и 68 байт, соответственно. Эти пакеты теперь могут быть отосланы через реальный интерфейс, который имеет 1500-байтовый IP MTU. Однако, вспомним, что пакет, принятый маршрутизатором R2 имеет установленный бит DF. Таким образом, R2 не может фрагментировать пакет, и взамен, он инструктирует Web-сервер посылать пакеты меньшего размера. Он делает это, посылая Web серверу ICMP пакет типа 3 с кодом 4 (Destination Unreachable; Fragmentation Needed and DF set), что означает заданный узел не доступен, необходима фрагментация, но установлен DF бит. Это сообщение ICMP содержит правильный MTU для Web-сервера, который должен получить его и соответственно настроить размер пакета. Мы можем посмотреть на ICMP пакеты оправляемые с R2, с помощью команды debug ip icmp. ICMP: dst (10.10.10.10) frag. needed and DF set unreachable sent to 10.1.3.4 Обычно проблема происходит, когда сообщения ICMP блокированы по направдению к Web-серверу. Когда это случается, пакет ICMP никогда не достигает Web-сервера, таким образом, препятствуя прохождению данных между клиентом и сервером. Решить данную проблему можно любым из четырех способов: * Выяснить где блокированы сообщения ICMP, и посмотреть можем ли мы разрешить их прохождение. * Установить MTU на интерфейсе Клиента в 1476 байт, вынуждая SMSS быть меньшим, таким образом пакеты не должны будут фрагментироваться, когда они достигнут R2. Однако, если Вы изменяете MTU для Клиента, Вы должны также изменить MTU для всех устройств, которые находятся в этой сети с этим Клиентом. На Ethernet сегменте может находиться достаточно большое количество устройств. * Использовать прокси-сервер между R2 и вашим шлюзом. * Если туннель GRE работает по каналам, которые могут иметь больше MTU чем 1500 байтов плюс туннельный заголовок, то другое решение состоит в том, чтобы увеличить MTU до значения 1524 (1500 плюс 24 для GRE) на всех интерфейсах и каналах между маршрутизаторами формирующими GRE Если вышеупомянутые варианты не выполнимы тогда нижеследующие решения могут быть полезными: 1) Использовать полиси роутинг (PBR), чтобы сбросить бит DF в IP пакетах interface ethernet0 .. ip policy route-map clear-df route-map clear-df permit 10 match ip address 101 set ip df 0 access-list 101 permit tcp 10.1.3.0 0.0.0.255 any Такая конфигурация позволит фрагментировать IP пакет прежде, чем он инкапсулируется в GRE. Принимающий хост должен тогда будет собрать IP пакеты из фрагментов. Это - обычно не проблема. 2. Изменить значение опции TCP MSS в SYN пакетах, которые проходят через маршрутизатор. Он уменьшит значение MSS в пакете TCP SYN так, что оно будет меньше или равным значению в команде ip tcp adjust-mss, в данном случае 1436 (MTU минус размер IP, TCP, и заголовков GRE). Теперь конечный хост будет посылать пакеты TCP/IP, не большие чем это значение. interface tunnel0 ... ip tcp adjust-mss 1436 3. Заключительный выбор состоит в том, чтобы увеличить IP MTU на туннельном интерфейсе до значения 1500. Однако, увеличение туннельного IP MTU приведет к тому, что туннельные пакеты будут фрагментированными, потому что бит DF первоначального пакета не копируется в GRE заголовок. В этом сценарии, маршрутизатор на другом конце GRE туннеля должен повторно собрать GRE пакет прежде, чем он может удалить заголовок GRE и переслать внутренний пакет. interface tunnel0 ... ip mtu 1500 Сборка IP пакета выполняется на CPU и активно использует память роутера. Поэтому, этот выбор может значительно сократить пропускную способность пакетов через GRE туннель. И в заключение, самая общая причина неспособности просматривать Интернет странички по туннелю GRE происходит из-за вышеупомянутой проблемы фрагментации. Решение состоит в том, чтобы разрешить прохождение ICMP или применить обходное решение ICMP проблемы любым из вышеупомянутых способов. По материалам: www.cisco.com Публикация статьи с сайта разрешена только при обязательном указании источника www.ciscolab.ru

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру