Роль сетевого уровня на хостах и промежуточных маршрутизаторах
На рис. 4.1 изображена схема простой сети с двумя хостами, H1 и Н2, и несколькими маршрутизаторами на пути от хоста H1 до хоста Н2. Пусть хост H1 посылает информацию хосту Н2. Рассмотрим роль сетевого уровня на этих хостах и промежуточных маршрутизаторах. Сетевой уровень хоста HI принимает сегменты от транспортного уровня хоста H1, инкапсулирует каждый сегмент в дейтаграмму (единицу обмена сетевого уровня), после чего отправляет дейтаграммы в путь к их адресату; то есть он посылает дейтаграммы своему ближайшему маршрутизатору R1. На принимающем хосте Н2 сетевой уровень получает дейтаграммы от своего ближайшего маршрутизатора (в данном случае R2), извлекает сегменты транспортного уровня и доставляет их транспортному уровню хоста Н2. Основная задача маршрутизаторов заключается в «продвижении» дейтаграмм из входных линий связи в выходные линии. Обратите внимание, что на рис. 4.1 маршрутизаторы показаны с сокращенным стеком протоколов, то есть без уровней выше сетевого, потому что на маршрутизаторах не работают протоколы прикладного и транспортного уровней (исключая задачи контроля).
Таким образом, роль сетевого уровня обманчиво проста — перемещение пакетов от передающего хоста к принимающему. Для этого можно выделить три важные функции сетевого уровня.
□ Определение пути. Сетевой уровень должен определить маршрут, или путь, по которому следуют пакеты от отправителя к получателю. Алгоритмы, рассчитывающие эти маршруты, называются алгоритмами маршрутизации. Алгоритм маршрутизации определяет, например, путь, по которому пакеты движутся от хоста HI к хосту Н2. Большая часть этой главы посвящена алгоритмам маршрутизации. В разделе «Основы маршрутизации» мы изучим теорию алгоритмов маршрутизации, уделив особое внимание двум наиболее распространенным классам алгоритмов маршрутизации: маршрутизации с учетом состояния линии и дистанционно-векторной маршрутизации. Мы увидим, что сложность алгоритмов маршрутизации значительно возрастает с увеличением количества маршрутизаторов в сети. Это служит мотивом для использования иерархической маршрутизации, которую мы обсудим в разделе «Иерархическая маршрутизация».
□ Продвижение данных. Когда пакет прибывает на вход маршрутизатора, маршрутизатор должен переместить его на соответствующую выходную линию. Например, пакет, прибывающий с хоста H1 на маршрутизатор R2, должен быть передан следующему маршрутизатору на пути к хосту Н2. В разделе «Устройство маршрутизатора» мы обсудим устройство маршрутизатора и поговорим о коммутации (продвижении) пакета с входной линии в выходную.
□ Установка соединения. Как было показано при обсуждении протокола TCP, прежде чем начинать продвижение данных от отправителя к получателю, требовалось выполнить процедуру тройного рукопожатия. Это давало отправителю и получателю возможность настроить необходимые параметры состояния соединения (например, задать порядковый номер и начальный размер окна управления потоком). Аналогичным образом, некоторые архитектуры сетевых уровней (например, ATM) требуют, чтобы маршрутизаторы вдоль выбранного пути от отправителя до получателя обменялись рукопожатиями друг с другом, чтобы настроить параметры, прежде пакеты сетевого уровня с данными начнут свое движение. На сетевом уровне этот процесс называют установкой соединения (call setup). Сетевой уровень архитектуры Интернета не выполняет установки соединения.
Термины «маршрутизация» и «продвижение данных» многие авторы часто путают и используют как синонимы. Мы постараемся применять эту терминологию более точно. «Маршрутизацией» мы будем называть глобальный (охватывающий всю сеть) процесс определения всего пути, который проходит дейтаграмма от отправителя до получателя. «Продвижением данных» мы станем называть локальные действия конкретного маршрутизатора по перемещению дейтаграммы из интерфейса входной линии связи в интерфейс выходной линии. Используя аналогию с вождением автомобиля, маршрутизацию можно сравнить с процессом составления карты и прокладки маршрута от отправителя до получателя в виде последовательности перекрестков. Мы увидим, что подобно тому, как для прокладки маршрутов могут потребоваться несколько карт (например, городская карта для езды по городу, карта области для езды за пределами города и т. д.), в определении пути от отправителя до получателя могут участвовать несколько протоколов. Продолжая нашу аналогию с вождением автомобиля, продвижение данных соответствует процессу преодоления единственного перекрестка — автомобиль подъезжает к перекрестку, водитель определяет направление до следующего перекрестка на своем пути к конечной цели, а затем выбирает соответствующую дорогу к этому перекрестку.
Прежде чем углубиться в детали теории и реализации сетевого уровня, рассмотрим различные типы служб, предоставляемые сетевым уровнем.