Способ предотвращения фрагментации TCP/IP-пакетов при использовании VPLS в сети с коммутацией пакетов
METHOD OF PREVENTING FRAGMENTATION OF TCP/IP PACKETS WHEN USING VPLS IN A PACKET SWITCHED NETWORK

Область техники, к которой относится изобретение
Предполагаемое изобретение относится к цифровым сетям передачи данных с коммутацией пакетов (IP) и, в частности, к способам предотвращения фрагментации TCP/IP-пакетов при использовании VPLS (Virtual Private LAN Service).
Уровень техники
В современных цифровых сетях передачи данных, имеющих множество узлов, сложную распределенную топологию и отдельные участки (подсети или сегменты), которые содержат компьютеры конечных пользователей (клиентов) и которые могут быть территориально расположенными в разных географических регионах, большое значение имеет возможность использовать преимущества объединения в сеть с коммутацией пакетов на канальном уровне (с одним сегментом broadcast). В такой сети можно использовать простые сетевые устройства (принтеры, сканеры, IP-телефоны), устройства для конференц-связи и другие клиентские устройства с упрощенной настройкой. Это позволяет облегчить настройку и в дальнейшем снизить затраты на обслуживание сети в целом.
Для такого объединения удаленных сегментов сети часто используется технология VPLS [Lasserre М., Kompella V., Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) Signaling, 2007 (RFC 4762) - статья по адресу: https://tools.ietf.org/html/rfc4762; Kompella K., Rekhter Y., Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and Signaling, 2007 (RFC 4761) - статья по адресу: https://tools.ietf.org/html/rfc4761].
В области технологии VPLS используются следующие термины.
Клиентская сеть (КС; в английской терминологии Client Equipment, СЕ) - это сегмент сети, содержащий клиентские компьютеры (КК) и другое клиентское оборудование, объединенный с другими КС по технологии VPLS.
Пограничный маршрутизатор (ПМ; в английской терминологии Provider Edge, РЕ) - это маршрутизатор, который служит для подключения КС к другим сегментам сети по технологии VPLS.
Внешняя сеть - это участок сети, объединяющий ПМ.
Maximum transmission unit (MTU) - это максимальный размер полезного блока данных одного пакета, который может быть передан протоколом без фрагментации. Значение MTU определяется стандартом соответствующего протокола, но может быть переопределено автоматически для определенного потока (проколом PMTUD [Mogul J., Deering S., Path MTU Discovery, 1990 (RFC 1191) - статья по адресу: https://tools.ietf.org/html/rfc1191]) или вручную для нужного интерфейса. На некоторых интерфейсах MTU по умолчанию может быть установлено ниже максимально возможного. Значение MTU ограничено снизу, как правило, минимально допустимой длиной кадра.
Maximum segment size (MSS) - это максимальный размер полезного блока данных в байтах для TCP-пакета (сегмента). Этот параметр не учитывает длину заголовков TCP и IP. Для установления корректной TCP-сессии с удаленным хостом должно соблюдаться следующее условие:
MSS + заголовок TCP + заголовок IP≤MTU,
таким образом,
максимальный размер MSS=MTU - размер заголовка IP - размер заголовка TCP [Borman D., TCP Options and Maximum Segment Size (MSS), 2012 (RFC 6691) - статья по адресу: https://tools.ietf.org/html/rfc6691].
Технология VPLS позволяет объединять несколько удаленных КС в одну локальную сеть с коммутацией пакетов на канальном уровне. Сетевые узлы в каждой КС при этом взаимодействуют с узлами в других КС, обмениваясь с ними кадрами канального уровня таким же образом, как если бы оба узла находились в одной и той же КС.
Для построения единой сети канального уровня на базе VPLS каждая КС подключается к своему ПМ. Несколько ПМ, каждый из которых подключен к одной из КС, соединяются между собой с помощью построения туннельных соединений между ними. Каждый ПМ должен быть связан туннелем с каждым из остальных ПМ, образующих данный сервис VPLS, для этого может использоваться один из известных туннельных протоколов канального или сетевого уровня (MPLS, EtherIP и др. [Rosen Е., Rekhter Y., BGP/MPLS IP Virtual Private Networks (VPNs), 2006 (RFC 4364) - статья по адресу: https://tools.ietf.org/html/rfc4364; Housley R., Hollenbeck S., EtherIP: Tunneling Ethernet Frames in IP Datagrams, 2002 (RFC 3378) - статья по адресу: https://tools.ietf.org/html/rfc3378]).
При поступлении кадров из КС и от других ПМ данный ПМ производит их коммутацию, для чего ведет таблицу адресов канального уровня, связывая каждый адрес с логическим портом (в качестве порта может выступать один из сетевых интерфейсов ПМ, подключенный к одной из КС, либо один из удаленных ПМ). При получении кадра из какого-либо логического порта производится поиск адреса получателя кадра, и кадр пересылается в логический порт, связанный с данным адресом. Если адрес получателя отсутствует в таблице, либо кадр широковещательный, то создается несколько копий кадра, которые рассылаются следующим образом: если исходный кадр поступил из своей КС, то копии рассылаются во все остальные КС, а также на все удаленные ПМ; если же исходный кадр поступил от удаленного ПМ, то копии рассылаются только в своей КС.
Каждый ПМ может, помимо функций VPLS, выполнять и другие функции: в нем может происходить маршрутизация пакетов из своей КС во внешнюю сеть и обратно, а также могут работать сетевые сервисы, доступные для своей КС. Для этого ПМ имеет отдельный логический порт, соответствующий его собственной сетевой подсистеме, и в такой логический порт коммутируются кадры из своей КС, адресованные самому ПМ на канальном уровне.
При использовании VPLS от КК из КС к своему ПМ и далее к связанному ПМ другой КС через внешний участок сети передается некоторый непрерывный поток данных. При этом на КК поток разбивается на пакеты, максимально большего размера, насколько это позволяет MTU его сетевого интерфейса. В результате на портах ПМ соединенным со своей КС принимается большое количество кадров максимально возможного для Ethernet размера (1514 байт при отсутствии тегов VLAN).
Когда ПМ коммутируется такой кадр в логический порт другого ПМ, он инкапсулируется в пакет протокола канального или сетевого уровня, обеспечивающего VPLS, что приводит к дальнейшему увеличению общего размера пакета на величину соответствующих заголовков. Как правило, при использовании Ethernet, MTU всех интерфейсов ПМ одинаковы, и полученный пакет не может быть отправлен другому ПМ без фрагментации. Фрагментация позволяет успешно доставить такой пакет, однако при этом резко понижается эффективность передачи из-за необходимости для приемной стороны дожидаться полного приема всех фрагментов, прежде чем начать обработку пакета, из-за чего фрагментация практически во всех случаях рассматривается как нежелательный эффект.
Для того чтобы избежать фрагментации, необходимо тем или иным образом сообщить узлу-отправителю, что необходимо разбивать данные на IP-пакеты меньшего размера.
В общем случае, решить эту проблему достаточно сложно, но в настоящее время для надежной передачи большого объема данных в основном используется протокол транспортного уровня TCP, работающий поверх протокола IP. Протокол TCP предполагает установление сессии передачи данных и периодические подтверждения сторонами факта передачи тех или иных порций данных. При установлении сессии участники TCP-соединения обмениваются опциями максимального размера сегмента (MSS), то есть максимального размера пакета, который готов принимать участник соединения, отправляющий опцию MSS. После установки соединения каждый участник должен посылать другому участнику пакеты не большего размера, чем было указано в опции MSS. Этот механизм предоставляет удобную возможность избежать фрагментации на промежуточных узлах (маршрутизаторах, коммутаторах) при передаче пакетов протокола TCP путем уменьшения значения MSS, относящегося к данному соединению.
Достичь такого эффекта можно путем ручной настройки максимально возможного размера MSS для макетов, маршрутизируемых в сети VPLS. Известен такой способ настройки VPLS на сетевом оборудовании компании Cisco, который характерен тем, что на каждом ПМ настраивается максимальный размер MSS [Resolve IP Fragmentation, MTU, MSS, and PMTUD Issues with GRE and IPSEC, Cisco support docs, Updated march 25, 2016, Document ID: 25885 - статья по адресу: https://www.cisco.com/c/en/us/support/docs/ip/generic-routing-encapsulation-gre/25885-pmtud-ipfrag.html].
В известном способе используются следующие шаги:
для каждого ПМ на внешнем интерфейсе, связанном с другими ПМ, задают размер MSS соответствующий MTU внешнего интерфейса ПМ минус размер заголовка протокола инкапсуляции VPLS;
для каждого ПМ на внутреннем интерфейсе, связанном с собственной КС задают размер MSS равный размеру MSS на внешнем интерфейсе ПМ.
В результате, при установлении соединения КК к своему ПМ будет согласован не максимально возможный MSS в КС, а меньший, максимально возможный между ПМ, что является недостатком способа.
Кроме того, значение MSS для каждого интерфейс приходится устанавливать вручную.
При изменении максимально возможного MSS между ПМ, например, при изменении значения MTU на внешнем интерфейсе ПМ, связанном с другими ПМ, необходимо перенастраивать значение на каждом интерфейсе также вручную.
Известен также способ автоматического изменения MSS в зависимости от размера MTU интерфейсов при маршрутизации в ядре Linux 4.2.3 и старше, под названием "Clamp the MSS" (ограничение размера MSS) [Circumventing Path MTU Discovery issues with MSS Clamping (for ADSL, cable, PPPoE & PPtP users) - статья по адресу: http://lartc.org/howto/lartc.cookbook.mtu-mss.html, а также по адресу: https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.cookbook.mtu-mss.html].
В известном способе используются следующие шаги:
определяется максимальные значения MTU на интересующем интерфейсе (обычно внешнем, т.к. преимущественно на нем выполняется дополнительная инкапсуляция);
определяется что проходящий пакет принадлежит протоколу TCP/IP, в заголовке TCP установлен флаг SYN и присутствует опция MSS;
значение MSS автоматически уменьшается до значения MTU минус 40 байт для протокола IPv4; MTU минус 60 байт для протокола IPv6.
Таким образом, достигается согласование MSS, для выбранных интерфейсов, позволяющее маршрутизировать IP-пакеты без их фрагментации.
Известный способ принят за прототип.
Тем не менее, известный способ имеет ряд недостатков.
Способ применяется для маршрутизации IP-пакетов без возможности использования при коммутации кадров ПМ с использованием VPLS.
Значения MSS устанавливаются, основываясь на заранее заданных значениях, и не позволяют максимально эффективно использовать выделенный канал.
Раскрытие изобретения
Техническим результатом является
1) снижение нагрузки ПМ при использовании VPLS благодаря предотвращению фрагментации для ТСР-соединений,
2) повышение пропускной способности ПМ при использовании VPLS благодаря точному расчету максимально возможных параметров MSS при коммутации кадров,
3) снижение сложности настройки ПМ при использовании VPLS благодаря полностью автоматическому расчету параметров MSS при коммутации кадров.
Указанный результат достигается за счет применения следующего способа предотвращения фрагментации TCP/IP-пакетов при использовании VPLS в сети с коммутацией пакетов IP, причем в состав сети входят
клиентские сети (КС), каждая из которых содержит клиентские компьютеры (КК) и пограничный маршрутизатор (ПМ);
внешнюю сеть, соединяющую все ПМ по технологии VPLS;
причем каждый ПМ
имеет внешний интерфейс, связанный с внешней сетью и имеющий установленное значение максимального размера полезного блока данных одного пакета, который может быть передан протоколом без фрагментации (MTU);
имеет внутренний интерфейс, связанный со своей КС и имеющий установленное значение MTU;
содержит средство обработки, выполненное с возможностью:
сравнения IP-адресов, содержащихся в кадрах запроса;
модификации кадра запроса путем изменения данных;
способ заключается в том, что
посылают запрос от компьютера (КК1), находящегося в своей сети (КС1) на установление TCP-соединения с компьютером (КК2), находящегося в другой сети (КС2), причем запрос на канальном уровне представляет собой кадр протокола канального уровня и содержит
IP адрес КК2, находящегося в КС2;
значение максимального размера полезного блока данных для ТСР-пакета (MSS), который установлен КК1 при согласовании значений MTU своего интерфейса и внутреннего интерфейса ПМ1;
получают запрос от КК1 в ПМ1;
обрабатывают полученный кадр с запросом на установление ТСР-соединения в средстве обработки ПМ1, выполняя следующие действия:
проверяют выполнение следующих условий:
кадр содержит пакет протокола IP;
в составе пакета IP содержится заголовок протокола TCP;
в заголовке TCP установлен флаг SYN;
в заголовке TCP присутствует опция MSS;
если все условия выполнены, то вычисляют максимальный размер MSS для данного TCP-соединения, выполняя следующие действия:
вычисляют значение MSS для внутреннего интерфейса ПМ1, путем вычитания из установленного значения MTU общего размера заголовков IP и TCP;
вычисляют объем дополнительных заголовков инкапсуляции для связи ПМ1 с ПМ2 с учетом используемого протокола VPLS;
вычисляют максимальный размер MSS, вычитая из ранее вычисленного значения MSS объем дополнительных заголовков инкапсуляции;
если указанное в заголовке значение MSS больше вычисленного максимального значения MSS, то
записывают вычисленное значение MSS в кадр;
вычисляют новую контрольную сумму ТСР-пакета;
записывают новую контрольную сумму TCP-пакета в кадр;
передают кадр из средства в ПМ1;
передают полученный из средства обработки ПМ1 кадр с запросом на установление TCP-соединения из ПМ1 в ПМ2;
получают кадр с запросом от ПМ1 в ПМ2;
обрабатывают полученный кадр с запросом на установление ТСР-соединения в средстве обработки ПМ2, выполняя следующие действия:
проверяют выполнение следующих условий:
кадр содержит пакет протокола IP;
в составе пакета IP содержится заголовок протокола TCP;
в заголовке TCP установлен флаг SYN;
в заголовке TCP присутствует опция MSS;
если все условия выполнены, то вычисляют максимальный размер MSS для данного TCP-соединения, выполняя следующие действия:
вычисляют значение MSS для внешнего интерфейса ПМ2, путем вычитания из установленного значения MTU общего размера заголовков IP и TCP;
вычисляют объем дополнительных заголовков инкапсуляции для связи ПМ1 с ПМ2 с учетом используемого протокола VPLS;
вычисляют максимальный размер MSS, вычитая из ранее вычисленного значения MSS объем дополнительных заголовков инкапсуляции;
если указанное в заголовке значение MSS больше вычисленного максимального значения MSS, то
записывают вычисленное значение MSS в кадр;
вычисляют новую контрольную сумму ТСР-пакета;
записывают новую контрольную сумму TCP-пакета в кадр;
передают кадр из средства обработки в ПМ2;
передают полученный из средства обработки ПМ2 кадр с запросом на установление TCP-соединения через внутренний интерфейс ПМ2 в КК2;
получают кадр с запросом в КК2;
формируют в КК2 ответ для КК1;
завершают установку TCP-соединения между КК1 и КК2.
В реальной сети, например, корпоративной, компьютеры отдельных пользователей (клиентов) или КК, расположены в территориально удаленных сегментах сети (КС), имеют выход во внешнюю сеть, например, Интернет, через отдельный маршрутизатор (названный выше ПМ). Данные ПМ организуют сеть VPLS, а каждая КС подключается к своему ПМ. Несколько ПМ, каждый из которых подключен к одной из КС, соединяются между собой с помощью построения туннельных соединений между ними. Каждый ПМ должен быть связан туннелем с каждым из остальных ПМ, образующих данный сервис VPLS, для этого может использоваться один из известных туннельных протоколов канального или сетевого уровня (MPLS, GRE, EtherIP и др.)
Каждый ПМ, например, может представлять собой программно-аппаратный комплекс (ПАК) на базе какой-либо ОС (Linux).
Для реализации предложенного способа в состав комплекса включают средство обработки, реализованное в виде программного модуля.
В данном модуле обрабатываются все кадры (на втором уровне модели OSI), проходящие через ПМ. Для кадров, коммутируемых между удаленными ПМ и локальной КС, либо между локальной КС и удаленными ПМ, проверяется, что в кадре содержится пакет TCP с установленным флагом SYN, что указывает на первый этап "трехэтапного согласования" (англ. three way handshake) установки TCP соединения, и присутствует опция MSS. Кадры, удовлетворяющие таким условиям, подвергаются дальнейшей обработке.
Для таких кадров вычисляется размер MSS для сетевого интерфейса, через который получен кадр. Из значения MTU интерфейса вычитается размер заголовков IP 20 байт и TCP 20-60 байт. Далее вычисляется объем дополнительных заголовков инкапсуляции VPLS для связи с удаленным ПМ, в зависимости от реализации протокола инкапсуляции он может иметь разное значение, например, 2 байта при использовании etherip [Borman D., TCP Options and Maximum Segment Size (MSS), 2012 (RFC 6691) - статья по адресу: https://tools.ietf.org/html/rfc6691]. Объем дополнительных заголовков инкапсуляции VPLS также вычитается из ранее вычисленного размера MSS. Вычисленный максимальный размер MSS сравнивается с указанным в заголовке TCP. Если указанный в заголовке размер MSS больше вычисленного максимального, то MSS в заголовке TCP заменяется на вычисленный, контрольная сумма TCP-пакета пересчитывается и записывается в кадр.
После окончания процесса "трехэтапного согласования" устанавливается TCP-соединение со значением максимального размера MSS, позволяющего осуществлять передачу пакетов без фрагментации.
Таким образом, преимуществом предложенного способа, по сравнению с известными, состоит в том, что подсчет максимально допустимого значения MSS автоматизирован и не требует первоначальных и дополнительных настроек.
За счет этого также достигается:
1) снижение нагрузки ПМ при использовании VPLS благодаря предотвращению фрагментации для ТСР-соединений,
2) повышение пропускной способности ПМ при использовании VPLS благодаря точному расчету максимально возможных параметров MSS при коммутации кадров,
3) снижение сложности настройки ПМ при использовании VPLS благодаря полностью автоматическому расчету параметров MSS при коммутации кадров.
Осуществление изобретения
Рассмотрим осуществление предложенного способа в сети с коммутацией IP-пакетов. Это может быть корпоративная сеть, имеющая один основной сегмент - КС с установленным DHCP сервером и множеством сегментов сетей удаленных офисов - КС, подключенных через различных провайдеров сети Интернет по технологии VPLS, для создания сети с коммутацией пакетов на канальном уровне (с одним сегментом broadcast). В такой сети можно использовать простые сетевые устройства (принтеры, сканеры, IP-телефоны), устройства для конференцсвязи, использующие мультикаст-сообщения, и другие клиентские устройства.
В рассматриваемую сетевую конфигурацию входят:
КК, расположенные в КС,
ПМ, к которым подключается КС.
Количество КК и КС может быть значительным, например, несколько сотен КС, в каждой из которых несколько десятков КК.
В качестве ПМ используется высокопроизводительный ПАК HW1000Q4 на базе Intel Celeron G1820 с тактовой частотой 2,7 ГГц, объемом оперативной памяти 2 Гб, объемом жесткого диска 500 Мб, с установленной ОС Linux Debian 7 (ядро 3.10.108). ПАК HW1000Q4 содержит несколько сетевых интерфейсов (4 проводных Ethernet) [9. ViPNet Coordinator HW1000 v3 - статья по адресу: https://infotecs.ru/product/vipnet-coordinator-hw1000-versiya-3.html].
В состав каждого ПАК входит специализированное ПО - программный модуль средства обработки.
Для реализации способа программный модуль необходимо сформировать и установить в ПАК. Разработку модуля может выполнить специалист по программированию (программист), например, на языке программирования С, зная выполняемые ПО функции:
сравнения IP-адресов, содержащихся в кадрах запроса,
модификации кадра запроса путем изменения данных.
После установки программного модуля средства обработки во все ПМ можно непосредственно реализовать предложенный способ.
Для этого ПМ, к которым подключаются КС, запускаются в рабочем режиме. В нескольких КС запускаются КК. КК из одной КС пытается установить соединение с КК из другой КС:
посылают запрос от компьютера (КК1), находящегося в своей сети (КС1) на установление TCP-соединения с компьютером (КК2), находящегося в другой сети (КС2), причем запрос на канальном уровне представляет собой кадр протокола канального уровня и содержит
IP адрес КК2, находящегося в КС2;
значение максимального размера полезного блока данных для ТСР-пакета (MSS), который установлен КК1 при согласовании значений MTU своего интерфейса и внутреннего интерфейса ПМ1;
получают запрос от КК1 в ПМ1;
обрабатывают полученный кадр с запросом на установление ТСР-соединения в средстве обработки ПМ1, выполняя следующие действия:
проверяют выполнение следующих условий:
кадр содержит пакет протокола IP;
в составе пакета IP содержится заголовок протокола TCP;
в заголовке TCP установлен флаг SYN;
в заголовке TCP присутствует опция MSS;
если все условия выполнены, то вычисляют максимальный размер MSS для данного TCP-соединения, выполняя следующие действия:
вычисляют значение MSS для внутреннего интерфейса ПМ1, путем вычитания из установленного значения MTU общего размера заголовков IP и TCP;
вычисляют объем дополнительных заголовков инкапсуляции для связи ПМ1 с ПМ2 с учетом используемого протокола VPLS;
вычисляют максимальный размер MSS, вычитая из ранее вычисленного значения MSS объем дополнительных заголовков инкапсуляции;
если указанное в заголовке значение MSS больше вычисленного максимального значения MSS, то
записывают вычисленное значение MSS в кадр;
вычисляют новую контрольную сумму ТСР-пакета;
записывают новую контрольную сумму TCP-пакета в кадр;
передают кадр из средства в ПМ1;
передают полученный из средства обработки ПМ1 кадр с запросом на установление TCP-соединения из ПМ1 в ПМ2;
получают кадр с запросом от ПМ1 в ПМ2;
обрабатывают полученный кадр с запросом на установление ТСР-соединения в средстве обработки ПМ2, выполняя следующие действия:
проверяют выполнение следующих условий:
кадр содержит пакет протокола IP;
в составе пакета IP содержится заголовок протокола TCP;
в заголовке TCP установлен флаг SYN;
в заголовке TCP присутствует опция MSS;
если все условия выполнены, то вычисляют максимальный размер MSS для данного TCP-соединения, выполняя следующие действия:
вычисляют значение MSS для внешнего интерфейса ПМ2, путем вычитания из установленного значения MTU общего размера заголовков IP и TCP;
вычисляют объем дополнительных заголовков инкапсуляции для связи ПМ1 с ПМ2 с учетом используемого протокола VPLS;
вычисляют максимальный размер MSS, вычитая из ранее вычисленного значения MSS объем дополнительных заголовков инкапсуляции;
если указанное в заголовке значение MSS больше вычисленного максимального значения MSS, то
записывают вычисленное значение MSS в кадр;
вычисляют новую контрольную сумму ТСР-пакета;
записывают новую контрольную сумму TCP-пакета в кадр;
передают кадр из средства обработки в ПМ2;
передают полученный из средства обработки ПМ2 кадр с запросом на установление TCP-соединения через внутренний интерфейс ПМ2 в КК2;
получают кадр с запросом в КК2;
формируют в КК2 ответ для КК1;
завершают установку TCP-соединения между КК1 и КК2.
В результате, устанавливается TCP-соединение со значением максимального размера MSS, позволяющем осуществлять передачу пакетов без фрагментации.
Таким образом, минимизируются задержки при обработке пакетов, и уменьшается нагрузка на сервис VPLS, при этом полностью использует доступный канал передачи, а благодаря автоматическому расчету значения максимального размера MSS не требуется дополнительных настроек, что упрощает администрирование сети.
Необходимо отметить, что возможны и другие варианты реализации предложенного способа, отличающиеся от описанного выше и зависящие от личных предпочтений при программировании отдельных действий и функций.