Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 132
Текст из файла (страница 132)
Соседние сети даже не догадываются о том, что у них под боком пакеты страшным образом нарезаются, а потом снова склеиваются. В сетях АТМ, например, есть даже специальная аппаратура для обеспечения прозрачной фрагментации пакетов (разбивания на ячейки) и обратной сборки ячеек в пакеты. В мире АТМ фрагментацию называют сегментацией. Концепция та же самая, а отличия есть только в некоторых деталях. Сеть 1 Сеть 4 Пакет ар Е:Л Пйй-П С:Л- П~-П С::Л Шлюз 04 Шлюз 0з фрагментирует восстанавливает большой пакет пакет из фрагментов Ц)люз 03 Шлюз 04 снова опять фрагментирует восстанавливает Пакет ап Па ап аа Яйа — «.Я йп — «.
Яйп — ~-Я йп ра аа ПП Шлюз 0( фрагментирует большой пакет Фрагменты не собираются до тех пор, пока они не дохсдят до окончательного получателя (хоста) б Рис. 5.44. Прозрачная фрагментация (в); непрозрачная фрагментация (б) Прозрачная фрагментация проста, но, тем не менее, создает некоторые проблемы. Во-первых, выходной шлюз должен уметь определять момент получения последней части пакета, поэтому каждый фрагмент должен содержать либо поле счетчика, либо признак конца пакета. Во-вторых, все фрагменты должны выходить через один и тот же шлюз.
Таким образом, налагается запрет на использование фрагментами различных путей к окончательному получателю, и в результате может оказаться потерянной часть производительности. Наконец, процессы фрагментации и последующей сборки пакетов при прохождении каждой сети с малым размером пакетов приводят к дополнительным накладным расходам. Сетям АТМ требуется прозрачная фрагментация.
Другая стратегия фрагментации состоит в отказе от восстановления пакета из фРагментов на промежуточных маршрутизаторах. Как только пакет оказывается Разбитым на отдельные фрагменты, с каждым фрагментом обращаются как с отдельным пакетом. Все фрагменты проходят через выходной шлюз (или несколько), как показано на рис, 5.44, 6. Задача восстановления оригинального пакета возложена на получающий хост.
Так работает 1Р. С непрозрачной фрагментацией связаны свои проблемы. Например, она требует, чтобы каждый хост мог восстановить пакет из фрагментов. Кроме того, при фрагментации большого пакета возрастают суммарные накладные расходы, так 494 Глава 5, Сетевой уровень как каждый фрагмент должен иметь заголовок. В то время как в случае прозрачной фрагментации лишние заголовки при выходе из мелкопакетной сети исчезали, в данном методе накладные расходы сохраняются на протяжении всего пути.
Однако преимущество непрозрачной фрагментации состоит в возможности использовать для передачи фрагментов несколько различных маршрутов, что повышает производительность. Естественно, при использовании модели сцепленных виртуальных каналов это преимущество оказывается бесполезным, Фрагменты пакета должны нумероваться таким образом, чтобы можно было восстановить исходный поток данных. Один из способов нумерации фрагментов состоит в использовании дерева. Если пакет 0 должен быть расщеплен, фрагменты получают номера 0.0, 0.1, 0.2 и т. д. Если эти фрагменты в дальнейшем сами фрагментируются, получающиеся кусочки нумеруются так: 0.0.0, 0.0.1, 0.0.2, „,, 0.1.0, 0.1.1, 0.1.2 и т.
д. Если в заголовках зарезервировано достаточно места для случая наиболее глубокого разбиения и при этом отсутствуют дубликаты, то такая схема гарантирует правильную сборку пакета получателем независимо от порядка, в котором будут получены отдельные фрагменты. Однако если одна из сетей нечаянно потеряет или удалит один или несколько фрагментов, то понадобится повторная передача всего пакета с тяжелыми последствиями для системы нумерации. Представим, что передается пакет длиной 1024 байта. При первой передаче пакета он разбивается на четыре одинаковых фрагмента с номерами 0.0, 0.1, 0.2 и 0.3.
Фрагмент 0.1 теряется по дороге, а остальные успешно добираются до получателя. Отправитель не получает подтверждения на переданный пакет и посылает его снова. Но на этот раз срабатывает закон бутерброда (или закон Мерфи); пакет пересылается по другому маршруту и проходит через сеть с 512-байтовым ограничением на размер пакетов, поэтому пакет разбивается всего на два фрагмента. Получив фрагмент с номером 0.1, получатель может подумать, что это — как раз недостающая деталь, и в результате соберет пакет неверно.
Совершенно иной и гораздо более совершенный подход к решению данной проблемы состоит в определении размера элементарного фрагмента, достаточно малого, чтобы он мог пройти по любой сети. То есть пакет разбивается на элементарные фрагменты одинакового размера плюс довесок, который может быть только короче всех остальных. Для пущей эффективности межсетевой пакет может содержать несколько фрагментов. Межсетевой заголовок должен содержать номер исходного пакета и номер (первого) элементарного фрагмента, содержащегося в нем.
Как обычно, в заголовке должен содержаться признак конца исходного пакета. Такой подход требует включения в заголовок межсетевого пакета двух полей: порядкового номера исходного пакета и порядкового номера фрагмента. Есть вполне очевидный компромисс между размером элементарного фрагмента и числом бит номера фрагмента. Поскольку размер элементарного пакета выбирается таким образом, что он может пройти по любой сети, дальнейшая фрагментация межсетевого пакета не составляет проблемы. Последним пределом является элементарный фрагмент размером с бит или байт, при этом номер фрагмента, содержащийся в заголовке пакета, превращается в смещение до этого бита или байта (рис.
5.45). Сетевой уровень в Интернете 495 Номер первою элементарного фрагмента в атом пакете Ном лак Заголовок Залгловок Зеголовок 27 8 1 Заголовок Заголовок Заголовок Рис. 6.46. Фрагментация при элементарном размере 1 байт: исходный пакет, содержащий 10 байт данных (а); фрагменты после прохождения через сеть с максимальным размером 8 байт (б); фрагменты после прохождения через шлюз размером б (в) Некоторые межсетевые протоколы развивают этот метод дальше и рассматривают всю передачу по виртуальному каналу как один гигантский пакет, так что каждый фрагмент содержит абсолютный номер первого байта фрагмента. Сетевой уровень в Интернете Прежде чем начинать рассматривать особенности реализации сетевого уровня в интернет-технологиях, неплохо было бы вспомнить принципы, которые были основополагающими в прошлом, при его разработке, и которые обеспечили сегодняшний успех.
В наше время люди все чаще пренебрегают имн. Между тем эти принципы пронумерованы и включены в документ Кг С 1958, с которым полезно ознакомиться (а для разработчиков протоколов он должен быть просто обязательным для прочтения, с экзаменом в конце). Этот документ сильно перекликается с идеями, которые можно найти в книгах (С1аг)г, 1988; 8а1(хег и др., 1984). Далее мы приведем 10 основных принципов, начиная с самых главных. 1. Убедитесь в работоспособности. Нельзя считать разработку (или стандарт) законченной, пока не проведен ряд успешных соединений между прототипами. Очень часто разработчики сначала пишут тысячестраничное описание стандарта, утверждают его, а потом обнаруживается, что он еще очень сырой или вообще неработоспособен.
Тогда пишется версия 1.1 стандарта. Так бывает, но так быть не должно. 496 Глава 5. Сетевой уровень Упрощайте. Если есть сомнения, всегда самый простой выбор является самым лучшим. Уильям Оккам (ЪЧ1111ащ Оссащ) декларировал этот принцип еще в Х(у' веке («бритва Оккама»). Его можно выразить следующим образом: «Борись с излишествами». Если какое-то свойство не является абсолютно необходимым, забудьте про него, особенно если такого же эффекта можно добиться комбинированием уже имеющихся свойств.
Всегда делайте четкий выбор. Если есть несколько способов реализации одного и того же, необходимо выбрать один из них. Увеличение количества способов — это порочный путь. В стандартах часто можно встретить несколько опций, режимов или параметров. Почему так получается? Лишь потому, что при разработке было несколько авторитетных мнений на тему того, что является наилучшим. Разработчики должны избегать этого и сопротивляться по- добным тенденциям. Надо просто уметь говорить «Нет».
Используйте модульный принцип. Этот принцип напрямую приводит к идее стеков протоколов, каждый из которых работает на одном из независимых уровней. Таким образом, если обстоятельства складываются так, что необхо- димо изменить один из модулей или уровней, то это не приводит к необходн мости других частей системы. Предполагайте разнородность.
В любой большой сети могут сосуществовать различные типы оборудования, средства передачи данных и различные при- ложения. Сетевая технология должна быть достаточно гибкой, простой и обоб щенной, чтобы работать в таких условиях. Избегайте статичности свойств и параметров. Если есть какие-то обязательные параметры (например, максимальный размер пакета), то лучше заставить отправителя и получателя договариваться об их конкретных значениях, чем жестко закреплять нх. Проект должен быть хорошим, но он не может быть идеальным. Очень час- то разработчики создают хорошие проекты, но не могут предусмотреть какие- нибудь причудливые частные случаи.