Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УК и ПУСТ 18-33.docx
Скачиваний:
4
Добавлен:
08.09.2019
Размер:
231.28 Кб
Скачать

31 Межсетевой протокол ip

Как уже подчеркивалось ранее протокол IP вовсе не обязателен для TCP. Протокол TCP может использовать для доставки данных почти любой протокол сетевого уровня, если тот способен обеспечить услуги маршрутизации и поддерживает интерфейс между двумя уровнями. Тем не менее, информация маршрутизации для данных от TCP, которые должны транспортироваться через сети, в подавляющем большинстве приложений обеспечивается протоколом IP. И это притом, что сам протокол не исправляет ошибки, а только сообщает об ошибках в исходящие хост-компьютеры с помощью рассмотренного в предыдущем параграфе протокола ICMP, размещаемого на том же уровне 3 в хост-компьютере.

Структура IP-заголовка и его поля представлены на рис. 5. Поле «версия» (version, 4 бита) в заголовке IP предназначено для идентификации версии IP, использованной для создания заголовка. Если заголовок IP был создан в сети, использующей более новую версию IP, он может содержать информацию, которая не распознается более старой версией IP. В этом случае принимающая сеть, работающая со старой версией IP, уведомляется о необходимости пропустить нераспознаваемые поля.

Рис. 5. Заголовок IP

Поле «длина заголовка» (IHL — Internet Header Length, 4 бита) содержит длину заголовка IP-пакета в 32-разрядных словах. Значение этого поля не может быть меньше 5.

В поле «тип обслуживания» (TOS — Type of Service, 8 битов) указывается требуемое качество обслуживания данных. В других протоколах это поле часто называют качеством обслуживания (QoS). Данное поле включает четыре параметра, содержащих информацию о приоритете дейтаграммы, о возможности поступления последовательности таких дейтаграмм с регулярными интервалами, о критичности ошибок, о важности скорости доставки дейтаграммы и, наконец, об относительной важности скорости по сравнению с надежностью на случай конфликта между двумя этими критериями. Введены следующие обозначения: РРР — приоритет, D — атрибуты задержки, Т — атрибуты пропускной способности, R — атрибуты надежности. Трехбитовый код РРР указывает уровень приоритета блока данных, применяемый для управления перегрузкой (блоки данных с меньшим приоритетом могут быть отброшены, в то время как блокам данных с более высоким приоритетом разрешается прохождение) и для управления потоком. Поле задержки D указывает, какова допустимая задержка при передаче пакета. Данное поле может принимать два значения: нормальная задержка и малая задержка. Значение 1 соответствует малой задержке. Поле пропускной способности Т указывает, какова должна быть пропускная способность средств доставки данного блока данных. Например, если блок данных сгенерирован приложением реального времени (интерактивный режим), приложение может запросить ускоренную доставку блоков данных, что требует высокой пропускной способности средств доставки. Допустимые значения — нормальная или высокая пропускная способность. Поле надежности R используется аналогичным образом, указывая, требует ли этот блок данных высокой или обычной надежности обслуживания.

Поле «общая длина» (Total length, 16 битов), аналогичное полю длины TCP-заголовка, содержит измеряемую в байтах суммарную длину дейтаграммы, включая длину IP-заголовка и данных. Этот параметр позволяет узлам определять длину поля данных путем вычитания из его значения длины заголовка. Максимально допустимая длина всей дейтаграммы целиком, считая байты, входящие в заголовок дейтаграммы, и данные, составляет 65535 байтов, т. е. длина дейтаграммы может достигать 216— 1 байтов. Однако длинные дейтаграммы не используются при работе IP-протокола. Все хост-компьютеры и шлюзы сети, как правило, работают с длинами до 576 байтов. Число 576 выбрано из тех соображений, что этой длины пакета вполне достаточно для того, чтобы передать заголовок (64 байта) и блок данных (длиной 512 байтов).

Поле «идентификатор» (Identification, 16 битов) представляет собой уникальный номер, характеризующий конкретную дейтаграмму, и используется для связи фрагментов блока данных. Значение этого поля устанавливается отправителем и служит идентификатором дейтаграммы, например, в случае ее фрагментации.

Наличие поля флагов (flags) и поля смещения (fragmentation) связано с тем, что, учитывая ограничения на длину кадра в конкретной реализации сети, протокол IP разбивает большой исходный блок данных на фрагменты и упаковывает их в пакеты. Для определения принадлежности пакетов — фрагментов одному блоку данных и обеспечения его правильной сборки, в поле флагов устанавливается специальный признак, а величины смещения помещаются в поле смещения. Поле флага содержит 3 бита: первый бит этого поля всегда имеет значение ноль, второй бит определяет, разрешена или нет фрагментация для блока данных. Величина поля смещения задает смещение в 64-битовых блоках. Первый фрагмент имеет нулевое смещение.

Поле «период жизни» (TTL - Time to live) содержит сведения о том, в течение какого времени дейтаграмме разрешено находиться в сети, и фактически представляет собой счетчик транзитов. Указанное в поле значение уменьшается на 1 на каждом этапе обработки дейтаграммы в процессе ее следования по сети, а при достижении нуля дейтаграмма уничтожается в целях экономии ресурсов сети. Таким же образом предотвращаются зацикленные маршруты в сети, когда группа маршрутизаторов может «гонять» блок данных по кругу из-за какой-то неисправности сети. Когда маршрутизатор обнаруживает, что значение параметра «период жизни» достигло нуля, он немедленно удаляет блок данных и передает сообщение источнику об ошибке с помощью рассмотренного выше протокола ICMP.

Поле «протокол» (protocol, 8 битов) содержит указание, какой протокол следует за IP.

Поле контрольной суммы (Header checksum, 16 битов) служит для проверки правильности информации заголовка дейтаграммы. Контрольная сумма заголовка проверяет только данные заголовка, которые включают в себя адреса IP источника и пункта назначения. При проверке заголовка IP контрольная сумма анализирует правильность номера версии IP и подтверждает отличие поля «времени жизни» от нуля. Она также позволяет проверить отсутствие искажения заголовка IP и допустимость длины сообщения.

Поле опций содержит информацию о различных задачах, например, спецификации маршрутизации, и обычно используется сетевым управлением или для целей отладки. Данные, которые обеспечивают опции IP, варьируются и зависят от конкретного приложения, использующего их. Когда требуется услуга «записать маршрут», поле опции указывает и это.

Как это имело место в других протоколах, заголовок IP содержит поле выравнивания (padding), состоящее из нулей и выравнивающее 32-битовую границу

Поля адресов IP-источника и IP-назначения используются маршрутизаторами и шлюзами в рамках сети для маршрутизации блока данных. Эти адреса остаются неизменными все время жизни блока данных и не преобразуются промежуточными сетями. Несмотря на то, что одной из основных функций межсетевого протокола IP является межсетевая и глобальная адресация, из соображений разумного объема книги целесообразно ограничиться только несколькими замечаниями о форматах адресов IP.

32 IP-маршрутизация

IP-Маршрутизация - процесс выбора пути для передачи пакета из одной сети в другую. Под путем (маршрутом) понимается последовательность маршрутизаторов, через которые проходит пакет по пути к узлу-назначению. IP-маршрутизатор - это специальное устройство, предназначенное для передачи пакетовиз одной сети в другую и обеспечивающее определение пути прохождения пакетов в составной сети. Маршрутизатор должен иметь несколько IP-адресов с номерами сетей, соответствующими номерам объединяемых сетей. Маршрутизация осуществляется на узле-отправителе в момент отправки IP-пакета, а затем на IP-маршрутизаторах.  Принцип маршрутизации на узле отправителе выглядит достаточно просто. Когда требуется отправить пакет узлу с определенным IP-адресом, то узел-отправитель выделяет с помощью маски подсети из собственного IP-адреса и IP-адреса получателя номера сетей. Далее номера сетей сравниваются и если они совпадают, то пакет направляется непосредственно получателю, в противном случае - маршрутизатору, чей адрес указан в настройках протокола IP. Выбор пути на маршрутизаторе осуществляется на основе информации, представленной в таблице маршрутизации. Таблица маршрутизации - это специальная таблица, сопоставляющая IP-адресам сетей адреса следующих маршрутизаторов, на которые следует отправлять пакеты с целью их доставки в эти сети. Обязательной записью в таблице маршрутизации является так называемый маршрут по умолчанию, содержащий информацию о том, как направлять пакеты в сети, адреса которых отсутствуют в таблице, поэтому нет необходимости описывать в таблице маршруты для всех сетей. Таблицы маршрутизации могут строиться "вручную" администратором или динамически, на основе обмена информацией, который осуществляют маршрутизаторы с помощью специальных протоколов - протоколов динамической маршрутизации.

Если IP-дейтаграмма подверглась фрагментации, она не будет собрана, пока не достигнет конечного пункта назначения. (Этим сборка фрагментов в IP-сетях прин­ципиально отличается от принятой в некоторых других сетях поэтапной схемы, ког­да фрагменты собираются на ближайшем пункте пересылки.) Фрагментация, по идее, не касается транспортного уровня и происходит прозрачным для него образом, так что если не пытаться предотвратить сниже?гае производительности, сопровожда­ющее фрагментацию, то ее можно и вовсе не учитывать на уровне TCP и UDP. Фраг­мент дейтаграммы, в свою очередь, может быть фрагментирован при перемещении по трассе. Информация, содержащаяся в IP-заголовке, позволяет осуществлять мно­гократную фрагментацию.

Вспомним формат IP-заголовка и посмотрим, какие его поля отвечают за фрагментацию. Поле идентификатор (identificationсодержит уникальный номер для каждой посылаемой IP-дейтаграммы. Это значение копируется в каждый фраг­мент, идентифицируя его принадлежность данной дейтаграмме (теперь становится понятным назначение этого поля — оно используется при сборке фрагментов). Один бит в поле флаги (flagsиспользуется как индикатор продолжение следует (тоге fragmentsи говорит о наличии следующих фрагментов. Этот флаг устанавливается в каждом фрагменте, на которые разбивается дейтаграмма, за исключением послед­него. Поле смещение фрагмента (fragment offset)содержит величину смещения фрагмента от начала исходной дейтаграммы. Кроме того, после фрагментации дей­таграммы поле общая длина (total lengthв заголовке каждого фрагмента будет содер­жать размер данного фрагмента.

Другой бит поля флаги называется запрет фрагментации (don't fragmentDF). Если установлен флаг DF, модуль IP не станет фрагментировать дейтаграмму. Вмес­то этого дейтаграмма отбрасывается и по протоколу ICMP генерируется сообщение об ошибкенеобходима фрагментация, но установлен флаг запрета фрагментации, которое посылается отправителю пакета. (В следующем параграфе мы рас­смотрим случай генерации такого сообщения.)

Если IP-дейтаграмма была фрагментирована, то каждый фрагмент становится отдельным пакетом со своим собственным IP-заголовком. Такие пакеты маршрути­зируются независимо, и, как следствие, фрагменты дейтаграммы могут приходить в точку назначения с нарушением их очередности. Однако в IP-заголовках фрагмен­тов содержится вся необходимая информации для их правильной сборки в конечном пункте назначения.

Несмотря на то что IP-фрагментация выполняется "незаметно" для транспортно­го уровня, она может привести к нежелательным последствиям, которые сказывают­ся на уровнях выше IP. Дело в том, что из-за потери одного фрагмента потребуется передать повторно всю дейтаграмму, а поскольку в самом протоколе IP не предус­мотрены таймаут и повторная передача, то эти функции должны быть возложены на более высокие уровни. ПротоколTCP осуществляет повторную передачу по таймауту, a UDP — нет. (Некоторые приложения, использующие UDP, сами реализуют ме­ханизм таймаута и ретрансмиссии.)

Если окажется, что потерян некоторый фрагмент сегмента TCP, то по таймауту будет повторена передача всего сегмента TCP, который содержался в фрагментированной IP-дейтаграмме. Повторная передача отдельного фрагмента IP-дейта­граммы невозможна в принципе. Действительно, если фрагментацию произвел не хост источника дейтаграммы, а один из промежуточных маршрутизаторов, то ис­точник не может знать, каким именно образом было выполнено разбиение на фраг­менты. Уже по одной этой причине желательно принимать меры для предотвра­щения фрагментации (в статье [Kent and Mogul, 1987] приводятся и другие аргументы).

IP-адресация

Каждый узел TCP/IP идентифицируется логическим IP-адресом. Эти адреса уникальны для каждого из узлов, общающихся по протоколу TCP/IP. Каждый 32-битный IP-адрес идентифицирует местонахождение узла в сети точно так же, как обычный адрес обозначает дом на улице города.

Аналогично обычному адресу, состоящему из двух основных частей (названия улицы и номера дома), IP-адрес также имеет две части — идентификатор сети и идентификатор узла.

  • Идентификатор сети, также называемый адресом сети, обозначает один сетевой сегмент в более крупной объединенной сети (сети сетей), использующей протокол TCP/IP. IP-адреса всех систем, подключенных к одной сети, имеют один и тот же идентификатор сети. Этот идентификатор также используется для уникального обозначения каждой сети в более крупной объединенной сети.

  • Идентификатор узла, также называемый адресом узла, определяет узел TCP/IP (рабочую станцию, сервер, маршрутизатор или другое TCP/IP-устройство) в пределах каждой сети. Идентификатор узла уникальным образом обозначает систему в том сегменте сети, к которой она подключена.

Вот пример 32-битного IP-адреса:

10000011 01101011 00010000 11001000

Для облегчения восприятия человеком IP-адреса записываются в точечно-десятичной нотации. 32-битный IP-адрес делится на четыре 8-битных октета. Октеты представляются в десятичной системе счисления (системе с основанием 10) и разделяются точками. Таким образом, вышеприведенный IP-адрес в точечно-десятичной нотации выглядит так: 131.107.16.200.

Дополнительные сведения о точечно-десятичной нотации и о преобразовании чисел из двоичной системы счисления в десятичную см. в разделе 

На следующем рисунке показан пример IP-адреса (131.107.16.200), разделенного на идентификатор сети и идентификатор узла. Часть, соответствующая идентификатору сети (131.107), в данном случае определяется первыми двумя октетами IP-адреса. Часть, задающая идентификатор узла (16.200), обозначается последними двумя октетами IP-адреса.

Примечания

  • Поскольку IP-адреса служат для идентификации устройств в сети, каждому устройству в сети должен быть назначен уникальный IP-адрес.

  • Многие компьютеры имеют только одну сетевую плату, поэтому им требуется лишь один IP-адрес. Если же в компьютере установлено несколько сетевых плат, то каждой из них должен быть назначен свой IP-адрес.