Выполнение протоколов для этого путешествия показано на рис. 5.34, б. Отправитель получает данные от транспортного уровня и создает пакет с заголовком общего сетевого уровня — в данном случае IP. Этот заголовок содержит адрес конечного пункта назначения, который определяет, что пакет должен быть отправлен через первый маршрутизатор. Пакет вставляется в кадр 802.11 с адресом первого маршрутизатора, после чего он передается. На маршрутизаторе из его поля данных извлекается пакет. Далее маршрутизатором анализируется содержащийся в пакете IP-адрес. Этот адрес нужно отыскать в таблице маршрутизации. В соответствии с ним принимается решение об отправке пакета на второй маршрутизатор. Чтобы пакет прошел эту часть пути, нужно добавить виртуальный канал MPLS, ведущий ко второму маршрутизатору, а пакет должен быть упакован в кадр с заголовками MPLS. На противоположном конце заголовок MPLS удаляется, а на основании адреса определяется следующий транзитный участок сетевого уровня. Этот участок ведет к конечному адресу назначения. Так как пакет является слишком длинным для сети Ethernet, он разделяется на две части, каждая из которых помещается в поле данных кадра Ethernet и передается на адрес назначения. Там заголовки кадров считываются, и содержимое исходного пакета восстанавливается. Пакет достиг пункта назначения. Следует отметить, что между случаем коммутации (установки моста) и маршрутизации есть существенная разница. При применении маршрутизатора пакет извлекается из кадра, и для принятия решения используется адрес, содержащийся именно в пакете. Коммутатор (мост) пересылает весь пакет, обосновывая свое решение значением MAC-адреса. Коммутаторы не обязаны вникать в подробности устройства протокола сетевого уровня, с помощью которого производится коммутация. А маршрутизаторы — обязаны.
К сожалению, объединение сетей — не такая простая задача, как может показаться. Когда были внедрены мосты, предполагалось, что они будут соединять разные типы сетей или, по крайней мере, разные типы локальных сетей, преобразовывая кадры одной ЛВС в кадры другой. Однако на практике это не работает. Причина проста: невозможно справиться с отличиями в свойствах ЛВС, такими как максимальный размер пакета и наличие/отсутствие классов приоритетов. Поэтому сейчас мосты используются в основном для объединения сетей одного типа на канальном уровне; для объединения разных сетей на сетевом уровне используются маршрутизаторы.
Объединение сетей нашло свое применение в построении крупных сетей. Однако условием являлось наличие общего сетевого уровня. За многие годы существования компьютерных сетей появилось множество различных протоколов. Заставить всех согласиться применять только один формат практически невозможно, особенно учитывая тот факт, что каждая компания считает самым большим своим достижением изобретение, внедрение и раскручивание собственного формата. Помимо IP, который на данный момент является практически универсальным сетевым протоколом, существуют IPX, SNA и AppleTalk. Ни один из этих протоколов не используется повсеместно. Новые протоколы будут появляться всегда. Наиболее подходящий пример сейчас — протоколы IPv4 и IPv6. Притом что оба они являются версиями IP, они не совместимы (иначе не было бы необходимости в разработке IPv6).
Маршрутизатор, поддерживающий несколько протоколов, называется мультипротокольным маршрутизатором (multiprotocol router). Он должен либо преобразовывать протоколы, либо обеспечивать соединение на уровне протокола более высокого уровня. Ни один из двух вариантов не отвечает всем требованиям сети. Соединение на более высоком уровне, например с использованием TCP, предполагает, что TCP должен быть реализован во всех сетях (что далеко не всегда так). Более того, в таком случае сетью могут пользоваться только приложения, использующие TCP (к которым не относятся многие программы, работающие в реальном времени).
Альтернативный вариант — преобразование протоколов различных сетей. Однако если форматы пакетов не являются близкими родственниками с одинаковыми информационными полями, такое преобразование всегда будет неполным и часто обречено на ошибку. К примеру, длина IPv6-адресов составляет 128 бит. И как бы ни старался маршрутизатор, такой адрес ни за что не поместится в 32-битное поле адреса IPv4. Проблема использования IPv4 и IPv6 в одной сети оказалась серьезным препятствием к внедрению IPv6. (И честно говоря, по этой же причине потребителей так и не удалось убедить в том, что они должны использовать именно IPv6.) Но еще более серьезные проблемы возникают, если требуется выполнять преобразования между принципиально разными протоколами — например, между ориентированным на соединение протоколом и протоколом, не требующим соединения. Поэтому такие преобразования практически никогда не выполняются. Пожалуй, и IP выигрывает только за счет того, что служит чем-то вроде наименьшего общего делителя. Он требует немногого от сетей, однако предоставляет только наилучший уровень обслуживания из возможных.
5.5.3. Туннелирование
Объединение сетей в общем случае является исключительно сложной задачей. Однако есть частный случай, реализация которого вполне осуществима даже для разных сетевых протоколов. Это случай, при котором хост-источник и хост-приемник находятся в сетях одного типа, но между ними находится сеть другого типа. Например, представьте себе международный банк, у которого имеется одна сеть IPv6 в Париже и такая же сеть в Лондоне, а между ними находится IPv4, как показано на рис. 5.35.
Метод решения данной проблемы называется туннелированием (tunneling). Чтобы послать IP-пакет хосту в Лондоне, хост в Париже формирует пакет, содержащий лондонский IPv6-адрес и отправляет его на мультипротокольный маршрутизатор, соединяющий парижскую сеть IPv6 и сеть IPv4. Получив пакет IPv6, маршрутизатор помещает его в другой пакет с IPv4-адресом маршрутизатора, соединяющего сеть IPv4 и лондонскую сеть IPv6. Когда пакет попадает на этот адрес, лондонский многопротокольный маршрутизатор извлекает исходный IPv6-пакет и посылает его дальше на хост назначения.
Рис. 5.35. Туннелирование пакета из Парижа в Лондон
Путь через сеть IPv4 можно рассматривать как большой туннель, простирающийся от одного многопротокольного маршрутизатора до другого. IPv6-пакет, помещенный в красивую упаковку, просто перемещается от одного конца туннеля до другого. Ему не нужно беспокоиться о взаимодействии с сетью IPv4. Это же касается и хостов Парижа и Лондона. Переупаковкой пакета и переадресацией занимаются многопротокольные маршрутизаторы. Для этого им нужно уметь разбираться в IPv6- и IPv4-пакетах. В результате весь путь от одного многопротокольного маршрутизатора до другого работает как один транзитный участок.
Чтобы сделать этот пример еще проще и понятнее, рассмотрим в качестве аналогии водителя автомобиля, направляющегося из Парижа в Лондон. По территории Франции автомобиль двигается по дороге сам. Но, достигнув Ла-Манша, он погружается в высокоскоростной поезд и транспортируется под проливом по туннелю (автомобилям не разрешается передвигаться по туннелю самим). Таким образом, автомобиль перевозится как груз (рис. 5.36). На другом конце туннеля автомобиль спускается с железнодорожной платформы на английское шоссе и снова продолжает путь своими силами. Точно такой же принцип применяется при туннелировании пакетов при прохождении через чужеродную сеть.
Рис. 5.36. Туннелирование автомобиля из Парижа в Лондон
Туннелирование широко используется для соединения изолированных хостов и сетей через сеть-посредник. В результате появляется новая сеть, которая как бы накладывается на старую. Такая сеть называется оверлейной сетью (overlay). Использование сетевого протокола с новым свойством (как в нашем примере, где сети IPv6 соединяются через IPv4) — достаточно распространенная причина. Недостатком туннелирования является то, что пакет не может быть доставлен ни на один из хостов, расположенных в сети-посреднике. Однако этот недостаток становится преимуществом в сетях VPN (Virtual Private Network — виртуальная частная сеть).