IP
Last updated
Last updated
Internet Protocol или IP— маршрутизируемый протокол сетевого уровня модели стека протоколов TCP/IP. Благодаря протоколу IP существует нынешняя сеть Интернет, поскольку именно этот протокол стал связующей нитью между разрозненными компьютерными сетями во всем мире. На данный момент нам нужно выделить два ключевых понятия в протоколе IP: минимально единицей измерения данных здесь является IP-пакет (о единицах измерения в компьютерных сетях), который чаще всего инкапсулируется в Ethernet кадр, а также каждый узел на сетевом уровне в модели TCP/IP должен иметь IP-адрес.
Мы уже не раз говорили, что протокол IP относится к сетевому уровню модели TCP/IP, это также справедливо и для эталонной модели OSI 7. Также мы уже не раз применяли этот протокол на практике, а значит косвенно касались вопроса о значении протокола IP в компьютерных сетях или сетях передачи данных. Если говорить коротко, то протокол IP нужен для логической адресации устройств в компьютерной сети или сети передачи данных.
Тут стоит сразу заметить, что IP-адреса делятся на две большие группы: публичные IP-адреса, которые должны быть уникальными во всем мире и частные IP-адреса, которые могут использоваться в любых частных/локальных сетях. Так, например, каждый в мире знает, что IP-адрес 8.8.8.8 принадлежит компании Google и это адрес их публичного DNS-сервера.
А, например, в моей домашней сети есть четыре устройства, которые подключатся к роутеру, то есть моя домашняя сеть состоит из пяти железяк, для этих пяти железяк на роутере выделена сеть 192.168.1.0/24, это означает, что чисто теоретически в этой сети может работать сразу 254 устройства включая роутер, так как IP-адрес 192.168.1.0 – это номер сети, а адрес 192.168.1.255 – это адрес широковещательной рассылки (эти адреса нельзя задавать узлам сети), пропинговав который можно опросить все узлы данной сети. Но главное здесь то, что у каждого устройства должен быть уникальный IP-адрес из выделенной подсети, например, у роутера будет адрес 192.168.1.1, у настольного ПК будет адрес 192.168.1.2, а у ноутбука 192.168.1.3, а если я захочу подключиться к роутеру мобильным телефоном, то на нем нужно будет настроить любой адрес от 192.168.1.4 до 192.168.1.254, чтобы этот телефон смог взаимодействовать с другими устройствами моей локальной сети.
Какие выводы мы делаем? Правильно, первая функция протокола IP заключается в том, чтобы дать уникальные имена узлам в компьютерной сети. Чтобы было более наглядно обратите внимание на Рисунок 4.1.1, на нем показана схема, описанная словами выше.
Рисунок 4.1.1 Пример использования IP-адресов в локальной сети
Стоит обратить внимание на то, что сейчас для нас неважно как узлы получают IP-адреса: назначаются они руками, или их выдает DHCP-сервер, также мы сейчас даже не затрагиваем вопрос: как частные IP-адреса превращаются в публичные при выходе в сеть Интернет, забегая вперед отмечу, что делается это при помощи протокола NAT.
Вторая функция протокола IP заключает в том, чтобы предоставить услугу вышестоящему уровню, то есть транспортному уровню. Тут нужно заметить, что модель TCP/IP не предполагает взаимодействие с установлением соединения на сетевом уровне, вид взаимодействия определяется транспортным уровнем (при помощи выбора одного из двух протоколов: TCP или UDP), следовательно сам протокол IP работает без установления соединения и как бы это странно не прозвучала, но услугой протокола IP для транспортного уровня является передача данных между сетями или же транспортировка. То есть протоколы TCP и UDP рассматривают IP как рабочую лошадку, которая таскает пакеты из точки А в точку Б, минуя множество различных подсетей, если мы говорим о сети Интернет.
Как мы знаем, протокол IP связан с канальным уровнем при помощи протокола ARP, который можно отнести к метафорическому уровню 2.5, так как он работает между канальным и сетевым уровнем. Сейчас мы этот факт просто для себя отмечаем и запоминаем, в дальнейшем пригодится. Также на сетевом уровне работают протоколы динамической маршрутизации, такие как OSPF, IS-IS, RIP, EIGRP, в английской литературе эти протоколы объединены общим словом Routing, то есть те, кто маршрутизирует, сам же IP именуется Routed, то есть тот, кого маршрутизируют. Internet Control Message Protocol или просто ICMP также относится к сетевому уровню. Просто чтобы напомнить приведу здесь рисунок, на котором показана модель TCP/IP.
Рисунок 4.1.2 Модель стека протоколов TCP/IP
Собственно, на этом можно завершить разговор о назначении протокола IP, у которого мы выделили две важные функции: первая заключается в логическом именовании узлов сети передачи данных на сетевом уровня, вторая заключается в том, чтобы доставить пакет из точки А в точку Б через множество промежуточных сетей. При этом IP-пакеты при передаче данных могут быть изменены (иногда это не стороннее вмешательство с целью взлома, а необходимость), потеряны, повреждены, пакеты могут прийти получателю не в той последовательности, в которой они были отправлены, обо всем этом протокол IP не заботится, его задача организовать маршрут между точкой А находящейся в одной сети и точкой Б, находящей в другой сети. Задачи, описанные выше, решают другие протоколы.
Протоколу IP не важно какими характеристиками обладает компьютерная сеть, какая топология у сети передачи данных, протоколу IP даже не важно поверх какого протокола канального уровня работать, протокол IP будет точно будет работать, если между устройствами будет один из следующих каналов: Ethernet (например, IP поверх Ethernet II есть RFC 894), ATM (RFC 1932), линки типа точка-точка (например, протоколы PPP или HDLC), есть даже документ, описывающий работу протокола IP поверх голубей (RFC 1149), и это далеко не полный список. Протоколу IP не важен даже размер компьютерной сети, его можно использовать как в сетях BAN, так и в сетях WAN.
Теперь стоит поговорить не конкретно о видах IP-адресов, а о видах адресов в сети, построенной по архитектуре TCP/IP, тут для нас будут важны четыре вида адресов:
локальные адреса, для нас это будут MAC-адреса;
сетевые адреса, естественно, в нашем случае это IP-адреса;
адреса транспортного уровня;
символьные адреса или доменные имена.
Начнем двигаться снизу-вверх по иерархии модели TCP/IP.
4.1.2.1 Локальные адреса или мак-адреса
Локальные адреса в общем случае, а в частном и самом распространенном случае это мак-адреса. Также вы можете услышать вместо локальный адрес или мак-адрес такие фразы: аппаратный адрес или физический адрес, но как бы странно это не звучало – это адрес канального уровня (он не имеет никакого отношения к физическому уровню эталонной модели), который позволяет взаимодействовать устройствам в одной канальной среде. Чтобы было более наглядно, посмотрите на рисунок ниже.
Рисунок 4.1.3 Схема, в которой четыре узла и две подсети
Здесь мы видим четыре узла, для них подписаны IP-адреса и маски подсети в префиксной записи, где /24 означает, что в маски подсети двадцать четыре единицы, из подписей можно сделать вывод, что стационарные ПК находятся в одной канальной среде или в одной подсети, а ноутбуки находятся в другой подсети. В данном случае взаимодействие между этими подсетями невозможно, то есть ноутбук не сможет достучаться до компьютера и наоборот, поскольку узлы соединены коммутатором, а как вы помните, обычный L2 коммутатор ничего не знает про IP-адреса (хорошо еще, что здесь мы не использовали хаб/сетевой концентратор, который работает на физическом уровне), он оперирует MAC-адресами (про разницу между хабами, коммутаторами и роутерами можно почитать здесь).
Вообще, мак-адреса должны быть уникальными во всем мире, ну вы помните, мы об этом говорили, когда разбирались со структурой мак-адреса, но достаточно, чтобы мак-адреса были различными в пределах одной канальной среды или в одной подсети. В нашем случае все четыре устройства имеют разные мак-адреса. Почему устройства из одной подсети должны иметь разные мак-адреса? Дело в том, что общение между этими устройствами происходит не на основе IP-адреса, а на основе мак-адреса.
Как же тогда сделать так, чтобы компьютер смог общаться с ноутбуком? Тут у нас два варианта: первый заключается в том, чтобы «поместить» ноутбуки в одну подсеть с компьютерами, изменив их сетевые настройки, ну например: Laptop1 задать адрес и маску 192.168.2.3/24, а второму 192.168.2.4/24. Второй вариант заключается в использование роутера, тогда один интерфейс роутера будет смотреть в сеть с ноутбуками и на этом интерфейсе будет задан адрес из этой подсети, например, IP-адрес 192.168.1.3/24, а второй интерфейс роутера будет смотреть в сеть стационарных ПК и на нем будет задан адрес из этой подсети: 192.168.2.25/24.
Но это еще не все, для устройств из подсети «компьютеры» нам нужно будет прописать основной шлюз: 192.168.2.25, таким образом компьютеры будут знать: на какое устройство слать пакеты, если IP-адрес не из их локальной сети, ну а устройствам из сети «ноутбуки» нужно задать шлюз по умолчанию 192.168.1.3, для этих же целей. Что делает с Ethernet кадрами и IP-пакетами роутер, когда пересылает данные из одной сети в другую, мы смотрели, когда говорили про назначение роутеров и более обстоятельно эта тема раскрыта в теме разница между хабами коммутаторами и роутерами, сейчас на этом не останавливаемся, но для наглядности приведу схему.
Рисунок 4.1.4 Схема, в которой четыре узла, две подсети и роутер
Наша схема преобразилась и теперь в ней есть роутер, обратите внимание: в данном случае один физический порт роутера смотрит в сеть «компьютеры», а второй физический порт роутера смотрит в сеть «ноутбуки», граница между этими канальными средами проходит по роутеру, а у каждого порта роутера свой мак-адрес, дело все в том, что устройства из подсети будут обращаться к своему порту роутера при помощи мак-адреса. Собственно, по этой причине мак-адреса называют локальными, так как они нужны для взаимодействия в пределах одной подсети. Если вы не понимаете обозначения на схеме, то рекомендую ознакомится с темой «Условные обозначения Cisco и стандартные физические компоненты компьютерной сети».
Все схемы собраны в программе Cisco Packet Tracer, вот инструкция по установке Cisco Packet Tracer в Windows, а вот мануал по установке Packet Tracer на Linux дистрибутив Ubuntu. Чтобы быстро разобраться с интерфейсом Cisco Packet Tracer, вы можете ознакомиться с публикацией простая схема сетевого взаимодействия.
4.1.2.2 Сетевые адреса или IP-адреса
Вы же помните, что IP решает две задачи: транспортировку и глобальную адресацию. И то, и другое возможно благодаря IP-адресу, который выглядит непрезентабельно, например, так: 192.168.1.1. Каких-то четыре числа разделенных точками. Хотя на самом деле число одно и для железок оно представлено в двоичном виде, а для нас как-то так. В IP-адресе зашифровано две важные вещи: номер сети и номер узла. В современно мире разделение делается на основе маски, раньше IP сети делились на классы, но и там были маски подсети, только сейчас используются маски переменной длинны, а раньше размер маски был фиксированный.
В нашем случае, описанном выше, номер сети «ноутбуки» выглядит так: 192.168.1.0, в этой сети у нас три узла, у каждого из этих узлов есть номер: у первого ноутбука это 1, у второго 2, а у порта роутера 3. По аналогии можно понять, что творится в подсети «компьютеры». Определять где заканчивается номер сети и начинается номер узла в IP-адресе мы научимся позже, сейчас просто обозначаем. Нам важно сделать вывод о том, что в Интернете все сети имеют уникальные номера, но и это еще не все, все узлы в этих сетях также имеют уникальные номера. То же самое справедливо и для локальной сети, если она разбита на подсети, например, как наша, у нас есть две сети с уникальными номерами: 192.168.1.0 и 192.168.2.0, а внутри этих сетей есть узлы, у которых тоже номера уникальны.
Классический маршрутизатор по своему определению должен смотреть своими интерфейсами в разные подсети, ведь его задача заключается в том, чтобы объединить две или более подсети в единую сеть, а это означает, что маршрутизатор будет иметь несколько IP-адресов из разных подсетей.
4.1.2.3 Адреса транспортного уровня
На транспортном уровне тоже есть свои адреса, эти адреса называются сокетами, которые представляют собой пару IP-адрес + номер TCP/UDP порта. Так, например, чтобы попасть на сайт по протоколу HTTP, наш компьютер будет посылать запрос удаленному серверу на 80-ый TCP порт, выглядеть это будет примерно так 192.168.1.1:80. Но это еще не все, дело в том, что серверу надо как-то ответить своему клиенту, для этого он тоже будет использовать TCP. А это означает, что клиент должен заранее позаботиться о том, чтобы сервер знал – на какой TCP порт нужно отвечать, поэтому в TCP-сегменте (так называются сообщения в протоколе TCP) указывается два порта: порт источника, чаще всего это случайно сгенерированное число и порт назначения (чаще всего этот порт относится к хорошо известным и закреплен за каким-нибудь протоколом), в нашем случае порт является хорошо известным (80 порт закреплен за HTTP).
Для примера, у нас есть компьютер с IP-адресом 10.10.10.25 и где-то в нашей сети есть веб-сервер, доступ к которому осуществляется по HTTPs, пусть у этого сервера будет IP-адрес 192.168.1.67. Тогда наш клиент сформирует TCP сообщение, в котором будет два сокета, сокет источника 10.10.10.25:45678 (в данном случае число 45678 является случайно сгенерированным), этим сокетом воспользуется сервер, чтобы ответить клиенту; а также у нас будет сокет назначения: 192.168.1.67:443, в данном случае число 443 означает, что мы обращаемся к серверу по протоколу HTTPs, TCP порт 443 является хорошо известным. Разобраться со схемой взаимодействия клиент-сервер, вам поможет эта публикация.
Какие выводы можно сделать? Да все очень просто! Адресация на транспортном уровне нужна и важна для конечных устройств. Именно благодаря ей конечные узлы понимают: для какого приложения приходят данные. Здесь мы поговорили очень сжато и скомкано, поскольку у нас будет отдельная тема по транспортному уровню, где мы все расставим по своим местам.
Из запланированного нам осталось коротко поговорить о версиях протокола IP, коих на данный момент две: IPv4 и IPv6. С версией IPv4 мы разберемся в данной теме, а вот версии IPv6 мы уделим свое внимание в отдельной теме ближе к концу. Сделаем поверхностный разбор каждой из представленных версий протокола IP.
Начнем с IPv4, цифра четыре здесь не означает четыре октета в IP-адресе, просто так случайно вышло. Больше всего нас интересует IP-адрес, под него в IPv4 выделено четыре байта или октета, как известно, в байте 8 бит, то есть восемь двоичных значений (0 или 1), следовательно, максимально возможное десятичное число равно 255, минимально допустимое 0. Думаю, приводить примеры IP-адресов для IPv4 не нужно, вам они уже знакомы. Более детальное описание у нас будет в отдельной теме.
Обмен информацией в IPv4 происходит при помощи IP-пакетов, у данной версии протокола этот пакет делится на два больших поля: поле данных, в котором переносится полезная информация и заголовок, в котором заложен весь функционал протокола, заголовок пакета IPv4 содержит 14 полей, тринадцать из которых обязательные и одно опциональное. Вообще, протокол IPv4 дает нам в распоряжение 2 в 32 степени IP-адресов или же 4 294 967 296. Но этих адресов уже начинает не хватать, дело все в том, что этот протокол был разработан 1980-ом году, тогда это число выглядело ужасающе большим, сейчас во времена интернет-чайников и тостеров со встроенным Wi-Fi этого пространства начинает не хватать.
Осознание того, что 4.2 млрд адресов не хватит начало приходить в 90-ых годах, а в 1996 году появился протокол IPv6, который должен когда-нибудь заменить IPv4. Дело всё в том, что под IP-адрес в IPv6 выделено 128 бит или 16 байт, а это уже совсем другая история. Теперь давайте попытаемся немного по сравнивать IPv4 и IPv6. Во-первых, IPv6 делает такую технологию, как NAT в текущих условиях бесполезной (для кого-то это плюс, а для кого-то это минус, поскольку NAT не только позволяет «перебивать» много частных IP-адресов в один публичный, но является первой линией защиты вашей компьютерной сети).
Маршрутизация в чистом своем виде (а есть и нечистые маршрутизации, которые очень ускоряют процесс обработки пакетов роутером) в IPv6 стала быстрее, чем в IPv4 даже несмотря на то, что адрес IPv6 значительно больше, дело все в том, что количество полей в IPv6 стало меньше, хотя сам заголовок оказался несколько длиннее, также немного изменен алгоритм обработки IPv6 пакетов маршрутизатором. Сейчас не будем далее углубляться в IPv6, а лучше перейдем к следующим темам, в которых мы разберемся с IPv4.