Назначение протокола IP, принципы пакетной коммутации, роли участников сети (отправитель, получатель, маршрутизатор) и структура IPv4-адреса.
Какое поведение является штатным для протокола IP?
Из каких двух частей состоит IPv4-адрес?
Какую функцию выполняет маршрутизатор при обработке IP-пакета?
Что произойдёт, если два узла в одной канальной среде имеют разный Network ID?
Может ли на одном сетевом интерфейсе в Cisco IOS быть несколько IP-адресов?
Оба урока объясняют назначение протокола IP, принципы пакетной коммутации и структуру адреса — ipv4 даёт чистую теорию, ICND1 связывает с экосистемой Cisco
История IP от IPv4 до IPv6 — контекст эволюции протокола
ipv4/ipv4-basics даёт глубокое теоретическое понимание IP-протокола, что служит хорошим фундаментом перед практическим курсом Cisco ICND1
Мы начинаем серию вебинаров, посвященных протоколу IP — протоколу межсетевого взаимодействия. Разбирать будем на достаточно базовом уровне: рассмотрим, как все устроено, углубимся в важные детали работы протокола, но не будем углубляться в неважные. Постараемся держать баланс.
IP — это аббревиатура, которая расшифровывается как Internet Protocol. Хотя сегодня слово "интернет" плотно ассоциируется с сетью Интернет, на самом деле протокол создавался не для этого. "Интернет" здесь следует читать буквально — это протокол межсетевого взаимодействия. Он позволяет соединять между собой несколько сетей таким образом, чтобы они все образовывали единую среду передачи данных. Несмотря на то, что каналы передачи данных ограничены по расстоянию, если вы возьмете несколько сетей и соедините их между собой с помощью промежуточных узлов, вы сможете передавать данные между этими сетями.
Изначально все это придумывалось как модель доставки данных, противоположная по сути методу коммутации каналов. Сама идея пакетного взаимодействия развивалась как противопоставление коммутации каналов.
Коммутация каналов — это обычная телефонная связь. В 60-70-х годах связь была возможна только таким способом: вы поднимали трубку, набирали номер, телефонный аппарат посылал на телефонную станцию сообщение "хочу позвонить по такому-то номеру". Станция коммутировала ваш телефонный провод с проводом до другой станции, и у вас получалась прямая электрическая цепь.
Протокол IP позволил изменить эту модель — передавать данные пакетным образом. Пакетная доставка позволила передавать данные кусочками: вы передали кусочек на маршрутизатор, тот перекинул его дальше. Если какой-то кусочек потеряется — не страшно, можно перезапросить. Если пакет пойдет по другой трассе — это штатное явление.
Все это разрабатывалось военными для обеспечения надежной передачи данных в условиях подготовки к ядерной войне. Нужно было решить задачу: как надежно передавать данные между далеко разнесенными узлами.
Коммутация каналов — штука ненадежная: прокоммутировали канал, в него попала ядерная бомба — канал разрушен. В случае пакетной передачи данных промежуточные узлы можно соединять между собой многими разными каналами:
Военных это очень привлекало, поэтому они инвестировали значительные средства в протокол IP.
Сам принцип работы протокола говорит о том, что пакеты каким-то образом доставляются от отправителя до получателя. Пакеты несут полезную информацию и могут идти по сети совершенно разными трассами, независимо друг от друга. Это нормальное, штатное явление.
IP не поддерживает гарантию доставки. Все пакеты, которые отправляются, могут потеряться. IP предназначен для того, чтобы попытаться доставить данные, но не гарантирует этого.
Основные особенности:
Все эти "недостатки" — на самом деле плюсы. Именно благодаря им протокол IP исключительно живуч: он передает данные даже при ненадежной, нестабильной связи. Он не тратит время на восстановление данных и уведомление отправителя — просто работает как может.
Если вам нужна гарантия доставки, неизменность данных и соблюдение порядка — используйте протокол транспортного уровня (например, TCP).
Протокол IP родился как следствие появления модели DoD (Department of Defense), она же модель TCP/IP. Придумали его Винт Серф и Роберт Кан (он же Боб Кан).
Основные вехи:
| Год | Событие |
|---|---|
| 1974 | Работа "Протокол для пакетного межсетевого взаимодействия" (RFC 675) |
| 1977 | Появляется протокол TCP с разделением на транспортный уровень и межсетевое взаимодействие |
| 1978 | Выходит следующая версия спецификации TCP, черновик отдельного протокола межсетевого взаимодействия. Появляется версионность в поле заголовка |
| 1978 | IP версии 2 (Internet Work Protocol) — уже отдельный протокол |
| 1978 | IP версии 3 — рекомендация для внедрения |
| 1978 | IP версии 4 — привычный нам протокол IPv4 |
| 1980 | RFC 760 — стандартный протокол IPv4 |
| 1981 | RFC 791 — появляется классовая адресация |
| 1990 | Начинается работа над следующей версией IP |
| 1998 | Выходит IPv6 (RFC) |
Обратите внимание на путаницу в версиях: самая первая версия протокола IP была частью TCP версии 3. Она выросла в отдельный протокол IP версии 2, затем версии 3, и наконец версии 4. Поэтому во всех пакетах IPv4 в поле версии заголовка стоит четверка.
Практически сразу стали понятны проблемы IPv4:
С 1990 года началась работа над следующей версией. IPv5 была промежуточной (фактически multicast для IPv4). В 1998 году вышел IPv6, который решает проблемы IPv4 путем глобального увеличения адресного пространства и устранения неэффективностей.
IPv6 — это все тот же протокол межсетевого взаимодействия с теми же принципами работы, но с другим форматом заголовка и другими штатными особенностями. Никакого другого способа решить проблемы IPv4, кроме перехода на IPv6, не существует.
В IPv4 устройства делятся на два типа:
Поведение этих двух классов устройств описывается отдельными RFC. Сам протокол IP (RFC 791 и предшественник RFC 760) описывает лишь рамочное устройство IP. А дальше: как устроен отправитель, как устроен получатель, как работает IP по конкретному типу канала — все это отдельные документы.
Когда узел-отправитель хочет отправить данные, он выполняет следующие шаги:
Узел-получатель:
Маршрутизатор — промежуточный узел, который берет данные из одной канальной среды и передает в другую:
IP-пакеты можно передавать по разным канальным средам:
0x0800Главное требование: должна быть спецификация, как взять IP-пакет и передать его по конкретному каналу.
Существует шуточный первоапрельский RFC 1149, описывающий передачу IP-пакетов с помощью почтовых голубей. Несмотря на юмористический характер, этот пример отлично иллюстрирует принцип работы IP: вы берете пакет, распечатываете на бумажке (не более 2 граммов), оборачиваете вокруг лапки голубя и отправляете.
С голубем может случиться что угодно: его может съесть лиса, он может улететь не туда. IP устроен именно так — отправляет пакет, а дальше: дойдет — хорошо, не дойдет — IP это не интересует.
Энтузиасты реализовали этот RFC на практике: запустили команду ping, распечатали 5 запросов echo request на бумажках, отправили голубей. Результат: время ответа около 3200 секунд, 80% пакетов доставлено успешно.
IPv4-адрес — это просто 32-битное число. Всего существует чуть более 4 миллиардов адресов.
Адрес назначается на канальный интерфейс, поэтому у одного узла может быть несколько интерфейсов и, как следствие, несколько адресов. Более того, на одном интерфейсе тоже может быть несколько IP-адресов.
Требование: все IP-адреса должны быть уникальны в пределах всей сети (бывают исключения, но общее правило именно такое).
Адрес состоит из двух частей:
Правила:
Пример: адреса 192.168.1.1 и 192.168.2.1 вполне могут сосуществовать — они из разных сетей.
Граница между Network ID и Host ID по внешнему виду адреса не определяется — она задается отдельно.
Стандартного, предписанного формата записи IPv4-адреса не существует. Это просто 32-битное число, и вы можете использовать любой формат, который однозначно восстанавливает это число. Например, число 2130706433 — это адрес 127.0.0.1. Можете попробовать: наберите ping 2130706433 — и он будет пинговать 127.0.0.1.
Общепринятый формат — четыре октета, разделенных точками (dotted decimal notation). Каждый октет — 8-битное число (от 0 до 255), записанное в десятичном виде. Этот формат используется во всех RFC, хотя формально нет документа, предписывающего именно его.
В стеке BSD реализованы дополнительные экзотические форматы (только для классовых адресов):
октет.24-битное_число — например, 127.1 вместо 127.0.0.1октет.октет.16-битное_число — например, 172.16.1 вместо 172.16.0.1Использовать эти форматы на практике не стоит — они неудобны и требуют знания двоичной математики.
На каждом устройстве, как правило, будет много адресов. Важные правила:
При наличии нескольких адресов на интерфейсе:
Использование нескольких IP-адресов на одном интерфейсе — как правило, следствие плохого дизайна. Но иногда это полезно в переходных сценариях, например, при смене адресации: вешаете на маршрутизатор старый и новый адрес одновременно, чтобы и старые, и новые клиенты работали.
В следующей части мы подробнее разберем, как устроен IP-пакет и его заголовок.