Это мой первый блог :)
Home
 

IP (Internet Protocol)

Internet Protocol version 4 — межсетевой протокол третьего уровня (стандарт RFC791). Этот протокол был создан американскими военными, и изначально был для военного применения.

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

Есть некая сеть, типа облака, то есть с беспорядочными связями, и не делается никаких предположений на счет устойчивости этих связей, в разные моменты времени могут существовать разные пути и все datagram могут достигать своих целей разными путями, а могут и не достигать вовсе, надежной доставки нет. Нет никакого flow-контроля. Не занимаемся упорядочиванием пакетов по порядку и не поддерживаем никаких логических соединений. Задача источника: вывалить пакеты в сеть, а задача среды вывалить их на приемник в любом порядке, возможно даже не все.

Базовые функции: адресация и фрагментация.

Адресация. Вводится новое глобальное для всего протокола пространство адресов, которое не имеет ничего общего с адреса для доставки в сетях 2-ого уровня. На время забывается, как мы будет сопоставлять адреса нижнего уровня с верхним. Вся маршрутизация осуществляется опираясь на эти новые IP-адреса.

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

Основные механизмы:

Type of Service (TOS) — позволяет маршрутизатору и промежуточному хосту догадаться о том, как эти пакеты должны быть обработаны

Time To Live (TTL) — это механизм, который позволяет ограничить время жизни пакета, чтобы пакеты не мотались вечно по кругу.

Заголовочная checksum для того, чтобы отловить пакеты, которые были испорчены в виду тех или иных причин.

Конечные и промежуточные точки называются хостами. Средняя сущность, называемая маршрутизатором, может не содержать протоколов верхнего уровня и заниматься только IP. Маршрутизатору даже не нужно знать TCP.

Для того, чтобы организовать IP-сеть — достаточно воткнуть в машину только сетевой интерфейс.

IP Header Structure

IP Header Structure

IP Header Structure пугает изобилием полей, но ничего страшного нет. Каждая строка — 32-битные слова (десятичная нумерация сверху). Нумерация начинается со старшего бита, который нумеруется нулем и последний бит — 31. Размер IP-пакета должен быть выравнен на границу 32 бита, это связано с тем, что IP разрабатывался для 32-разрядных машин. Таблица будет разворачивать при передачи сначала по строкам, потом по столбцам. Самые главные поля: адреса, checksum, Time to Live, Protocol. Checksum считает и по заголовку тоже, считая, что checksum при это равна нулю.

 IP Hdr Length (4 бита) — это длина заголовка в 32-битных словах, так как меньшей гранулярности не бывает.

Type of Service (8 бит). При отправки пакета отправитель может высказать пожелания по поводу того, как бы он хотел, чтобы эти пакеты обслуживались на промежуточных хостах. Маршрутизаторами эти поля никак не учитываются. Некоторые протоколы могут переопределить это поле.

Total Length (16 бит) — полная длина со всеми заголовками, измеряемая в октетах.

Identification (16 бит) — некий идентификатор, который позволяет собрать datagram, если она по пути была разбита маршрутизаторами. Он у всех кусков одинаков, если все эти куски принадлежат одной datagram. Все разбитые куски собираются обратно только на конечном пункте, так как они могли пойти разными путями.

Избыточная фрагментация на мелкие куски создает дополнительную нагрузку на сеть. Это очень сильно заметно при медленном интернете.  Есть поле, которое запрещает фрагментацию, и если этот пакет попадает на хост, которому нужно фрагментировать для дальнейшей отправки его и стоит флаг  «Don’t Fragment«, то хост обязан его сбросить. Если хост поддерживает протокол ICMP, то он обязан отправить обратно сообщение об ошибке.

Fragment Offset —  показывает на начало данных, в первом фрагменте Offset всегда = 0. При фрагментации всегда выставляется флаг «More Fragments«, кроме последнего фрагмента. При разбиении данных для фрагментации они всегда выравниваются на длину, кратную 64 битам или 8 октетам (единица Offset = 8 октетам), кроме последнего фрагмента.

Time to Live — обратный счетчик, который декрементируется на каждом промежуточном хосте. И когда он равен 0, он сбрасывается. Если хост поддерживает протокол ICMP, то он обязан отправить обратно сообщение об ошибке. Максимальное значение поля 255. Обычно присваивается значение, равное 50-70.

Сhecksum — действительно сумма, пересчитывает на каждом хосте, поскольку TTL меняется.

IP Options иногда используются, чаще всего используется timestampsSecurity and handling restrictions — никогда не используются.

При создании этого протокола мыслилось, что, возможно, источник будет иметь некую информацию о структуре этой сети, и поэтому он может потребовать, чтобы его datagram маршрутизировали определенным образом. В таком случае в опции Source Route можно указать список хостов, которые datagram обязана пройти. Ни одно нормальное приложение этот механизм не использует. При подобных опциях можно отследить маршрут одного пакета.

Читать далее о TCP/IP.

—————————————————————
Статья основа на лекциях Беляева Платона Евгеньевича по предмету «Компьютерные сети» на кафедре АФТИ ФФ НГУ.

08.05.2012 This post was written by Categories: Компьютерные сети 1 comment

One Response to “IP (Internet Protocol)”


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Top