💻
Подготовка к собеседованию
  • Оглавление
  • Архитектурные вопросы
    • Как избавиться от монолитности приложения?
    • Модульность VS Микросервисы
    • Микросервисы VS Монолит
    • Web services, RESTfull, SOAP
    • Распределенные системы
    • Вопросы по микросервисам
    • Разложение монолита
  • Языки программирования
    • Императивные и декларативные языки программирования
    • Функциональное программирование
  • Коммуникация
    • Основы WEB
    • Уровни модели OSI
    • IP
    • TCP
    • UDP
    • TCP и UDP – в чем разница?
    • TCP/IP
    • Приложения TCP / IP
    • ICMP
    • HTTP
    • HTTP/1.1 vs HTTP/2
    • Разница между HTTP и HTTPS
    • URL и URI - в чем различие?
    • SSL
    • TLS
    • Web Sockets
    • SOAP vs REST vs GraphQL vs RPC
    • DNS
    • Как работает интернет
  • среда выполнения
    • Процессы, потоки,нити
  • Алгоритмы
    • Алгоритмы и структуры данных
  • БД
    • Основы БД
    • Транзакции
    • Нормализация БД
    • SQL
  • Брокеры сообщений
    • Введение в kafka
    • kafka
    • 5 вещей, о которых должен знать любой разработчик Apache Kafka
  • Парадигмы проектирования
    • 10 важнейших принципов разработки программного обеспечения
    • Принципы для разработки: KISS, DRY, YAGNI, BDUF, SOLID, APO и бритва Оккама
  • Highload
    • За двумя зайцами погонишься — чеклист для HighLoad системы гуглить будешь
Powered by GitBook
On this page

Was this helpful?

  1. Коммуникация

IP

PreviousУровни модели OSINextTCP

Last updated 4 years ago

Was this helpful?

Internet Protocol или IP— маршрутизируемый протокол сетевого уровня . Благодаря протоколу IP существует нынешняя сеть Интернет, поскольку именно этот протокол стал связующей нитью между разрозненными компьютерными сетями во всем мире. На данный момент нам нужно выделить два ключевых понятия в протоколе IP: минимально единицей измерения данных здесь является IP-пакет (), который чаще всего в Ethernet кадр, а также каждый узел на сетевом уровне в модели TCP/IP должен иметь IP-адрес.

Мы уже не раз говорили, что протокол IP относится к сетевому уровню модели TCP/IP, это также справедливо и для . Также мы уже не раз применяли этот протокол на практике, а значит косвенно касались вопроса о значении протокола 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-адресов в локальной сети

Рисунок 4.1.1 Пример использования IP-адресов в локальной сети

Стоит обратить внимание на то, что сейчас для нас неважно как узлы получают IP-адреса: назначаются они руками, или их выдает DHCP-сервер, также мы сейчас даже не затрагиваем вопрос: как частные IP-адреса превращаются в публичные при выходе в сеть Интернет, забегая вперед отмечу, что делается это при помощи протокола NAT.

Рисунок 4.1.2 Модель стека протоколов TCP/IP

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

4.1.2 Типы адресов в модели TCP/IP

Теперь стоит поговорить не конкретно о видах IP-адресов, а о видах адресов в сети, построенной по архитектуре TCP/IP, тут для нас будут важны четыре вида адресов:

  • локальные адреса, для нас это будут MAC-адреса;

  • сетевые адреса, естественно, в нашем случае это IP-адреса;

  • адреса транспортного уровня;

  • символьные адреса или доменные имена.

Начнем двигаться снизу-вверх по иерархии модели TCP/IP.

4.1.2.1 Локальные адреса или мак-адреса

Рисунок 4.1.3 Схема, в которой четыре узла и две подсети

Вообще, мак-адреса должны быть уникальными во всем мире, ну вы помните, мы об этом говорили, когда разбирались со структурой мак-адреса, но достаточно, чтобы мак-адреса были различными в пределах одной канальной среды или в одной подсети. В нашем случае все четыре устройства имеют разные мак-адреса. Почему устройства из одной подсети должны иметь разные мак-адреса? Дело в том, что общение между этими устройствами происходит не на основе 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 Схема, в которой четыре узла, две подсети и роутер

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 Адреса транспортного уровня

Какие выводы можно сделать? Да все очень просто! Адресация на транспортном уровне нужна и важна для конечных устройств. Именно благодаря ей конечные узлы понимают: для какого приложения приходят данные. Здесь мы поговорили очень сжато и скомкано, поскольку у нас будет отдельная тема по транспортному уровню, где мы все расставим по своим местам.

4.1.3 Версии протокола IP: IPv4 и IPv6

Из запланированного нам осталось коротко поговорить о версиях протокола 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.

Вторая функция протокола 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.

Модель стека протоколов TCP-IP

Протоколу IP не важно , какая , протоколу IP даже не важно поверх какого протокола канального уровня работать, протокол IP будет точно будет работать, если между устройствами будет один из следующих каналов: Ethernet (например, IP поверх Ethernet II есть RFC 894), ATM (RFC 1932), линки типа точка-точка (например, протоколы PPP или HDLC), есть даже документ, описывающий работу протокола IP поверх голубей (RFC 1149), и это далеко не полный список. Протоколу IP не важен даже , его можно использовать как в сетях BAN, так и в сетях WAN.

Локальные адреса в общем случае, а в частном и самом распространенном случае это мак-адреса. Также вы можете услышать вместо локальный адрес или мак-адрес такие фразы: аппаратный адрес или физический адрес, но как бы странно это не звучало – это адрес канального уровня (он не имеет никакого отношения к ), который позволяет взаимодействовать устройствам в одной канальной среде. Чтобы было более наглядно, посмотрите на рисунок ниже.

4.1.3 Схема, в которой четыре узла и две подсети

Здесь мы видим четыре узла, для них подписаны IP-адреса и маски подсети в префиксной записи, где /24 означает, что в маски подсети двадцать четыре единицы, из подписей можно сделать вывод, что стационарные ПК находятся в одной канальной среде или в одной подсети, а ноутбуки находятся в другой подсети. В данном случае взаимодействие между этими подсетями невозможно, то есть ноутбук не сможет достучаться до компьютера и наоборот, поскольку узлы соединены коммутатором, а как вы помните, обычный ничего не знает про IP-адреса (хорошо еще, что здесь мы не использовали , который работает на физическом уровне), он оперирует MAC-адресами (про можно почитать здесь).

4.1.4 Схема, в которой четыре узла и две подсети и роутер

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

Все схемы собраны в программе Cisco Packet Tracer, вот инструкция по , а вот мануал . Чтобы быстро разобраться с интерфейсом Cisco Packet Tracer, вы можете ознакомиться с публикацией

На транспортном уровне тоже есть свои адреса, эти адреса называются сокетами, которые представляют собой пару IP-адрес + номер TCP/UDP порта. Так, например, чтобы попасть на сайт по , наш компьютер будет посылать запрос удаленному на 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 является хорошо известным. Разобраться со , вам поможет эта публикация.

взаимодействие с установлением соединения
вид взаимодействия
канальным уровнем
какими характеристиками обладает компьютерная сеть
топология у сети передачи данных
размер компьютерной сети
физическому уровню
эталонной модели
L2 коммутатор
хаб/сетевой концентратор
разницу между хабами, коммутаторами и роутерами
Условные обозначения Cisco и стандартные физические компоненты компьютерной сети
установке Cisco Packet Tracer в Windows
по установке Packet Tracer на Linux дистрибутив Ubuntu
простая схема сетевого взаимодействия.
протоколу HTTP
серверу
клиенту
веб-сервер
схемой взаимодействия клиент-сервер
модели стека протоколов TCP/IP
о единицах измерения в компьютерных сетях
инкапсулируется
эталонной модели OSI 7
в компьютерных сетях или сетях передачи данных
в моей домашней сети есть четыре устройства, которые подключатся к роутеру
пропинговав