Приветствую, коллеги! Меня зовут @ProstoKirReal. Сегодня хотелось бы с вами обсудить самые распространенные протоколы, а также принципы их работы.
❯ Зачем нужна эта статья?
Данные несколько статей будет описывать самые популярные протоколы и принципы их работы.
❯ ARP
ARP (Address Resolution Protocol) — это самый важный протокол в компьютерных сетях, предназначенный для определения MAC-адреса другого компьютера по известному IP.
Ни один компьютер или сетевое устройство не начнет отправлять пакеты данных, если не знает MAC-адрес целевого устройства (шлюза по умолчанию или следующего узла в маршрутизации). Протокол ARP позволяет автоматически определить MAC-адрес по IP-адресу. Протокол работает в режиме запрос-ответ.
Устройство отправляет ARP-запрос на широковещательный MAC-адрес. Все устройства в сети получают этот запрос. Устройство, чей IP-адрес совпадает с указанным в запросе, отправляет ARP-ответ, содержащий свой MAC-адрес. Устройство-отправитель запроса получает ответ, извлекает из него MAC-адрес и сохраняет его в свою ARP-таблицу (таблицу MAC-адресов), чтобы использовать его для дальнейшей передачи данных на канальном уровне.
❯ IPv4
IPv4 (Internet Protocol version 4) — один из основных протоколов, использующихся для межсетевого взаимодействия в интернете и других сетях с коммутацией пакетов. IPv4 поддерживает несколько типов полезной нагрузки. Наиболее распространенные из них:
-
ICMP — протокол управляющих сообщений;
-
IGMP — протокол управления интернет-группами;
-
TCP — протокол управления передачей;
-
UDP — протокол пользовательских дейтограмм;
-
SCTP — протокол управления передачей потока.
❯ ICMP
ICMP (Internet Control Message Protocol) — это протокол, предназначенный для отправки сообщений об ошибках и передачи служебной информации, которая указывает на успех или неудачу при обмене данными с другим IP-адресом. Обычно ICMP не используется для передачи данных между устройствами, а применяется для проверки связи между двумя хостами с помощью программ, таких как ping или traceroute.
Например, можно ввести команду «ping 192.168.1.1», чтобы узнать, доступен ли этот IP-адрес.
Заголовок ICMP идет после заголовка IPv4 и идентифицируется как протокол 1. ICMP-пакеты содержат 8-битный заголовок и данные переменного размера. Поле Type указывает на тип пакета. Если значение равно 8 это запрос ICMP echo (ping), если 0 — ответ ICMP echo (ping).
❯ IGMP
IGMP (Internet Group Management Protocol) — это сетевой протокол, используемый для взаимодействия клиентов, которые принимают мультикастовый трафик. Он управляет групповыми соединениями и играет ключевую роль в организации многоадресной передачи данных, обеспечивая динамическую рассылку пакетов в сети. IGMP входит в состав пакета протоколов TCP/IP и используется для передачи данных по принципу multicast.
Multicast — это метод передачи данных по IPv4-сетям, который позволяет отправлять один поток данных сразу большому числу получателей. В режиме multicast отправитель передает данные не одному получателю, а целой группе адресатов, что может включать как частных пользователей, так и корпоративные сети, подключенные к разным подсетям.
Когда клиент запускает подключение к multicast-группе, например, с адресом 224.2.2.4, он отправляет запрос IGMP Membership Report, указывая, что хочет получать мультикастовый трафик. Этот запрос действует только в пределах своего сетевого сегмента и не пересылается маршрутизаторами в другие сети.
После получения запроса маршрутизатор регистрирует наличие клиента за соответствующим интерфейсом и заносит информацию о нём в свою таблицу. С этого момента маршрутизатор начинает пересылать мультикастовый трафик на соответствующее устройство. Когда клиент отключается, маршрутизатор отправляет запрос всем подключенным устройствам, и те, кто хочет продолжать получать трафик, отвечают. После получения ответов маршрутизатор обновляет свои таблицы и продолжает доставку трафика только тем, кто остался в группе. Если устройство вышло из группы, ему отправляется IGMP-пакет, сообщающий об этом.
IGMP существует в трёх версиях, каждая из которых обратно совместима с предыдущими. На сегодняшний день наиболее распространены версии IGMPv2 и IGMPv3.
❯ UDP
UDP (User Datagram Protocol) — один из ключевых элементов набора сетевых протоколов для Интернета. С помощью UDP приложения могут посылать сообщения другим хостам по IP-сети без необходимости устанавливать соединение, как это требуется в протоколе TCP.
UDP является протоколом без установления соединения, что означает отсутствие обязательного установления специальных каналов передачи данных перед отправкой сообщений.
UDP не предоставляет гарантий доставки, порядка получения или целостности сообщений для вышестоящего протокола и не сохраняет состояния отправленных сообщений. Он обеспечивает простую передачу данных с минимальной задержкой, а также включает контроль целостности заголовка и данных с помощью контрольной суммы.
Когда приложение, использующее UDP, отправляет данные другому хосту в сети, UDP добавляет к этим данным заголовок длиной 8 байтов, содержащий номера портов отправителя и получателя, общую длину дейтаграммы и контрольную сумму. После этого IP-протокол добавляет свой заголовок поверх дейтаграммы UDP, формируя IP-дейтаграмму. Теоретически максимальный размер IP-дейтаграммы составляет 65535 байтов, включая заголовки IP и UDP.
Контрольная сумма UDP используется для проверки целостности данных и заголовка. Она включает как данные, так и заголовок UDP, а также псевдозаголовок, состоящий из части информации IP-заголовка. Если контрольная сумма не совпадает, получатель определяет, что данные повреждены, и может отбросить пакет. Важно отметить, если контрольная сумма равна нулю (в IPv4), это означает, что она не используется.
После того как UDP добавляет свой заголовок, IP-уровень накладывает заголовок, включающий такие поля, как TTL, IP-адрес источника и получателя.
❯ TCP
TCP (Transmission Control Protocol) — это протокол передачи цифровых данных, который является частью стека TCP/IP. Протокол TCP описывает правила передачи данных и стандарты взаимодействия между устройствами в сети, а также поддерживает механизмы маршрутизации и межсетевого взаимодействия. В отличие от UDP, TCP является протоколом с установлением соединения, то есть перед передачей данных TCP требует, чтобы между двумя узлами было установлено соединение. После завершения передачи данных соединение также должно быть закрыто.
Перед передачей данных TCP устанавливает соединение между отправителем и получателем с помощью механизма трехстороннего рукопожатия (three-way handshake). Этот процесс обеспечивает уверенность в том, что получатель существует, слушает нужный порт и готов принимать данные.
Процесс трехстороннего рукопожатия включает следующие шаги:
-
Отправитель посылает сегмент с флагом SYN (synchronize), чтобы инициализировать соединение.
-
Получатель отвечает сегментом с флагом SYN-ACK, подтверждая готовность к соединению.
-
Отправитель посылает сегмент с флагом ACK, завершая установку соединения.
После установки соединения начинается передача полезных данных. TCP обеспечивает надежную передачу данных с помощью механизма подтверждений. Получатель данных подтверждает получение каждого сегмента, отправляя отправителю сообщение с порядковым номером следующего сегмента, который он ожидает получить. Если подтверждение не приходит в установленное время, сегмент передается заново. После нескольких неудачных попыток TCP может решить, что соединение потеряно, и завершить сессию.
Когда все данные переданы, TCP инициирует процесс завершения соединения. Это также происходит в несколько шагов:
-
Отправитель посылает сегмент с флагом FIN (finish), указывая на завершение передачи данных.
-
Получатель подтверждает это с помощью сегмента с флагом ACK и отправляет свой сегмент с флагом FIN.
-
Отправитель подтверждает это сегментом с флагом ACK, и соединение закрывается.
❯ SCTP
SCTP (Stream Control Transmission Protocol) — это транспортный протокол, который был разработан для передачи данных в сетях с высокой надежностью и безопасности, таких как IP-сети. Основной целью создания SCTP было объединить лучшие черты других транспортных протоколов, таких как TCP (надёжная передача данных с подтверждением) и UDP (низкая задержка и поддержка мультипоточности), предоставив возможности, которых им не хватало.
Основные характеристики SCTP
1. Мультипоточность: SCTP поддерживает передачу нескольких независимых потоков данных внутри одного соединения. Это значит, что если один поток данных блокируется (например, из-за потери пакетов), другие потоки могут продолжать передаваться без задержек. Это значительно улучшает производительность приложений, использующих несколько потоков данных одновременно.
2. Мультихоминг: SCTP поддерживает концепцию мультихоминга, что позволяет одному узлу иметь несколько IP-адресов в рамках одного соединения. Это обеспечивает устойчивость к отказам — если один маршрут между узлами теряется, протокол может автоматически переключиться на другой IP-адрес без разрыва соединения.
3. Контроль целостности данных: SCTP использует 32-битные контрольные суммы CRC для проверки целостности данных в каждом передаваемом пакете, что обеспечивает более высокую надёжность по сравнению с контрольной суммой TCP, которая основана на алгоритме контрольной суммы по модулю 16.
4. Контроль перегрузок: протокол включает в себя механизмы управления перегрузками, похожие на те, что используются в TCP, для предотвращения избыточного использования сетевых ресурсов и потерь данных.
5. Управление соединениями: как и TCP, SCTP является протоколом с установкой соединения (connection-oriented). Это значит, что перед передачей данных узлы должны сначала установить соединение. Однако, в отличие от TCP, SCTP использует четырёхэтапный процесс установления соединения (four-way handshake), что делает его менее уязвимым к атакам типа SYN-flood.
6. Передача сообщений: SCTP предназначен для передачи целых сообщений, а не просто потоков байтов, как это делает TCP. Это упрощает работу с протоколом для приложений, которые работают с логическими единицами данных, например, телефонных вызовов или сигнализации.
Структура SCTP-пакета
SCTP-пакет состоит из нескольких частей:
1. Заголовок общего назначения (Common Header):
-
Source Port и Destination Port: порты отправителя и получателя.
-
Verification Tag: идентификатор, используемый для проверки достоверности пакетов, чтобы убедиться, что пакет принадлежит корректному соединению.
-
Checksum: контрольная сумма CRC32 для проверки целостности данных.
2. Чанки (Chunks): после общего заголовка следует один или несколько чанков, которые могут содержать управляющие или полезные данные. Каждый чанк имеет свой заголовок, состоящий из:
-
Типа чанка: указывает на тип данных (например, управление соединением или передача полезных данных).
-
Флагов: дополнительные параметры.
-
Длины чанка: длина чанка вместе с его данными.
-
Полезных данных: в случае чанков с данными они содержат сегменты передаваемых сообщений.
Основные применения SCTP
1. Телефония и сигнализация: SCTP был разработан с учётом нужд телефонии по IP и сигнальных систем, таких как протокол SS7. Он был предназначен для передачи сигнализации в системах телекоммуникаций, обеспечивая надёжную доставку данных.
2. Интернет-приложения: приложения, требующие надежной многопоточной передачи данных, например, потоковое мультимедиа и видеоконференции, могут использовать SCTP для повышения производительности и устойчивости к сбоям.
3. Системы с высокой доступностью: в распределённых системах, где критична непрерывная доступность данных (например, в банковской или финансовой отраслях), SCTP может использоваться благодаря поддержке мультихоминга.
Преимущества SCTP по сравнению с TCP и UDP
-
В отличие от TCP, SCTP поддерживает мультипоточность и мультихоминг, что делает его более гибким и надёжным в сложных сетевых условиях.
-
В отличие от UDP, SCTP обеспечивает надёжную доставку данных, что особенно важно для приложений, которым нужно гарантировать доставку сообщений.
SCTP сочетает в себе сильные стороны как TCP, так и UDP, и расширяет их, добавляя дополнительные возможности, что делает его идеальным для критичных приложений.
Сравнительная таблица SCTP с TCP и UDP:
Параметр |
UDP |
TCP |
SCTP |
Установка соединения |
Нет |
Да |
Да |
Надежная передача |
Нет |
Да |
Да |
Сохранение границ |
Да |
Нет |
Да |
Упорядоченная доставка |
Нет |
Да |
Да |
Неупорядоченная доставка |
Да |
Нет |
Да |
Контрольные суммы данных |
Да |
Да |
Да |
Размер контрольной суммы (бит) |
16 |
16 |
32 |
Путь MTU |
Нет |
Да |
Да |
Управление накоплением |
Нет |
Нет |
Да |
Многопоточность |
Нет |
Нет |
Да |
Поддержка множественных интерфейсов |
Нет |
Нет |
Да |
Связка потоков |
Нет |
Да |
Да |
❯ DNS
DNS (Domain Name System) – протокол, обеспечивающий преобразование доменных имен в IP-адреса. DNS является неотъемлемой частью интернета и частных сетей, так как пользователям удобнее запоминать доменные имена, а не длинные числовые IP-адреса.
DNS использует протокол транспортного уровня UDP.
Когда пользователь вводит в браузере доменное имя (например, timeweb.com), запрос направляется на DNS-сервер, который ищет соответствующий IP-адрес в своих таблицах. Если сервер не может найти информацию, он перенаправляет запрос на другие DNS-серверы, пока не будет найден нужный IP-адрес. Когда адрес найден, он возвращается пользователю, и устройство отправляет запрос по сети к полученному IP-адресу.
Этапы разрешения имен:
-
Рекурсивный запрос: когда устройство отправляет запрос на разрешение доменного имени, DNS-сервер начинает последовательный поиск, проходя через несколько уровней серверов.
-
Кэширование: чтобы ускорить процесс, DNS-серверы и клиенты временно сохраняют информацию о преобразованных доменах, что сокращает время на последующие запросы.
-
Зоны и домены: интернет разделен на зоны, каждая из которых управляется определенным DNS-сервером. Например, зона «.com» имеет свой корневой сервер, который управляет всеми доменами, оканчивающимися на «.com».
DNS работает через несколько типов записей:
-
A-запись: сопоставляет доменное имя с IPv4-адресом.
-
AAAA-запись: сопоставляет доменное имя с IPv6-адресом.
-
MX-запись: указывает на сервер для обработки электронной почты.
-
CNAME: создает псевдоним для другого доменного имени.
❯ DHCP
DHCP (Dynamic Host Configuration Protocol) — протокол, который автоматически назначает IP-адреса и другие параметры сети устройствам в сети. Он упрощает конфигурацию, так как устройства не нуждаются в ручной настройке IP-адресов, масок подсети, шлюзов и DNS-серверов.
DHCP использует протокол транспортного уровня UDP.
Когда устройство подключается к сети, оно отправляет широковещательный DHCP-запрос (DHCP DISCOVER), чтобы найти DHCP-сервер. Сервер отвечает предложением (DHCP OFFER), содержащим доступный IP-адрес и другую сетевую информацию. Устройство отправляет запрос (DHCP REQUEST) на получение предложенного IP-адреса, а сервер окончательно подтверждает выделение IP-адреса (DHCP ACK). При отключении устройства серверу DHCP отправляется сообщение RELEASE, уведомляющее его о том, что выделенный IP-адрес больше не нужен.
Этапы процесса:
-
Discover: устройство отправляет широковещательный запрос, чтобы найти DHCP-сервер.
-
Offer: сервер предлагает доступный IP-адрес.
-
Request: устройство выбирает предложенный адрес и запрашивает его использование.
-
Ack: сервер подтверждает назначение IP-адреса.
В одной сети может быть несколько DHCP-серверов. Если они получат широковещательный запрос, оба предложат свои IP-адреса. Устройство выберет один из предложенных IP-адресов и отправит DHCP REQUEST всем серверам, указав выбранный IP-адрес. В ответ на четвертое сообщение (DHCP ACK) отзовется только тот сервер, чей IP-адрес был выбран.
После того как проходит 50% от времени аренды IP-адреса, необходимо либо продлить текущий IP-адрес, либо получить новый. Для продления устройства сразу отправляют DHCP REQUEST, указывая IP-адрес, который нужно продлить. Если сервер не отвечает и прошло 87% от времени аренды, снова отправляется широковещательный запрос DHCP DISCOVER с целью получения нового IP-адреса.
Дополнительные параметры, которые DHCP может передавать:
-
Маска подсети
-
Шлюз по умолчанию
-
DNS-серверы
-
Время аренды IP-адреса (lease)
DHCP значительно упрощает управление сетями, особенно в крупных организациях, где вручную назначать IP-адреса было бы непрактично.
❯ Заключение
В заключение данной статьи хотелось бы подчеркнуть важность описанных протоколов для работы современных сетей. Все перечисленные протоколы играют ключевые роли на различных уровнях модели OSI, обеспечивая обмен данными и их надежную доставку в сетевых взаимодействиях. Понимание принципов работы этих протоколов помогает эффективнее управлять сетями и решать возникающие проблемы.
В следующей статье я планирую более детально рассмотреть протоколы туннелирования и динамической маршрутизации.
Автор: ProstoKirReal