Протокол IP создан для использования в связанных системах компьютерных коммуникационных сетей с коммутацией пакетов. Протокол IP обрабатывает передаваемые от источника к месту назначения блоки данных, называемые дейтаграммами, где источниками и местами назначения являются хосты, идентифицированные адресами фиксированной длины. Протокол IP предусматривает также фрагментацию и повторную сборку длинных дейтаграмм.
Функции IP ограничены доставкой пакетов битов (дейтаграмм Интернета) от источника к месту назначения через связанную систему сетей. В нем не существует механизмов для обеспечения надежности двухточечной передачи данных, управления потоком, упорядочивания или других служб, присутствующих обычно в протоколах взаимодействия хостов. Протокол IP может использовать службы поддерживающих его сетей для предоставления служб различных типов и качества.
Этот протокол вызывается протоколами взаимодействия хостов в среде Интернета. Он вызывает протоколы локальных сетей для переноса дейтаграмм Интернета к следующему шлюзу или хосту места назначения. Например, модуль ТСР будет вызывать модуль IP, чтобы получить сегмент ТСР (включая заголовок ТСР и данные пользователя) как часть с данными дейтаграммы IP. Модуль ТСР будет предоставлять адреса и другие параметры в заголовке IP модулю IP как аргументы вызова. Модуль IP будет затем создавать дейтаграмму IP и вызывать интерфейс локальной сети для передачи дейтаграммы.
Протокол IP реализует две базовые функции: адресацию и фрагментацию. Модули IP используют адреса, передаваемые в заголовке ГР, для передачи дейтаграмм IP в направлении их места назначения. Выбор пути доступа для передачи называется маршрутизацией. Модули IP используют поля заголовка IP в случае необходимости для фрагментации и повторной сборки дейтаграмм IP.
Модель работы состоит в том, что модуль IP располагается на каждом хосте, вовлеченном в коммуникацию Интернета, и на каждом шлюзе, который соединяет сети. Эти модули используют общие правила для интерпретации полей адреса и для фрагментации и сборки дейтаграмм IP. Кроме того, эти модули (особенно на шлюзах) имеют процедуры для принятия решений о маршрутизации и другие функции.
Протокол IP интерпретирует каждую дейтаграмму IP как независимую сущность, не связанную с другой дейтаграммой IP. Не существует никаких соединений или логических связей (виртуальных или каких-либо других).
Протокол IP использует четыре ключевых механизма при предоставлении своих служб: тип службы, время жизни, параметры и контрольная сумма заголовка. Тип службы используется для указания качества желательной службы. Тип службы является абстрактным или обобщенным множеством параметров, характеризующих варианты служб, предоставляемых в сетях, из которых состоит Интернет. Это указание типа службы должно использоваться шлюзами для выбора параметров реальной передачи для определенной сети, которая будет применяться для следующего перехода или для следующего шлюза при маршрутизации дейтаграммы IP. Время жизни является указанием верхней границы времени жизни дейтаграммы IP. Оно задается отправителем дейтаграммы и уменьшается в точках вдоль маршрута, где оно обрабатывается. Если время жизни достигает нуля до того, как дейтаграмма Интернета достигает своего места назначения, дейтаграмма IP разрушается. Время жизни можно считать пределом времени саморазрушения.
Параметры, предоставляемые для управляющих функций, необходимы или полезны в некоторых ситуациях, но для большинства обычных коммуникаций не нужны. Параметры включают обеспечение отметок времени, безопасности и специальной маршрутизации. Контрольная сумма заголовка предоставляет проверку того, что информация, используемая при обработке дейтаграмм IP, была передана правильно. Данные могут содержать ошибки. Если контрольная сумма заголовка неправильная, дейтаграмма IP тотчас отбрасывается сущностью, которая обнаружила ошибку. Протокол IP не предоставляет надежного средства коммуникации. Не существует подтверждений между конечными точками или точками перехода. Отсутствует контроль ошибок данных, только контрольная сумма заголовка. Не существует повтора передачи и управления потоком. Обнаруженные ошибки могут сообщаться через протокол IСМР, который реализован в модуле протокола IP.
Протокол IP, с одной стороны, общается с протоколами коммуникации хостов более высокого уровня, а с другой стороны, с протоколом локальной сети.
Модель работы при передаче дейтаграмм из одной прикладной программы в другую иллюстрирует следующий сценарий. Предположим, что эта передача будет включать один промежуточный шлюз. Передающая прикладная программа готовит свои данные, вызывает свой локальный модуль IР для отправки этих данных в виде дейтаграммы и передает адрес места назначения и другие параметры в качестве аргументов вызова. Модуль IР готовит заголовок дейтаграммы и присоединяет к нему данные. Модуль определяет адрес локальной сети для этого адреса IР; в данном случае это адрес шлюза. Он посылает эту дейтаграмму и адрес локальной сети в локальный сетевой интерфейс. Локальный сетевой интерфейс создает локальный сетевой заголовок и присоединяет к нему дейтаграмму, а затем посылает результат через локальную сеть. Дейтаграмма прибывает на хост шлюза в оболочке заголовка локальной сети, интерфейс локальной сети удаляет этот заголовок и передает дейтаграмму модулю IР. Модуль определяет из адреса IР, что дейтаграмма должна быть передана на другой хост во второй сети. Модуль определяет адрес локальной сети для хоста назначения. Он обращается к интерфейсу локальной сети, чтобы послать ей дейтаграмму. Интерфейс локальной сети создает заголовок локальной сети и присоединяет дейтаграмму, посылая результат хосту назначения. На хосте назначения дейтаграмма освобождается от заголовка локальной сети интерфейсом локальной сети и передается модулю IР.
Модуль IР определяет, что дейтаграмма предназначена для прикладной программы на этом хосте. Он передает данные прикладной программе в ответ на системный вызов, передавая адрес источника и другие параметры, как результат вызова.
Функция или назначение протокола IР состоит в переносе дейтаграмм в пределах объединенной сети, или сетевого комплекса. Это реализуется путем передачи дейтаграмм из одного модуля IР в другой, пока не будет достигнуто место назначения. Модули IР располагаются на хостах и шлюзах в системе Интернет. Дейтаграммы маршрутизируются из одного модуля IР в другой через отдельные сети на основе интерпретации адреса IР. Таким образом, одним из важных механизмов протокола IР является IР-адрес.
При маршрутизации сообщений из одного модуля IР в другой дейтаграммам может понадобиться пересекать сеть, максимальный размер пакета в которой меньше размера дейтаграммы. Чтобы преодолеть эту трудность, в протоколе IР предоставлен механизм фрагментации.
Существует различие между именами, адресами и маршрутами. Имя указывает, что мы ищем. Адрес указывает, где это находится. Маршрут указывает, как туда попасть. Протокол IР имеет дело прежде всего с адресами. Задача протоколов высокого уровня (т.е. протокола хост-хост или приложения) — выполнить отображение из имен в адреса. Модуль IР отображает IР-адреса в адреса локальной сети. Задача низкоуровневых процедур (т.е. локальной сети или шлюзов) — выполнить отображение из адресов локальной сети или маршрутов.
Адреса имеют фиксированную длину из четырех октетов (32 бита). Адрес начинается с номера сети, за которым следует локальный адрес (называемый "собственным" полем). Есть три формата классов адресов IР: в классе (а) старший бит равен нулю, следующие семь битов определяют сеть, а последние 24 бита являются локальным адресом; в классе (Ь) старшими двумя битами будут один-ноль, следующие 14 битов определяют сеть, а последние 16 битов являются локальным адресом; в классе (с) старшими тремя битами будут один-один-ноль, следующие 21 бита определяют сеть, а последние восемь битов являются локальным адресом.
При отображении адресов IР в адреса локальной сети должна быть проявлена осторожность; в ряде случаев единственный физический хост должен действовать как несколько различных хостов за счет использования нескольких различных адресов IР. Некоторые хосты будут также иметь несколько физических интерфейсов (мультихост). Должно быть предусмотрено существование хоста с несколькими физическими сетевыми интерфейсами, каждый из которых может иметь несколько логических адресов IР.
Фрагментация дейтаграммы IР необходима, когда она создается в локальной сети, которая допускает большой размер пакета, и, чтобы достичь места назначения, должна пересекать локальную сеть, ограничивающую пакеты до меньшего размера.
Дейтаграмма IР может быть помечена как "не фрагментировать". Любая помеченная таким образом дейтаграмма IР не будет фрагментироваться ни при каких обстоятельствах. Если дейтаграмма IР, помеченная "не фрагментировать", не может быть доставлена к своему месту назначения без фрагментации, она будет отбрасываться. Фрагментация, передача и сборка в локальной сети, которые не видны для модуля протокола IР, называются фрагментацией интрасети.
Фрагментация IР и процедура сборки должны иметь возможность разбить дейтаграмму на произвольное число фрагментов, которые можно в дальнейшем собрать снова. Получатель фрагментов использует поле идентификации для обеспечения того, что фрагменты различных дейтаграмм не смешиваются. Поле сдвига фрагмента и длина определяют часть исходной дейтаграммы, содержащейся в этом фрагменте. Флаг "дополнительные фрагменты" указывает (будучи сброшенным) последний фрагмент. Эти поля предоставляют достаточно информации для сборки дейтаграмм.
Поле идентификации используется для различения фрагментов одной дейтаграммы от фрагментов другой. Модуль исходного протокола дейтаграммы IР задает в поле идентификации значение, которое должно быть уникальным для этой пары источник-место назначения и протокола, пока дейтаграмма будет активной в системе Интернет. Модуль исходного протокола всей дейтаграммы задает флаг "дополнительные фрагменты" равным нулю и сдвиг фрагмента как ноль.
Чтобы фрагментировать длинную дейтаграмму IР, модуль протокола IР (например, в шлюзе) создает две новые дейтаграммы IР и копирует содержимое полей заголовка IР из длинной дейтаграммы в оба новых заголовка IР. Данные длинной дейтаграммы делятся на две части по границе восьми октетов (64 бита) (вторая часть, в отличие от первой, может не быть целым, кратным восьми октетам). Вызовите число восьмиоктетных блоков в первой части NFB (для числа блоков фрагментов). Первая часть данных размещается в первой новой дейтаграмме IР, и поле общей длины задается равным длине первой дейтаграммы. Флаг "дополнительные фрагменты" задается равным единице. Вторая часть данных помещается во второй новой дейтаграмме IР, и поле общей длины задается равным длине второй дейтаграммы. Флаг "дополнительные фрагменты" имеет то же самое значение, что и длинная дейтаграмма. Поле сдвига фрагмента второй новой дейтаграммы IР задается равным значению этого поля в длинной дейтаграмме плюс NFB.
Эта процедура может быть обобщена для разбиения на п частей. Чтобы собрать фрагменты дейтаграммы IР, модуль протокола IР (например, на хосте назначения) объединяет дейтаграммы IР, которые имеют одно и то же значение для четырех полей: идентификации, источника, места назначения и протокола. Сборка осуществляется помещением порции данных каждого фрагмента в относительную позицию, указанную сдвигом фрагмента в заголовке IР этого фрагмента. Сдвиг фрагмента равен нулю, а флаг "дополнительные фрагменты" последнего фрагмента будет сброшен в ноль.
Сетевые протоколы предоставляют так называемые службы канала данных и составляют нижние три уровня модели OSI. Эти протоколы обрабатывают информацию адресации и маршрутизации, контроль ошибок и запросы повторной пересылки. Сетевые протоколы определяют также правила для коммуникации в сетевом окружении, таком как Ethernet или Token Ring. Наиболее популярные сетевые протоколы перечислены ниже:
1. IP (Internet Protocol), протокол TCP/IP для маршрутизации и пересылки пакетов.
2. IPX (Internetwork Packet Exchange), протокол NetWare для пересылки пакетов и маршрутизации.
3. NWLink, реализация Microsoft протокола IPX/SPX.
4. NetBEUI, транспортный протокол, который предоставляет службы транспорта данных для сеансов NetBIOS и приложений.
5. DDP (Datagram Delivery Protocol), протокол транспорта данных AppleTalk.
Мы увидели, как эти протоколы укладываются в модель OSI, и получили представление о функциях каждого из них. Теперь следует рассмотреть, как все это отображается в совокупности, после чего можно исследовать различия в поведении этих протоколов, как используется каждый из них, а также различные уровни функциональности.
Если пакет IP с определенным размером максимального блока передачи (Maximum Transmission Unit, MTU) пересылается в сеть с размером MTU, который меньше, чем размер текущей дейтаграммы IP, дейтаграмма должна быть фрагментирована. Фрагментация не будет происходить, если размер дейтаграммы равен или меньше MTU сети, через которую передается пакет.
Фрагментация может происходить на посылающем хосте или на маршрутизаторе. Каждый фрагмент посылается со своим собственным заголовком IP с достаточной информацией для выполнения повторной сборки в конечном месте назначения. Инструкции по сборке содержатся в идентификации, флаге фрагментации и полях сдвига фрагмента заголовка IP.
На рис. можно видеть, что следующим является поле идентификации, занимающее два байта. Это идентифицирующее значение присваивается отправителем, чтобы помочь собрать фрагменты дейтаграммы. Оно используется в конечном месте назначения для рекомбинации всех фрагментов первоначальной дейтаграммы IP. Оно используется для группировки фрагментов. Поле идентификации выбирается посылающим узлом и помещается в исходную дейтаграмму IP вне зависимости от того, будет ли использоваться фрагментация.
Следующим полем является поле флагов, для которого выделено три бита. Первый бит зарезервирован и должен быть равен нулю. Следующие два бита сообщают о фрагментации дейтаграммы. Если этот бит равен О (флаг сброшен), дейтаграмма может быть фрагментирована, если требуется при передаче через маршрутизатор. Если этот бит равен 1, фрагментация запрещена. В этом случае маршрутизатор IP будет отбрасывать дейтаграмму и посылать источнику сообщение ICMP о том, что место назначения недоступно. Этот механизм используется при поиске маршрута MTU. Это делается с помощью PING, как показано на рис.
