Протокол Интернета (Internet Protocol, IP) – один из множества коммуникационных протоколов, входящих в состав набора Интернет-протоколов (Internet Protocol Suite, IPS), и притом, пожалуй, самый важный из них. Эксперты обычно определяют IPS как комплект протоколов, превращающих данные приложений (например, электронные письма или веб-трафик) в цифровые пакеты для передачи по сетям, в том числе, по Интернету.
Протокол IP, в частности, отвечает за передачу цифровых пакетов от хоста источника на хост назначения по сетевому соединению. Самое последнее определение IP дается в Запросе на комментарий (RFC) 791:
«Возможности протокола Интернета намеренно ограничиваются только функциями, необходимыми для передачи пакета битов (интернет-датаграммы) от источника к пункту назначения по системе взаимосвязанных сетей. Для данного протокола не предусмотрены механизмы обеспечения гарантированной передачи данных, упорядочения и управления их движением, а также другие аналогичные службы, характерные для протоколов передачи данных между хостами. Выполнение этих и других задач для протокола Интернета обеспечивают службы поддерживающих его сетей».
Пакеты и датаграммы – в чем разница?
Рассуждая о протоколе Интернета, многие специалисты (и я в том числе) используют термины «пакет» и «датаграмма» как взаимозаменяемые, поскольку они очень близки по значению (а для некоторых так и вовсе идентичны). В Запросе на комментарий 1594 датаграмма/пакет определяется как «самостоятельная независимая единица данных, содержащая всю необходимую информацию для передачи от источника на компьютер назначения вне зависимости от предшествующего обмена данными между источником и компьютером назначения, а также от типа передающей сети».
Казалось бы, если датаграмма и пакет – это одно и то же, зачем вообще их различать? Проблема в том, что некоторые эксперты вкладывают в эти термины совершенно разные значения. Термин «пакет» они используют применительно к надежным протоколам передачи данных типа TCP/IP, а термин «датаграмма» – применительно к негарантированным протоколам передачи данных типа UDP. В случае с протоколом Интернета разницы между этими терминами нет никакой, но я бы предпочел использовать «датаграмму», ниже объясню почему.
Атрибуты IP
Процесс передачи данных по IP определяется рядом атрибутов, не зависящих от версии протокола – IPv4 или IPv6. Рассмотрим эти атрибуты поподробнее.
• Присвоение адресов хостам. Протокол IP определяет схему присвоения адресов всем хостам в сети и использует эти адреса для облегчения передачи датаграмм.
• Независимость от протоколов. По умолчанию IP может работать с любыми сетевыми протоколами за счет использования стека протоколов.
• Передача данных без установления соединения. Протокол IP не отвечает за налаживание взаимосвязей между отправляющим и принимающим хостами. Хост источника просто создает и отправляет датаграммы.
• Негарантированная передача данных. Протокол IP создает максимально благоприятные условия для получения отправленных датаграмм принимающим хостом, но никакой гарантии того, что они действительно будут получены, не дает.
• Отсутствие механизмов подтверждения приема. Принимающий хост никаким образом не подтверждает, что получил отправленные данные.
Кажется удивительным – как вообще IP-датаграммам удается попасть по назначению, если последние три атрибута создают весьма неблагоприятные для этого условия? Почему в протоколе Интернета были сделаны такие упущения? Причина проста: для достижения максимальной эффективности. Установление соединения, проверка на наличие ошибок и обеспечение гарантированной доставки поглощают дополнительные ресурсы процессора и пропускную способность сети, поэтому если какие-то атрибуты для передачи датаграмм необязательны, без них лучше обойтись. И к тому же, протокол IP создавали совсем не дураки: для пущего повышения эффективности они предусмотрели возможность использования стека протоколов.
Стек протоколов TCP/IP
Выше, если помните, я уже упоминал о стеке протоколов TCP/IP. Когда передаваемые данные (например, электронные письма) требуют гарантированной доставки, подтверждения приема или установления соединения, необходимая информация включается в них еще на стадии формирования датаграмм – или, что называется, «выше по стеку». Такое решение, оказывается, очень разумно, поскольку позволяет экономить сетевые ресурсы.
Кстати, я совершенно не уверен, что TCP/IP вообще стоило включать в эту статью: в конце концов, ее тема – прежде всего, протокол Интернета. Но проблема в том, что TCP очень сложно отделить от IP, особенно если учесть, насколько велика доля данных TCP в датаграммах.
На сайте TCP/IP Guide прекрасно объясняется, что такое стек TCP/IP и как он работает. Процесс инкапсуляции (из-за которого я и включил сведения о стеке в свою статью) тоже происходит на уровне стека TCP/IP: следующий протокол стека инкапсулирует датаграмму, включая в нее все дополнительные данные, необходимые для ее успешной передачи по назначению. Процесс инкапсуляции описан в диаграмме ниже (предоставлена сайтом TCP/IP Guide):